diff --git a/Divilkovskiy2024SourceSpace/code/ckpt_s100.pth b/Divilkovskiy2024SourceSpace/code/ckpt_s100.pth new file mode 100644 index 0000000..7391312 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/ckpt_s100.pth differ diff --git a/Divilkovskiy2024SourceSpace/code/lib_score_based_model.ipynb b/Divilkovskiy2024SourceSpace/code/lib_score_based_model.ipynb new file mode 100644 index 0000000..0985c29 --- /dev/null +++ b/Divilkovskiy2024SourceSpace/code/lib_score_based_model.ipynb @@ -0,0 +1,1122 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bedzSPz8yuCE", + "outputId": "b4cdeef7-e4aa-466e-c625-404d7b815442" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-05-22 16:24:26.613110: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "2024-05-22 16:24:27.350346: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2024-05-22 16:24:28.170781: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "import random as rn\n", + "import pandas as pd\n", + "import tensorflow as tf\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import LSTM, Dense, Normalization\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import numpy as np\n", + "import functools\n", + "\n", + "from torchvision.utils import make_grid\n", + "from statsmodels.stats.correlation_tools import corr_nearest, cov_nearest\n", + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.metrics import mean_absolute_percentage_error\n", + "\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.decomposition import PCA\n", + "from sklearn.manifold import MDS\n", + "from sklearn.metrics import mean_squared_error\n", + "from scipy.linalg import hankel\n", + "from sklearn.covariance import LedoitWolf\n", + "from scipy import integrate\n", + "from torch.optim import Adam\n", + "from torch.utils.data import DataLoader, TensorDataset\n", + "from torchvision import datasets, transforms\n", + "from torchvision.datasets import MNIST\n", + "import tqdm\n", + "\n", + "from torch.utils.tensorboard import SummaryWriter\n", + "\n", + "# Fix seed for NumPy\n", + "np.random.seed(42)\n", + "\n", + "# Fix seed for TensorFlow\n", + "tf.random.set_seed(42)\n", + "\n", + "rn.seed(42)\n", + "\n", + "tf.keras.utils.set_random_seed(42)\n", + "\n", + "# Fix seed for Torch\n", + "torch.manual_seed(42)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9MRNSXQP0HAe" + }, + "source": [ + "Если нужен google drive" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HxJ6cwTI0SfI" + }, + "source": [ + "Если нужен tensorboard" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 821, + "resources": { + "https://localhost:6006/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250LXNpemU6MTEycHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjExMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udC1zaXplOjU2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250LXNpemU6NDVweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDhweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjBweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDozMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCBub3JtYWwpO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC1kZWNvcmF0aW9uLCBub25lKTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF0rLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLTUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMiwubWF0LWhlYWRsaW5lLTYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNiwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJ0aXRsZS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YnRpdGxlLTEsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyOHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDA5Mzc1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MjRweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAzMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LXN1YnRpdGxlLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3VidGl0bGUtMntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MjJweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzE0Mjg1NzFlbX0ubWF0LWJvZHksLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtYm9keSBwLC5tYXQtYm9keS0yIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMiBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDMzMzMzMzMzM2VtfS5tYXQtaGVhZGxpbmUtMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZS0xe2ZvbnQtc2l6ZTo5NnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDo5NnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMTU2MjVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1oZWFkbGluZS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTJ7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjYwcHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzMzMzM2VtO21hcmdpbjowIDAgNjRweH0ubWF0LWhlYWRsaW5lLTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtM3tmb250LXNpemU6NDhweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NTBweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWhlYWRsaW5lLTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUtNHtmb250LXNpemU6MzRweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6NDBweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzM1Mjk0MTJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDE3ODU3MTQyOWVtfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTZweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250LXNpemU6MjBweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MzJweDtmb250LWZhbWlseTpSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAxMjVlbTttYXJnaW46MH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1tZGMtb3B0aW9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pfS5tYXQtbWRjLWNhcmQtdGl0bGV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktaGVhZGxpbmU2LWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1mb250LXNpemUsIDIwcHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1saW5lLWhlaWdodCwgMzJweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktaGVhZGxpbmU2LWZvbnQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWhlYWRsaW5lNi1sZXR0ZXItc3BhY2luZywgMC4wMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1oZWFkbGluZTYtdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1oZWFkbGluZTYtdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtbWRjLWNhcmQtc3VidGl0bGV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1saW5lLWhlaWdodCwgMjJweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi1sZXR0ZXItc3BhY2luZywgMC4wMDcxNDI4NTcxZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtc2l6ZToxMnB4Oy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDA7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW19Lm1kYy10ZXh0LWZpZWxkX19pbnB1dHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtc2l6ZSwgMTZweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy10ZXh0LWZpZWxkX19hZmZpeHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtc2l6ZSwgMTZweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLXRleHQtZmllbGRfX2lucHV0e2xpbmUtaGVpZ2h0OjEuNXJlbX0ubWRjLWZsb2F0aW5nLWxhYmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1zaXplLCAxNnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWxldHRlci1zcGFjaW5nLCAwLjAwOTM3NWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLXRleHQtZGVjb3JhdGlvbiwgaW5oZXJpdCk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyLC5tYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduOjpiZWZvcmV7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSwgMTJweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nLCAwLjAzMzMzMzMzMzNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWNhcHRpb24tdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkLC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOmNhbGMoMTZweCAqIHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7Zm9udC1zaXplOjE2cHh9Lm1hdC1tZGMtc2VsZWN0LXBhbmVsey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtZm9udC1zaXplLCAxNnB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtbGluZS1oZWlnaHQsIDI4cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtbGV0dGVyLXNwYWNpbmcsIDAuMDA5Mzc1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTEtdGV4dC10cmFuc2Zvcm0sIG5vbmUpO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1tZGMtc2VsZWN0ey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXNpemUsIDE2cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1saW5lLWhlaWdodCwgMjhweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSk7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyey0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWxpbmUtaGVpZ2h0OjMycHg7LS1tZGMtZGlhbG9nLXN1YmhlYWQtc2l6ZToyMHB4Oy0tbWRjLWRpYWxvZy1zdWJoZWFkLXdlaWdodDo1MDA7LS1tZGMtZGlhbG9nLXN1YmhlYWQtdHJhY2tpbmc6MC4wMTI1ZW07LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1zaXplOjE2cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGV0dGVyLXNwYWNpbmcsIDAuMDE3ODU3MTQyOWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1mb3JtLWZpZWxkey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGluZS1oZWlnaHQsIDIwcHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxldHRlci1zcGFjaW5nLCAwLjAxNzg1NzE0MjllbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtZGVjb3JhdGlvbiwgaW5oZXJpdCk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC10cmFuc2Zvcm0sIG5vbmUpfS5tZGMtZm9ybS1maWVsZHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIycHg7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMDcxNDI4NTcxZW07LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtd2VpZ2h0OjUwMH0ubWF0LW1kYy1tZW51LWNvbnRlbnR7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1mb250LXNpemUsIDE2cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1saW5lLWhlaWdodCwgMjhweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS1sZXR0ZXItc3BhY2luZywgMC4wMDkzNzVlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMS10ZXh0LXRyYW5zZm9ybSwgbm9uZSk7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1kYy1tZW51LWNvbnRlbnQsLm1hdC1tZGMtbWVudS1jb250ZW50IC5tYXQtbWRjLW1lbnUtaXRlbSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0ey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtZmFtaWx5LCB2YXIoLS1tZGMtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgUm9ib3RvLCBzYW5zLXNlcmlmKSk7Zm9udC1zaXplOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtc2l6ZSwgMTZweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTEtbGluZS1oZWlnaHQsIDI0cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLWxldHRlci1zcGFjaW5nLCAwLjAzMTI1ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5MS10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkxLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1zaXplOjE2cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC10cmFja2luZzowLjAzMTI1ZW07LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtc2l6ZToxNHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC10cmFja2luZzowLjAxNzg1NzE0MjllbTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0OjQwMDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LXNpemU6MTJweDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW07LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDB9Lm1kYy1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1mYW1pbHk6Um9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMDkzNzVlbX0ubWF0LW1kYy1wYWdpbmF0b3J7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSwgMTJweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nLCAwLjAzMzMzMzMzMzNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWNhcHRpb24tdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1jYXB0aW9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtc2VsZWN0LXZhbHVle2ZvbnQtc2l6ZToxMnB4fS5tZGMtdGFiey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGluZS1oZWlnaHQsIDM2cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LXdlaWdodCwgNTAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGV0dGVyLXNwYWNpbmcsIDAuMDg5Mjg1NzE0M2VtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtZGVjb3JhdGlvbiwgbm9uZSk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtdHJhbnNmb3JtLCBub25lKX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fS5tZGMtZm9ybS1maWVsZHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWRjLWJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxpbmUtaGVpZ2h0LCAzNnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLWxldHRlci1zcGFjaW5nLCAwLjA4OTI4NTcxNDNlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi10ZXh0LWRlY29yYXRpb24sIG5vbmUpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1mYWItLWV4dGVuZGVkey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtZmFtaWx5OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGluZS1oZWlnaHQsIDM2cHgpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1mb250LXdlaWdodCwgNTAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1idXR0b24tbGV0dGVyLXNwYWNpbmcsIDAuMDg5Mjg1NzE0M2VtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtZGVjb3JhdGlvbiwgbm9uZSk7dGV4dC10cmFuc2Zvcm06dmFyKC0tbWRjLXR5cG9ncmFwaHktYnV0dG9uLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyey0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwfS5tZGMtZGF0YS10YWJsZV9fY29udGVudHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LWZhbWlseSwgdmFyKC0tbWRjLXR5cG9ncmFwaHktZm9udC1mYW1pbHksIFJvYm90bywgc2Fucy1zZXJpZikpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXNpemUsIDE0cHgpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLWxpbmUtaGVpZ2h0LCAyMHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1sZXR0ZXItc3BhY2luZywgMC4wMTc4NTcxNDI5ZW0pO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LWJvZHkyLXRleHQtdHJhbnNmb3JtLCBub25lKX0ubWRjLWRhdGEtdGFibGVfX2NlbGx7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC1zaXplLCAxNHB4KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi1saW5lLWhlaWdodCwgMjBweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItbGV0dGVyLXNwYWNpbmcsIDAuMDE3ODU3MTQyOWVtKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tbWRjLXR5cG9ncmFwaHktYm9keTItdGV4dC1kZWNvcmF0aW9uLCBpbmhlcml0KTt0ZXh0LXRyYW5zZm9ybTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1ib2R5Mi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LWZhbWlseTp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItZm9udC1mYW1pbHksIHZhcigtLW1kYy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCBSb2JvdG8sIHNhbnMtc2VyaWYpKTtmb250LXNpemU6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWZvbnQtc2l6ZSwgMTRweCk7bGluZS1oZWlnaHQ6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWxpbmUtaGVpZ2h0LCAyMnB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtdHlwb2dyYXBoeS1zdWJ0aXRsZTItZm9udC13ZWlnaHQsIDUwMCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXR5cG9ncmFwaHktc3VidGl0bGUyLWxldHRlci1zcGFjaW5nLCAwLjAwNzE0Mjg1NzFlbSk7dGV4dC1kZWNvcmF0aW9uOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi10ZXh0LWRlY29yYXRpb24sIGluaGVyaXQpO3RleHQtdHJhbnNmb3JtOnZhcigtLW1kYy10eXBvZ3JhcGh5LXN1YnRpdGxlMi10ZXh0LXRyYW5zZm9ybSwgbm9uZSl9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtbWRjLW9wdGlvbntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLW9wdGlvbjpob3Zlcjpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSwubWF0LW1kYy1vcHRpb246Zm9jdXM6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksLm1hdC1tZGMtb3B0aW9uLm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSwubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wcmltYXJ5IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWF0LWFjY2VudCAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LXdhcm4gLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1vcHRncm91cC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojYjBiMGIwfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXozLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejYsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejksLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEwLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejExLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEzLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNhcmR7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWVsZXZhdGVkLWNhcmQtY29udGFpbmVyLWNvbG9yOiNmZmZ9Lm1hdC1tZGMtY2FyZC1vdXRsaW5lZHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6I2UwZTBlMH0ubWF0LW1kYy1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyey0tbWRjLWxpbmVhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItZG90c3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCA1IDInIHhtbDpzcGFjZT0ncHJlc2VydmUnIHZpZXdCb3g9JzAgMCA1IDInIHByZXNlcnZlQXNwZWN0UmF0aW89J25vbmUgc2xpY2UnJTNFJTNDY2lyY2xlIGN4PScxJyBjeT0nMScgcj0nMScgZmlsbD0ncmdiYSgyNDUsIDEyNCwgMCwgMC4yNSknLyUzRSUzQy9zdmclM0UiKX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudHstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItZG90c3tiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyBlbmFibGUtYmFja2dyb3VuZD0nbmV3IDAgMCA1IDInIHhtbDpzcGFjZT0ncHJlc2VydmUnIHZpZXdCb3g9JzAgMCA1IDInIHByZXNlcnZlQXNwZWN0UmF0aW89J25vbmUgc2xpY2UnJTNFJTNDY2lyY2xlIGN4PScxJyBjeT0nMScgcj0nMScgZmlsbD0ncmdiYSgyNTUsIDE1MiwgMCwgMC4yNSknLyUzRSUzQy9zdmclM0UiKX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAxNTIsIDAsIDAuMjUpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjQ0LCA2NywgNTQsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4yNSl9Lm1hdC1tZGMtdG9vbHRpcHstLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1jb2xvcjojNjE2MTYxOy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWNvbG9yOndoaXRlfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX19Lm1kYy10ZXh0LWZpZWxkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXIsLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcmlwcGxlLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpob3ZlciAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtc3VyZmFjZS0taG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtaG92ZXItb3BhY2l0eSwgMC4wNCl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3Jle29wYWNpdHk6dmFyKC0tbWRjLXJpcHBsZS1mb2N1cy1vcGFjaXR5LCAwLjEyKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZXNtb2tlfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNDIpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgdHJhbnNwYXJlbnQpfS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXIsLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMyl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDYpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpHcmF5VGV4dH19Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZC5tZGMtdGV4dC1maWVsZC0tZmlsbGVke2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9ye2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQ6aG92ZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjQ1LDEyNCwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMTUyLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNmZjk4MDApfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMjU1LCAxNTIsIDAsIDAuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNmZjk4MDApfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm46bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e21pbi1oZWlnaHQ6NTZweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse3RvcDoyOHB4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zley0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybTogdHJhbnNsYXRlWSggLTM0Ljc1cHgpIHNjYWxlKHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpO3RyYW5zZm9ybTp2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtKX0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoyNHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NCkpfS5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1pY29uLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfS5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LW1kYy1zZWxlY3QtZGlzYWJsZWQgLm1hdC1tZGMtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ1LDEyNCwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwxNTIsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1zZWxlY3QubWF0LW1kYy1zZWxlY3QtaW52YWxpZCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXNlbGVjdC5tYXQtbWRjLXNlbGVjdC1kaXNhYmxlZCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcnstLW1kYy1kaWFsb2ctY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWRjLWRpYWxvZy13aXRoLWRpdmlkZXItZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNlMGUwZTA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6IzIxMjEyMX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5Lm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1wcmltYXJ5Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1hY2NlbnQubWF0LW1kYy1jaGlwLWhpZ2hsaWdodGVkey0tbWRjLWNoaXAtZWxldmF0ZWQtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hpcC1lbGV2YXRlZC1kaXNhYmxlZC1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1jaGlwLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tc2VsZWN0ZWQtaWNvbi1jb2xvcjp3aGl0ZX0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC13YXJuLm1hdC1tZGMtY2hpcC1zZWxlY3RlZCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC13YXJuLm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtY2hpcC1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6IzAwMH0ubWF0LW1kYy1jaGlwe2hlaWdodDozMnB4fS5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojMjEyMTIxOy0tbWRjLXN3aXRjaC1oYW5kbGUtc3VyZmFjZS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmZ9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlIC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLXN3aXRjaC0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LXByaW1hcnl7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZmZiNzRkfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtYWNjZW50ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2ZmYjc0ZH0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LXdhcm57LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojYjcxYzFjOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZTU3MzczOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZTU3MzczfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1zd2l0Y2gtc3RhdGUtbGF5ZXItc2l6ZTo0OHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNTdjMDB9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmZjk4MDB9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW97cGFkZGluZzpjYWxjKCg0MHB4IC0gMjBweCkgLyAyKX0ubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1yYWRpbyAubWRjLXJhZGlvX19iYWNrZ3JvdW5kOjpiZWZvcmV7dG9wOmNhbGMoLTEgKiAoNDBweCAtIDIwcHgpIC8gMik7bGVmdDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIDQwcHgpIC8gMik7d2lkdGg6NDBweDtoZWlnaHQ6NDBweH0ubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjpibGFjazstLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS10cmFjay1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1pbmFjdGl2ZS10cmFjay1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tYXQtbWRjLXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTogMC42fS5tYXQtbWRjLXNsaWRlci5tYXQtcHJpbWFyeXstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y1N2MwMDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMil9Lm1hdC1tZGMtc2xpZGVyLm1hdC1hY2NlbnR7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmZjk4MDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpfS5tYXQtbWRjLXNsaWRlci5tYXQtd2FybnstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMil9Lm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NCkpfS5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1pY29uLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfS5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtZGlzYWJsZWQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZGMtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1jb2xvcjojNjE2MTYxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1sZWFkaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGVhZGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLWxhYmVsLXRleHQtY29sb3I6IzIxMjEyMTstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMDQ7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjU3YzAwfS5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCwubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2ZmOTgwMH0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCwubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmZjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2Y0NDMzNn0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCwubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eToxfS5tYXQtbWRjLWxpc3QtYmFzZXstLW1kYy1saXN0LWxpc3QtaXRlbS1vbmUtbGluZS1jb250YWluZXItaGVpZ2h0OjQ4cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHdvLWxpbmUtY29udGFpbmVyLWhlaWdodDo2NHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRocmVlLWxpbmUtY29udGFpbmVyLWhlaWdodDo4OHB4fS5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctYXZhdGFyLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5lLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5le2hlaWdodDo1NnB4fS5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctYXZhdGFyLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVzLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3gubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVze2hlaWdodDo3MnB4fS5tYXQtbWRjLXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1tZGMtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtcGFnaW5hdG9yLWZpcnN0LC5tYXQtbWRjLXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWZpcnN0LC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaWNvbntmaWxsOnJnYmEoMCwwLDAsLjEyKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHttaW4taGVpZ2h0OjQwcHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWZsZXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjIwcHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zley0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybTogdHJhbnNsYXRlWSggLTI2Ljc1cHgpIHNjYWxlKHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkpO3RyYW5zZm9ybTp2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtKX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LW1kYy10YWIsLm1hdC1tZGMtdGFiLWxpbmt7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLXRhYiAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbGluayAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1hdC1tZGMtdGFiLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIubWF0LW1kYy10YWItZGlzYWJsZWQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbGluay5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLWxpbmsubWF0LW1kYy10YWItZGlzYWJsZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y1N2MwMCl9Lm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZmY5ODAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yLCAjZmY5ODAwKX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yLCAjZjQ0MzM2KX0ubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnl7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICMwMDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnR7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICMwMDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4sLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybnstLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtYmFja2dyb3VuZC1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvcjogI2ZmZn0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tYXQtbWRjLXRhYi1oZWFkZXIgLm1kYy10YWJ7aGVpZ2h0OjQ4cHh9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1mb3JtLWZpZWxke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1hdC1tZGMtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnl7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnkgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMSl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXByaW1hcnkgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50ey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnQgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMSl9Lm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudCAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZmY5ODAwfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmZmOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuIC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC13YXJuIC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMik7bWFyZ2luOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkgLSA0MHB4KSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHt0b3A6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTtyaWdodDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTtsZWZ0OmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCk7aGVpZ2h0OnZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCl9Lm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1kYy1idXR0b24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH0ubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1tZGMtZmFiLC5tYXQtbWRjLW1pbmktZmFiey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWI6aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWI6aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1tZGMtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtZmFiOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1taW5pLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LWFjY2VudCwubWF0LW1kYy1taW5pLWZhYi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LXdhcm4sLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfS5tYXQtbWRjLWZhYi5tYXQtdW50aGVtZWQsLm1hdC1tZGMtbWluaS1mYWIubWF0LXVudGhlbWVkey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1mYWItaWNvbi1jb2xvcjojMDAwOy0tbWF0LW1kYy1mYWItY29sb3I6ICMwMDB9Lm1hdC1tZGMtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1wcmltYXJ5ey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1kYy1mYWItaWNvbi1jb2xvcjojMDAwOy0tbWF0LW1kYy1mYWItY29sb3I6ICMwMDB9Lm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtd2FybiwubWF0LW1kYy1taW5pLWZhYi5tYXQtd2FybnstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmFiLWljb24tY29sb3I6I2ZmZjstLW1hdC1tZGMtZmFiLWNvbG9yOiAjZmZmfS5tYXQtbWRjLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtbWRjLW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZhYi1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtbWRjLWZhYi1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyey0tbWF0LW1kYy1zbmFjay1iYXItYnV0dG9uLWNvbG9yOiAjZmY5ODAwOy0tbWRjLXNuYWNrYmFyLWNvbnRhaW5lci1jb2xvcjojMzMzMzMzOy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpfS5tZGMtZGF0YS10YWJsZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKTtib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3Jvd3tiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKX0ubWRjLWRhdGEtdGFibGVfX3Jvdy0tc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwgMTI0LCAwLCAwLjA0KX0ubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tZGMtZGF0YS10YWJsZV9fY2VsbCwubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb257Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tZGMtZGF0YS10YWJsZV9fcm93Om5vdCgubWRjLWRhdGEtdGFibGVfX3Jvdy0tc2VsZWN0ZWQpOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KX0ubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2NvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXRvdGFsLC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLWxhYmVsLC5tZGMtZGF0YS10YWJsZV9fY2VsbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tYXQtbWRjLXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX3Jvd3toZWlnaHQ6NTJweH0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb257bWluLWhlaWdodDo1MnB4fS5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLXJvd3toZWlnaHQ6NTZweH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnR7LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm57LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXsubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjhweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX3JpcHBsZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6MHB4O21hcmdpbi1ib3R0b206MHB4O21hcmdpbi1yaWdodDowcHg7bWFyZ2luLWxlZnQ6MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDBweDtsZWZ0OjUwJTt3aWR0aDo0MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7ZGlzcGxheTpub25lfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtaWNvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtaWNvbi5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1pY29uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOiM2MTYxNjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6IzIxMjEyMX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlciwubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNmNTdjMDA7Y29sb3I6IzIxMjEyMX0ubWF0LXRvb2xiYXIubWF0LXByaW1hcnl7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC1hY2NlbnR7YmFja2dyb3VuZDojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC13YXJue2JhY2tncm91bmQ6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZSwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fS5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Lm1hdC10cmVle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Y29sb3I6IzIxMjEyMX0ubWF0LXRyZWUtbm9kZXttaW4taGVpZ2h0OjQ4cHh9Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6IzAwMH0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2NvbG9yOiMyMTIxMjE7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWZhYi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LWZhYi5tYXQtd2FybiwubWF0LW1pbmktZmFiLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItZWxldmF0aW9uOjB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDR9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y1N2MwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDUsIDEyNCwgMCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZjk4MDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWljb24tYnV0dG9uLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1hdC1vcHRpb257Y29sb3I6IzIxMjEyMX0ubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpO2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNTdjMDB9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y0NDMzNn0ubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtjb2xvcjojNjE2MTYxfS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjU3YzAwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojZmZmfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNiMGIwYjB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2IwYjBiMH0ubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo0e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDVweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16N3tib3gtc2hhZG93OjBweCA0cHggNXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMjhweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSwubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZjU3YzAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtcHJlZml4LC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtc3VmZml4e2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiMyMTIxMjF9Lm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM3NTc1NzV9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmZmfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmZmYgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6I2ZmZn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiMyMTIxMjF9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMil9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXIsLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Y29sb3I6IzIxMjEyMX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjojNzU3NTc1fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiMyMTIxMjF9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6Izc1NzU3NX0ubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXT4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE2NywzOCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Lm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQ6IzMyMzIzMjtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6I2ZmOTgwMH0ubWF0LXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LG1hdC1mb290ZXItcm93LFttYXQtaGVhZGVyLXJvd10sW21hdC1yb3ddLFttYXQtZm9vdGVyLXJvd10sLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3csdGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6IzIxMjEyMX0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tcmlnaHQ6MHB4O21hcmdpbi1sZWZ0OjBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo1MCU7d2lkdGg6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2Rpc3BsYXk6bm9uZX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiMyMTIxMjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW1kYy1vcHRpb257Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1vcHRpb246aG92ZXI6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksLm1hdC1tZGMtb3B0aW9uOmZvY3VzOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpLC5tYXQtbWRjLW9wdGlvbi5tYXQtbWRjLW9wdGlvbi1hY3RpdmUsLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcHJpbWFyeSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2Y1N2MwMCl9Lm1hdC1hY2NlbnQgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2ZmOTgwMCl9Lm1hdC13YXJuIC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiNiMGIwYjB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNTdjMDB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlciwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlciwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2IwYjBiMH0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1lbGV2YXRpb24tejAsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejQsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo4LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTF7Ym94LXNoYWRvdzowcHggNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMiwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTR7Ym94LXNoYWRvdzowcHggN3B4IDlweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNiwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE3e2JveC1zaGFkb3c6MHB4IDhweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjAsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIwe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjMsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIze2JveC1zaGFkb3c6MHB4IDExcHggMTRweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1jYXJke2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1lbGV2YXRlZC1jYXJkLWNvbnRhaW5lci1jb2xvcjojZmZmfS5tYXQtbWRjLWNhcmQtb3V0bGluZWR7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtb3V0bGluZWQtY2FyZC1vdXRsaW5lLWNvbG9yOiNlMGUwZTB9Lm1hdC1tZGMtY2FyZC1zdWJ0aXRsZXtjb2xvcjojNjE2MTYxfS5tYXQtbWRjLXByb2dyZXNzLWJhcnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLXByb2dyZXNzLWJhciAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjQ1LCAxMjQsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC4yNSl9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnR7LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjU1LCAxNTIsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMTUyLCAwLCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1kb3Rze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDUgMicgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgdmlld0JveD0nMCAwIDUgMicgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZSBzbGljZSclM0UlM0NjaXJjbGUgY3g9JzEnIGN5PScxJyByPScxJyBmaWxsPSdyZ2JhKDI0NCwgNjcsIDU0LCAwLjI1KScvJTNFJTNDL3N2ZyUzRSIpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMjUpfS5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItY29sb3I6IzYxNjE2MTstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1jb2xvcjp3aGl0ZX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9fS5tZGMtdGV4dC1maWVsZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Lm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6aG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDQpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtZm9jdXMtb3BhY2l0eSwgMC4xMil9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6d2hpdGVzbW9rZX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjQyKX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1yaXBwbGUtY29sb3IsIHRyYW5zcGFyZW50KX0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC44Nyl9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zKX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNil9Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlciwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6R3JheVRleHR9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI0NSwxMjQsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDE1MiwwLC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2ZmOTgwMCl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwgMTUyLCAwLCAwLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLXRyYWlsaW5ne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZmY5ODAwKX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOmhvdmVyIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0taW52YWxpZCsubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmUgLm1kYy10ZXh0LWZpZWxkLWhlbHBlci10ZXh0LS12YWxpZGF0aW9uLW1zZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Lm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2JhKDAsMCwwLDApfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHttaW4taGVpZ2h0OjU2cHh9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZmxleCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MjhweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXstLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoIC0zNC43NXB4KSBzY2FsZSh2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGUsIDAuNzUpKTt0cmFuc2Zvcm06dmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSl9Lm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MjRweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NSwxMjQsMCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMTUyLDAsLjg3KX0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtc2VsZWN0Lm1hdC1tZGMtc2VsZWN0LWludmFsaWQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjQ0LDY3LDU0LC44Nyl9Lm1hdC1tZGMtZm9ybS1maWVsZCAubWF0LW1kYy1zZWxlY3QubWF0LW1kYy1zZWxlY3QtZGlzYWJsZWQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWRjLW1lbnUtc3VyZmFjZXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjZmZmKTtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1zZWNvbmRhcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU0KSl9Lm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MC4zOH0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLW1ldGEgLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZjU3YzAwKX0ubWRjLWRlcHJlY2F0ZWQtbGlzdC1ncm91cF9fc3ViaGVhZGVye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWRpdmlkZXI6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6d2hpdGV9Lm1kYy1saXN0LWRpdmlkZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXJ7LS1tZGMtZGlhbG9nLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1kaWFsb2ctd2l0aC1kaXZpZGVyLWRpdmlkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1kaWFsb2ctc3ViaGVhZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2UwZTBlMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjF9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y1N2MwMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1tZGMtY2hpcHtoZWlnaHQ6MzJweH0ubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC10cmFjay1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmfS5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1zbGlkZS10b2dnbGUgLm1kYy1zd2l0Y2gtLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2U2NTEwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2ZmYjc0ZH0ubWF0LW1kYy1zbGlkZS10b2dnbGUubWF0LWFjY2VudHstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNlNjUxMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZTY1MTAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmZmI3NGR9Lm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC13YXJuey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6I2I3MWMxYzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2U1NzM3M30ubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLXN0YXRlLWxheWVyLXNpemU6NDhweH0ubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1mb3JtLWZpZWxke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjU3YzAwfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6IzAwMDstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjQ0MzM2fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlve3BhZGRpbmc6Y2FsYygoNDBweCAtIDIwcHgpIC8gMil9Lm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fYmFja2dyb3VuZDo6YmVmb3Jle3RvcDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO2xlZnQ6Y2FsYygtMSAqICg0MHB4IC0gMjBweCkgLyAyKTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbiAubWRjLXJhZGlvIC5tZGMtcmFkaW9fX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCg0MHB4IC0gNDBweCkgLyAyKTtyaWdodDpjYWxjKCg0MHB4IC0gNDBweCkgLyAyKTtsZWZ0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Lm1hdC1tZGMtc2xpZGVyey0tbWRjLXNsaWRlci1sYWJlbC1jb250YWluZXItY29sb3I6YmxhY2s7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItZGlzYWJsZWQtaW5hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWF0LW1kYy1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLW9wYWNpdHk6IDAuNn0ubWF0LW1kYy1zbGlkZXIubWF0LXByaW1hcnl7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y1N2MwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNTdjMDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjU3YzAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpfS5tYXQtbWRjLXNsaWRlci5tYXQtYWNjZW50ey0tbWRjLXNsaWRlci1oYW5kbGUtY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItZm9jdXMtaGFuZGxlLWNvbG9yOiNmZjk4MDA7LS1tZGMtc2xpZGVyLWhvdmVyLWhhbmRsZS1jb2xvcjojZmY5ODAwOy0tbWRjLXNsaWRlci1hY3RpdmUtdHJhY2stY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItaW5hY3RpdmUtdHJhY2stY29sb3I6I2ZmOTgwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWFjdGl2ZS1jb250YWluZXItY29sb3I6IzAwMDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWluYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWF0LW1kYy1zbGlkZXItcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1zbGlkZXItaG92ZXItcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjA1KTstLW1hdC1tZGMtc2xpZGVyLWZvY3VzLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4yKX0ubWF0LW1kYy1zbGlkZXIubWF0LXdhcm57LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpfS5tZGMtbWVudS1zdXJmYWNle2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpO2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjg3KSl9Lm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTQpKX0ubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1oaW50LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19lbmR7b3BhY2l0eTowLjM4fS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICMwMDApfS5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgIzAwMCl9Lm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctbWV0YSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCwubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNmNTdjMDApfS5tZGMtZGVwcmVjYXRlZC1saXN0LWdyb3VwX19zdWJoZWFkZXJ7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX0ubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWRjLW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWRpc2FibGVkLW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb257Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuODcpKX0ubWF0LW1kYy1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1kYy1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWRjLW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1tZGMtbGlzdC1iYXNley0tbWRjLWxpc3QtbGlzdC1pdGVtLWxhYmVsLXRleHQtY29sb3I6IzIxMjEyMTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6IzYxNjE2MTstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tc2VsZWN0ZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGVhZGluZy1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOiMyMTIxMjE7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMn0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMwMDA7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y1N2MwMDstLW1hdC1tZGMtcmFkaW8tcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1yYWRpby1jaGVja2VkLXJpcHBsZS1jb2xvcjogI2Y1N2MwMH0ubWF0LW1kYy1saXN0LW9wdGlvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjk4MDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmZjk4MDB9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWwsLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCl9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMDAwOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjojZjU3YzAwfS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2NvbnRlbnQsLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MX0ubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tb25lLWxpbmUtY29udGFpbmVyLWhlaWdodDo0OHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXR3by1saW5lLWNvbnRhaW5lci1oZWlnaHQ6NjRweDstLW1kYy1saXN0LWxpc3QtaXRlbS10aHJlZS1saW5lLWNvbnRhaW5lci1oZWlnaHQ6ODhweH0ubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhci5tZGMtbGlzdC1pdGVtLS13aXRoLW9uZS1saW5lLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctY2hlY2tib3gubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSwubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZXtoZWlnaHQ6NTZweH0ubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWF2YXRhci5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcywubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtdHdvLWxpbmVzLC5tYXQtbWRjLWxpc3QtaXRlbS5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lc3toZWlnaHQ6NzJweH0ubWF0LW1kYy1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LW1kYy1wYWdpbmF0b3ItaWNvbntmaWxsOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1kYy1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtbWRjLXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpO2JvcmRlci1yaWdodDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtbWRjLXBhZ2luYXRvci1maXJzdCwubWF0LW1kYy1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1pbmNyZW1lbnQsLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1maXJzdCwubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1tZGMtcGFnaW5hdG9yLWljb257ZmlsbDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7bWluLWhlaWdodDo0MHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse3RvcDoyMHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXstLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoIC0yNi43NXB4KSBzY2FsZSh2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtZmxvYXRpbmctbGFiZWwtc2NhbGUsIDAuNzUpKTt0cmFuc2Zvcm06dmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSl9Lm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1kYy1wYWdpbmF0b3IgLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEpIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1tZGMtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Lm1hdC1tZGMtdGFiLC5tYXQtbWRjLXRhYi1saW5re2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWxpbmsgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfS5tYXQtbWRjLXRhYi5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWxpbmsubWF0LW1kYy10YWItZGlzYWJsZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1saW5rLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2Y1N2MwMH0ubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsICNmNTdjMDApfS5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2ZmOTgwMH0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2ZmOTgwMCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y0NDMzNil9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjU3YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjMDAwKX0ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFie2hlaWdodDo0OHB4fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMCwgMCwgMCwgMC44NykpfS5tYXQtbWRjLWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojMDAwfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5ey0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojMDAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y1N2MwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNTdjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjU3YzAwOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudHstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjk4MDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY5ODAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmOTgwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjEpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnQgLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybnstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmZjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybiAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4xKX0ubWF0LW1kYy1jaGVja2JveC5tYXQtd2FybiAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVkIGxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveHtwYWRkaW5nOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpIC0gNDBweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXJpcHBsZS1zaXplLCA0MHB4KSAtIDE4cHgpIC8gMil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbHt0b3A6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7bGVmdDpjYWxjKCg0MHB4IC0gdmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSkgLyAyKTt3aWR0aDp2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpfS5tYXQtbWRjLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLWJ1dHRvbi5tYXQtd2FybnstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzZ9Lm1hdC1tZGMtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmZjstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmOTgwMDstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjU3YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbjowfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtdW50aGVtZWR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzAwMH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y1N2MwMH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZGMtYnV0dG9uLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnksLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2ZmOTgwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNTUsIDE1MiwgMCwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LXdhcm4sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpob3ZlciAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLXJhaXNlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtd2FybnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Lm1hdC1tZGMtaWNvbi1idXR0b257LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfS5tYXQtbWRjLWljb24tYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMTJ9Lm1hdC1tZGMtaWNvbi1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNTdjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ1LCAxMjQsIDAsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmY5ODAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMTUyLCAwLCAwLjEpfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMSl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjU3YzAwfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZmY5ODAwfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC13YXJuey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Lm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtbWRjLWZhYiwubWF0LW1kYy1taW5pLWZhYnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA0fS5tYXQtbWRjLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtbWluaS1mYWI6YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjEyfS5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSwubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Lm1hdC1tZGMtZmFiLm1hdC13YXJuLC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1mYWIubWF0LXVudGhlbWVkLC5tYXQtbWRjLW1pbmktZmFiLm1hdC11bnRoZW1lZHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSwubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNTdjMDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfS5tYXQtbWRjLWZhYi5tYXQtYWNjZW50LC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZmY5ODAwOy0tbWRjLWZhYi1pY29uLWNvbG9yOiMwMDA7LS1tYXQtbWRjLWZhYi1jb2xvcjogIzAwMH0ubWF0LW1kYy1mYWIubWF0LXdhcm4sLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZhYi1pY29uLWNvbG9yOiNmZmY7LS1tYXQtbWRjLWZhYi1jb2xvcjogI2ZmZn0ubWF0LW1kYy1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSwubWF0LW1kYy1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1mYWItaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LW1kYy1mYWItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lcnstLW1hdC1tZGMtc25hY2stYmFyLWJ1dHRvbi1jb2xvcjogI2ZmOTgwMDstLW1kYy1zbmFja2Jhci1jb250YWluZXItY29sb3I6IzMzMzMzMzstLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX0ubWRjLWRhdGEtdGFibGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZik7Ym9yZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1kYy1kYXRhLXRhYmxlX19yb3d7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgI2ZmZil9Lm1kYy1kYXRhLXRhYmxlX19yb3ctLXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsIDEyNCwgMCwgMC4wNCl9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZywubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1zZWxlY3QtLW91dGxpbmVkOm5vdCgubWRjLXNlbGVjdC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX2NlbGwsLm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMil9Lm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9ue2JvcmRlci10b3AtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX0ubWRjLWRhdGEtdGFibGVfX3Jvdzpub3QoLm1kYy1kYXRhLXRhYmxlX19yb3ctLXNlbGVjdGVkKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCl9Lm1kYy1kYXRhLXRhYmxlX19oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi10b3RhbCwubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tcm93cy1wZXItcGFnZS1sYWJlbCwubWRjLWRhdGEtdGFibGVfX2NlbGx7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWF0LW1kYy10YWJsZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19yb3d7aGVpZ2h0OjUycHh9Lm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9ue21pbi1oZWlnaHQ6NTJweH0ubWF0LW1kYy10YWJsZSAubWRjLWRhdGEtdGFibGVfX2hlYWRlci1yb3d7aGVpZ2h0OjU2cHh9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lcnstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNTdjMDB9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50ey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmOTgwMH0ubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuey0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzo4cHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tcmlnaHQ6MHB4O21hcmdpbi1sZWZ0OjBweH0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQwcHg7bWF4LXdpZHRoOjQwcHh9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQwcHg7bGVmdDo1MCU7d2lkdGg6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2Rpc3BsYXk6bm9uZX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiMyMTIxMjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCwubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Lm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fS5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1kYy1idXR0b24sLm1kYy1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWRjLWJ1dHRvbiwubWRjLWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keSBhLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgYSxib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXstLXRiLWljb24tc2l6ZTogMjRweDstLW1kYy10eXBvZ3JhcGh5LWJ1dHRvbi1sZXR0ZXItc3BhY2luZzogbm9ybWFsfWJvZHkgYVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24sYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgYVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2VbbWF0LWljb24tYnV0dG9uXS5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1ib2R5IGFbbWF0LWljb24tYnV0dG9uXS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZVttYXQtaWNvbi1idXR0b25dLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCxib2R5LmRhcmstbW9kZSBhW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0LGJvZHkuZGFyay1tb2RlIGJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0e2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Ym9keSBhIG1hdC1pY29uLm1hdC1pY29uLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgbWF0LWljb24ubWF0LWljb24sYm9keS5kYXJrLW1vZGUgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBtYXQtaWNvbi5tYXQtaWNvbntmbGV4LXNocmluazowfWJvZHkgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5IGEgc3ZnLGJvZHkgYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgbWF0LWljb24ubWF0LWljb24sYm9keSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBzdmcsYm9keS5kYXJrLW1vZGUgYSBtYXQtaWNvbi5tYXQtaWNvbixib2R5LmRhcmstbW9kZSBhIHN2Zyxib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBtYXQtaWNvbi5tYXQtaWNvbixib2R5LmRhcmstbW9kZSBidXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSBzdmd7d2lkdGg6dmFyKC0tdGItaWNvbi1zaXplKTtoZWlnaHQ6dmFyKC0tdGItaWNvbi1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS10Yi1pY29uLXNpemUpfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWRjLWJ1dHRvbiwubWRjLWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tZGMtYnV0dG9uLC5tZGMtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3B0aW9ue2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW9wdGlvbjpob3Zlcjpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRpb246Zm9jdXM6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3B0aW9uLm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZDpub3QoLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkKSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6bm90KC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCkgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQpIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vcHRncm91cC1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXozLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo1LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejYsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejgsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEyLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEzLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTgsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjIsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNhcmR7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWVsZXZhdGVkLWNhcmQtY29udGFpbmVyLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2FyZC1vdXRsaW5lZHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6IzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhcnstLW1kYy1saW5lYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhciAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjM5LCAxMDgsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyIC5tZGMtbGluZWFyLXByb2dyZXNzX19idWZmZXItYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC4yNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnR7LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWRvdHN7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgZW5hYmxlLWJhY2tncm91bmQ9J25ldyAwIDAgNSAyJyB4bWw6c3BhY2U9J3ByZXNlcnZlJyB2aWV3Qm94PScwIDAgNSAyJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSdub25lIHNsaWNlJyUzRSUzQ2NpcmNsZSBjeD0nMScgY3k9JzEnIHI9JzEnIGZpbGw9J3JnYmEoMjM5LCAxMDgsIDAsIDAuMjUpJy8lM0UlM0Mvc3ZnJTNFIil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwgMTA4LCAwLCAwLjI1KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1kYy1saW5lYXItcHJvZ3Jlc3NfX2J1ZmZlci1kb3Rze2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeD0nMHB4JyB5PScwcHgnIGVuYWJsZS1iYWNrZ3JvdW5kPSduZXcgMCAwIDUgMicgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgdmlld0JveD0nMCAwIDUgMicgcHJlc2VydmVBc3BlY3RSYXRpbz0nbm9uZSBzbGljZSclM0UlM0NjaXJjbGUgY3g9JzEnIGN5PScxJyByPScxJyBmaWxsPSdyZ2JhKDI0NCwgNjcsIDU0LCAwLjI1KScvJTNFJTNDL3N2ZyUzRSIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtd2FybiAubWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRvb2x0aXB7LS1tZGMtcGxhaW4tdG9vbHRpcC1jb250YWluZXItY29sb3I6IzYxNjE2MTstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpfUBtZWRpYSBhbGx7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNil9fUBtZWRpYSBhbGx7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNil9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2ljb24tLWxlYWRpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXJpcHBsZS1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KSl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6aG92ZXIgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtcmlwcGxlLXN1cmZhY2UtLWhvdmVyIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTp2YXIoLS1tZGMtcmlwcGxlLWhvdmVyLW9wYWNpdHksIDAuMDgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5OnZhcigtLW1kYy1yaXBwbGUtZm9jdXMtb3BhY2l0eSwgMC4yNCl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6IzRhNGE0YX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLWZvY3VzZWQpOmhvdmVyIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXByaW1hcnksICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1yaXBwbGUtY29sb3IsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtjYXJldC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KX1AbWVkaWEgYWxse2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KX19QG1lZGlhIGFsbHtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCl9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dHtjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyLGJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcntjb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS1sZWFkaW5ne2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zKX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjMpfWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX1ib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNil9Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHR7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcixib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjpHcmF5VGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2JvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e2NvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7Y29sb3I6R3JheVRleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOkdyYXlUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Ym9keS5kYXJrLW1vZGUgLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWRjLXRleHQtZmllbGQtLWRpc2FibGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6R3JheVRleHR9fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQubWRjLXRleHQtZmllbGQtLWZpbGxlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0NjQ2NDZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wOH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSBzZWxlY3QubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2w6bm90KC5tYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfWJvZHkuZGFyay1tb2RlIHNlbGVjdC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbDpub3QoLm1hdC1tZGMtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbjpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyMzksMTA4LDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDIzOSwxMDgsMCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZF9faW5wdXR7Y2FyZXQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50Om5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWZvY3VzZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6cmdiYSgyMzksIDEwOCwgMCwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6aG92ZXIgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1mbG9hdGluZy1sYWJlbHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne2NvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZ3tjb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LWFjY2VudCAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2Fybjpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWZsb2F0aW5nLWxhYmVse2NvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpob3ZlciAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtZmxvYXRpbmctbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWludmFsaWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5lIC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2d7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2NhcmV0LWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0taW52YWxpZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCk6bm90KC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCk6aG92ZXIgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKTpub3QoLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKTpob3ZlciAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1lcnJvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKS5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtd2FybiAubWRjLXRleHQtZmllbGQtLWludmFsaWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItY29sb3I6dmFyKC0tbWRjLXRoZW1lLWVycm9yLCAjZjQ0MzM2KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC13YXJuIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQ6bm90KC5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQpLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19sZWFkaW5nLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm4gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZDpub3QoLm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCkubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtZXJyb3IsICNmNDQzMzYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtib3JkZXItbGVmdDoxcHggc29saWQgcmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtbWRjLWZvcm0tZmllbGQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWZsZXggLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjI4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCAtMzQuNzVweCkgc2NhbGUodmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSk7dHJhbnNmb3JtOnZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm0pfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjI0cHg7cGFkZGluZy1ib3R0b206OHB4fWJvZHkuZGFyay1tb2RlIC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH1ib2R5LmRhcmstbW9kZSAubWRjLW1lbnUtc3VyZmFjZXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy10aGVtZS1zdXJmYWNlLCAjNDI0MjQyKTtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX292ZXJsaW5lLXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaWNvbi1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtaGludC1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSkpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fZW5ke29wYWNpdHk6MC4zOH1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zZWNvbmRhcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLW1ldGEgLm1kYy1saXN0LWl0ZW1fX2VuZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0e2NvbG9yOnZhcigtLW1kYy10aGVtZS1wcmltYXJ5LCAjZWY2YzAwKX1ib2R5LmRhcmstbW9kZSAubWRjLWRlcHJlY2F0ZWQtbGlzdC1ncm91cF9fc3ViaGVhZGVye2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1kaXZpZGVyOjphZnRlcntib3JkZXItYm90dG9tLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC12YWx1ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC1kaXNhYmxlZCAubWF0LW1kYy1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyMzksMTA4LDAsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1tZGMtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjM5LDEwOCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LW1kYy1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNDQsNjcsNTQsLjg3KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXNlbGVjdC5tYXQtbWRjLXNlbGVjdC1pbnZhbGlkIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtc2VsZWN0Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgIzQyNDI0Mik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyey0tbWRjLWRpYWxvZy1jb250YWluZXItY29sb3I6IzQyNDI0MjstLW1kYy1kaWFsb2ctd2l0aC1kaXZpZGVyLWRpdmlkZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1kaWFsb2ctc3ViaGVhZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODcpOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6IzU5NTk1OTstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojNTk1OTU5Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6I2ZhZmFmYTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiNmYWZhZmE7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjojZmFmYWZhOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLXRyYWlsaW5nLWljb24tY29sb3I6I2ZhZmFmYTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOiNmYWZhZmF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtcHJpbWFyeS5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LWFjY2VudC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtYWNjZW50Lm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZHstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWNoaXAtZWxldmF0ZWQtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGV9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtd2Fybi5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWR7LS1tZGMtY2hpcC1lbGV2YXRlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoaXAtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hpcHtoZWlnaHQ6MzJweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1zbGlkZS10b2dnbGV7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojMDAwOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC10cmFjay1jb2xvcjojZjVmNWY1Oy0tbWRjLXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmNWY1ZjU7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2Y1ZjVmNTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmNWY1ZjU7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2Y1ZjVmNTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojNjE2MTYxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXRyYWNrLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNmYWZhZmE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiNmYWZhZmE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2ZhZmFmYTstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhhbmRsZS1jb2xvcjojOWU5ZTllOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojMjEyMTIxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZSAubWRjLWZvcm0tZmllbGR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlIC5tZGMtc3dpdGNoLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeXstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZmYjc0ZDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNmZmNjODA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNmYjhjMDA7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNmYjhjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hdC1hY2NlbnR7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhhbmRsZS1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmZiNzRkOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmZmI3NGQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLWhhbmRsZS1jb2xvcjojZmZjYzgwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1oYW5kbGUtY29sb3I6I2ZmY2M4MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtY29sb3I6I2ZmY2M4MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtdHJhY2stY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItdHJhY2stY29sb3I6I2ZiOGMwMDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC10cmFjay1jb2xvcjojZmI4YzAwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC10cmFjay1jb2xvcjojZmI4YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtd2FybnstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2U1NzM3MzstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNlZjlhOWE7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojZWY5YTlhOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojZWY5YTlhOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZTUzOTM1Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlNTM5MzV9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGUtdG9nZ2xley0tbWRjLXN3aXRjaC1zdGF0ZS1sYXllci1zaXplOjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW97cGFkZGluZzpjYWxjKCg0MHB4IC0gMjBweCkgLyAyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWRpby1idXR0b24gLm1kYy1yYWRpbyAubWRjLXJhZGlvX19iYWNrZ3JvdW5kOjpiZWZvcmV7dG9wOmNhbGMoLTEgKiAoNDBweCAtIDIwcHgpIC8gMik7bGVmdDpjYWxjKC0xICogKDQwcHggLSAyMHB4KSAvIDIpO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIC5tZGMtcmFkaW8gLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSA0MHB4KSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIDQwcHgpIC8gMik7d2lkdGg6NDBweDtoZWlnaHQ6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1zbGlkZXJ7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1zbGlkZXItbGFiZWwtbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS10cmFjay1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tYXQtbWRjLXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTogMC45fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlci5tYXQtcHJpbWFyeXstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2VmNmMwMDstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2VmNmMwMDstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtc2xpZGVyLm1hdC1hY2NlbnR7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2VmNmMwMDstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNlZjZjMDA7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZWY2YzAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtYWN0aXZlLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXNsaWRlci1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLXNsaWRlci1ob3Zlci1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMDUpOy0tbWF0LW1kYy1zbGlkZXItZm9jdXMtcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNsaWRlci5tYXQtd2FybnstLW1kYy1zbGlkZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWZvY3VzLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1ob3Zlci1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1pbmFjdGl2ZS1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtc2xpZGVyLWhvdmVyLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtbWRjLXNsaWRlci1mb2N1cy1yaXBwbGUtY29sb3I6IHJnYmEoMjQ0LCA2NywgNTQsIDAuMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1tZW51LXN1cmZhY2V7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSwgIzQyNDI0Mik7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtcHJpbWFyeS1vbi1iYWNrZ3JvdW5kLCB3aGl0ZSl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW1fX3NlY29uZGFyeS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXNlY29uZGFyeS1vbi1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtX19vdmVybGluZS10ZXh0e2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLXRyYWlsaW5nLWljb24gLm1kYy1saXN0LWl0ZW1fX2VuZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWljb24tb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LWhpbnQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fY29udGVudCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjAuMzh9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fc2Vjb25kYXJ5LXRleHR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCAubWRjLWxpc3QtaXRlbV9fb3ZlcmxpbmUtdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtb24tc3VyZmFjZSwgI2ZmZil9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtdHJhaWxpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fZW5ke2NvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQubWRjLWxpc3QtaXRlbS0td2l0aC10cmFpbGluZy1tZXRhIC5tZGMtbGlzdC1pdGVtX19lbmR7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLW9uLXN1cmZhY2UsICNmZmYpfWJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tZGMtbGlzdC1pdGVtLS1hY3RpdmF0ZWQgLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtcHJpbWFyeSwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kZXByZWNhdGVkLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcjo6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp3aGl0ZX1ib2R5LmRhcmstbW9kZSAubWRjLWxpc3QtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6dmFyKC0tbWRjLXRoZW1lLXRleHQtZGlzYWJsZWQtb24tYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnZhcigtLW1kYy10aGVtZS10ZXh0LXByaW1hcnktb24tYmFja2dyb3VuZCwgd2hpdGUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2V7LS1tZGMtbGlzdC1saXN0LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHJhaWxpbmctc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxlYWRpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGVhZGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1ob3Zlci10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wODstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmZmOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tYXQtbWRjLXJhZGlvLXJpcHBsZS1jb2xvcjogI2ZmZjstLW1hdC1tZGMtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6ICNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uIC5tZGMtbGlzdC1pdGVtX19lbmQgLm1kYy1yYWRpby0tZGlzYWJsZWQrbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19lbmR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fc3RhcnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX3N0YXJ0IC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC1hY2NlbnQgLm1kYy1saXN0LWl0ZW1fX2VuZCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmZmOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWVlZWVlOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1yYWRpby11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LW1kYy1yYWRpby1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiAjZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCAubWRjLXJhZGlvLS1kaXNhYmxlZCtsYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LW9wdGlvbi5tYXQtd2FybiAubWRjLWxpc3QtaXRlbV9fZW5kIC5tZGMtcmFkaW8tLWRpc2FibGVkK2xhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1iYXNley0tbWRjLWxpc3QtbGlzdC1pdGVtLW9uZS1saW5lLWNvbnRhaW5lci1oZWlnaHQ6NDhweDstLW1kYy1saXN0LWxpc3QtaXRlbS10d28tbGluZS1jb250YWluZXItaGVpZ2h0OjY0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdGhyZWUtbGluZS1jb250YWluZXItaGVpZ2h0Ojg4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmV7aGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcyxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXN7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWljb257ZmlsbDpyZ2JhKDI1NSwyNTUsMjU1LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e21pbi1oZWlnaHQ6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIC5tYXQtbWRjLWZvcm0tZmllbGQtZmxleCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHt0b3A6MjBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7LS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKCAtMjYuNzVweCkgc2NhbGUodmFyKC0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlLCAwLjc1KSk7dHJhbnNmb3JtOnZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC10cmFuc2Zvcm0pfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyOm5vdCgubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yIC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6bm90KC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQpOm5vdCgubWRjLXRleHQtZmllbGQtLXRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcGFnaW5hdG9yIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcjpub3QoLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCkgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWx7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYixib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGlua3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1saW5rIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWIubWF0LW1kYy10YWItZGlzYWJsZWQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1saW5rLm1hdC1tZGMtdGFiLWRpc2FibGVkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluay5tYXQtbWRjLXRhYi1kaXNhYmxlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsICNlZjZjMDApfWJvZHkuZGFyay1tb2RlIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbms6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2VmNmMwMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1saW5rIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1tZGMtdGFiLWxpbmsgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKS5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX3RleHQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LS11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1saW5rOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtbWRjLXRhYjpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluazpub3QoLm1hdC1tZGMtdGFiLWRpc2FibGVkKSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXtib3JkZXItY29sb3I6dmFyKC0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvciwgI2Y0NDMzNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1tZGMtdGFiIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LW1kYy10YWItbGluayAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6ICNmNDQzMzY7LS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy10aGVtZS1vbi1zdXJmYWNlLCAjZmZmKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFie2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZHtjb2xvcjp2YXIoLS1tZGMtdGhlbWUtdGV4dC1wcmltYXJ5LW9uLWJhY2tncm91bmQsIHdoaXRlKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeXstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzAwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VlZWVlZTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU0KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeSAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtcHJpbWFyeSAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWRjLWNoZWNrYm94X19yaXBwbGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94Lm1hdC1hY2NlbnR7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiMwMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZWY2YzAwOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2VmNmMwMDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNlZjZjMDA7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LWFjY2VudCAubWRjLWNoZWNrYm94LS1zZWxlY3RlZH4ubWF0LW1kYy1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC5tYXQtYWNjZW50IC5tZGMtY2hlY2tib3gtLXNlbGVjdGVkfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm57LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNlZWVlZWU7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm4gLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1hdC1tZGMtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm4gLm1kYy1jaGVja2JveC0tc2VsZWN0ZWR+Lm1kYy1jaGVja2JveF9fcmlwcGxle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCBsYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3h7cGFkZGluZzpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KSAtIDQwcHgpIC8gMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtcmlwcGxlLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTtsZWZ0OmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1yaXBwbGUtc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO3JpZ2h0OmNhbGMoKDQwcHggLSB2YXIoLS1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0LXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygoNDBweCAtIHZhcigtLW1kYy1jaGVja2JveC10b3VjaC10YXJnZXQtc2l6ZSwgNDBweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldC1zaXplLCA0MHB4KX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LXdhcm57LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb246MH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXtoZWlnaHQ6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWI6YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWIubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjMDAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWIubWF0LXVudGhlbWVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC11bnRoZW1lZHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtZmFiLWljb24tY29sb3I6I2ZmZjstLW1hdC1tZGMtZmFiLWNvbG9yOiAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmFiLWljb24tY29sb3I6IzAwMDstLW1hdC1tZGMtZmFiLWNvbG9yOiAjMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZhYi1pY29uLWNvbG9yOiMwMDA7LS1tYXQtbWRjLWZhYi1jb2xvcjogIzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1tZGMtbWluaS1mYWIubWF0LXdhcm57LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZhYi1pY29uLWNvbG9yOiNmZmY7LS1tYXQtbWRjLWZhYi1jb2xvcjogI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1kYy1mYWJbZGlzYWJsZWRdW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1kYy1taW5pLWZhYltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLWZhYi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1mYWItaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tYXQtbWRjLWZhYi1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXJ7LS1tYXQtbWRjLXNuYWNrLWJhci1idXR0b24tY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtc25hY2tiYXItY29udGFpbmVyLWNvbG9yOiNkOWQ5ZDk7LS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoNjYsIDY2LCA2NiwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICM0MjQyNDIpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcm93e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWRjLWRhdGEtdGFibGVfX2hlYWRlci1jZWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICM0MjQyNDIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcm93LS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LCAxMDgsIDAsIDAuMDQpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbi1yb3dzLXBlci1wYWdlLXNlbGVjdC0tb3V0bGluZWQ6bm90KC5tZGMtc2VsZWN0LS1kaXNhYmxlZCkgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2Utc2VsZWN0LS1vdXRsaW5lZDpub3QoLm1kYy1zZWxlY3QtLWRpc2FibGVkKSAubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19jZWxsLGJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19yb3c6bm90KC5tZGMtZGF0YS10YWJsZV9fcm93LS1zZWxlY3RlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpfWJvZHkuZGFyay1tb2RlIC5tZGMtZGF0YS10YWJsZV9faGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg3KX1ib2R5LmRhcmstbW9kZSAubWRjLWRhdGEtdGFibGVfX3BhZ2luYXRpb24tdG90YWwsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19wYWdpbmF0aW9uLXJvd3MtcGVyLXBhZ2UtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1kYy1kYXRhLXRhYmxlX19jZWxse2NvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9fcm93e2hlaWdodDo1MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXRhYmxlIC5tZGMtZGF0YS10YWJsZV9fcGFnaW5hdGlvbnttaW4taGVpZ2h0OjUycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtdGFibGUgLm1kYy1kYXRhLXRhYmxlX19oZWFkZXItcm93e2hlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXJ7LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudHstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybnstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LXdhcm57LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdey0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC11bnRoZW1lZHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojNDI0MjQyOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNlZjZjMDA7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiM0MjQyNDI7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZWY2YzAwOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb246MH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXVudGhlbWVkey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uOmFjdGl2ZSAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZWY2YzAwOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDIzOSwgMTA4LCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmhvdmVyIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjA4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246YWN0aXZlIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle29wYWNpdHk6LjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogIzAwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICMwMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC13YXJuey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNmZmY7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbnstLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yOiAjZmZmOy0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b246aG92ZXIgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMDh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4yNH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbjphY3RpdmUgLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7b3BhY2l0eTouMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXByaW1hcnl7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2VmNmMwMDstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyMzksIDEwOCwgMCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3I6ICNlZjZjMDA7LS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3I6IHJnYmEoMjM5LCAxMDgsIDAsIDAuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogI2Y0NDMzNjstLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcjogcmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LXdhcm57LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF17LS1tZGMtaWNvbi1idXR0b24taWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7aGVpZ2h0OjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MTJweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0OHB4O21heC13aWR0aDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo0cHg7bWFyZ2luLXJpZ2h0OjRweDttYXJnaW4tbGVmdDo0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZS5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1mdWxsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1mdWxse2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGw6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbDo6YWZ0ZXJ7Y29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsOjphZnRlcntjb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbHtiYWNrZ3JvdW5kOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1hcHAtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA0cHggMjBweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA1cHggMjZweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggMzhweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmR7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1zdWZmaXh7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA1KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3IsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmO2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2Vke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkLm1hdC10YWItZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICM1OTU5NTl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpe2JvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne21heC1oZWlnaHQ6NDBweDttYXgtd2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UubWRjLWljb24tYnV0dG9uLS1yZWR1Y2VkLXNpemUgLm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxle3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDowcHg7bWFyZ2luLWJvdHRvbTowcHg7bWFyZ2luLXJpZ2h0OjBweDttYXJnaW4tbGVmdDowcHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItY29udHJvbHMgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LW1kYy1idXR0b24tYmFzZSAubWRjLWljb24tYnV0dG9uX190b3VjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0MHB4O2xlZnQ6NTAlO3dpZHRoOjQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWNvbnRyb2xzIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2UgLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtkaXNwbGF5Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtYWN0aXZle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWx7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXJ7aGVpZ2h0OjcycHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC12ZXJ0aWNhbC1zdGVwcGVyLWhlYWRlcntwYWRkaW5nOjI0cHggMjRweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle3RvcDotMTZweDtib3R0b206LTE2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fQo8L3N0eWxlPgoKPHN0eWxlPgogIGh0bWwsCiAgYm9keSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpOwoKICAgIC8qIExlZ2FjeSBtZWNoYW5pc20gdG8gYXZvaWQgaXNzdWVzIHdpdGggc3VicGl4ZWwgYW50aS1hbGlhc2luZyBvbiBtYWNPUy4KICAgICAqCiAgICAgKiBJbiB0aGUgcGFzdCBbMV0sIG1hY09TIHN1YnBpeGVsIEFBIGNhdXNlZCBleGNlc3NpdmUgYm9sZGluZyBmb3IgbGlnaHQtb24tZGFyayB0ZXh0OyB0aGlzIHJ1bGUKICAgICAqIGF2b2lkcyB0aGF0IGJ5IHJlcXVlc3Rpbmcgbm9uLXN1YnBpeGVsIEFBIGFsd2F5cywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzCiAgICAgKiB0byB1c2Ugc3VicGl4ZWwgQUEgd2hlbiBhdmFpbGFibGUuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgImZpeGVkIiBieSByZW1vdmluZyBzdWJwaXhlbCBBQSBpbgogICAgICogbWFjT1MgMTQgKE1vamF2ZSksIGJ1dCBmb3IgbGVnYWN5IHJlYXNvbnMgdGhleSBwcmVzZXJ2ZWQgdGhlIGJvbGRpbmcgZWZmZWN0IGFzIGFuIG9wdGlvbi4KICAgICAqIENocm9tZSB0aGVuIGluIHR1cm4gdXBkYXRlZCBpdHMgZm9udCByZW5kZXJpbmcgdG8gYXBwbHkgdGhhdCBib2xkaW5nIGVmZmVjdCBbMl0sIHdoaWNoIG1lYW5zCiAgICAgKiB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBgLXdlYmtpdC1mb250LXNtb290aGluZ2AgZG9jcyBbM10gc3VnZ2VzdCB0aGF0IHNldHRpbmcgYGFudGlhbGlhc2VkYAogICAgICogd291bGQgaGF2ZSBubyBlZmZlY3QgZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBtYWNPUywgaXQgc3RpbGwgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBib2xkaW5nLgogICAgICoKICAgICAqIFsxXTogaHR0cDovL3d3dy5saWdodGVycmEuY29tL2FydGljbGVzL21hY29zeHRleHRhYWJ1Zy8KICAgICAqIFsyXTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODU4ODYxCiAgICAgKiBbM106IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250LXNtb290aAogICAgICoKICAgICAqLwoKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIH0KICBub3NjcmlwdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgfQo8L3N0eWxlPgoKPC9oZWFkPjxib2R5Pjxub3NjcmlwdD4KICAgIDxoMT5UZW5zb3JCb2FyZCByZXF1aXJlcyBKYXZhU2NyaXB0PC9oMT4KICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCBhbmQgcmVsb2FkIHRoaXMgcGFnZS48L3A+CiAgPC9ub3NjcmlwdD48dGItd2ViYXBwPjwvdGItd2ViYXBwPjxzY3JpcHQgc3JjPSJpbmRleC5qcz9fZmlsZV9oYXNoPTYyNTM4ZjYxIj48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==", + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuMTUuMiIsICJkYXRhX2xvY2F0aW9uIjogIi9jb250ZW50L2RyaXZlL015RHJpdmUvZXhwZXJpbWVudF9zY29yZV9iYXNlZF9tb2RlbCIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgImV4cGVyaW1lbnRfbmFtZSI6ICIiLCAiZXhwZXJpbWVudF9kZXNjcmlwdGlvbiI6ICIiLCAiY3JlYXRpb25fdGltZSI6IDAuMCwgImRlYnVnIjogeyJkYXRhX3Byb3ZpZGVyIjogIkdycGNEYXRhUHJvdmlkZXIoYWRkcj0nbG9jYWxob3N0OjM4NjAzJykiLCAiZmxhZ3MiOiB7ImxvZ2RpciI6ICIvY29udGVudC9kcml2ZS9NeURyaXZlL2V4cGVyaW1lbnRfc2NvcmVfYmFzZWRfbW9kZWwiLCAibG9nZGlyX3NwZWMiOiAiIiwgImhvc3QiOiBudWxsLCAiYmluZF9hbGwiOiBmYWxzZSwgInBvcnQiOiBudWxsLCAicmV1c2VfcG9ydCI6IGZhbHNlLCAibG9hZF9mYXN0IjogImF1dG8iLCAiZXh0cmFfZGF0YV9zZXJ2ZXJfZmxhZ3MiOiAiIiwgImdycGNfY3JlZHNfdHlwZSI6ICJsb2NhbCIsICJncnBjX2RhdGFfcHJvdmlkZXIiOiAiIiwgInB1cmdlX29ycGhhbmVkX2RhdGEiOiB0cnVlLCAiZGIiOiAiIiwgImRiX2ltcG9ydCI6IGZhbHNlLCAiaW5zcGVjdCI6IGZhbHNlLCAidmVyc2lvbl90YiI6IGZhbHNlLCAidGFnIjogIiIsICJldmVudF9maWxlIjogIiIsICJwYXRoX3ByZWZpeCI6ICIiLCAid2luZG93X3RpdGxlIjogIiIsICJtYXhfcmVsb2FkX3RocmVhZHMiOiAxLCAicmVsb2FkX2ludGVydmFsIjogNS4wLCAicmVsb2FkX3Rhc2siOiAiYXV0byIsICJyZWxvYWRfbXVsdGlmaWxlIjogbnVsbCwgInJlbG9hZF9tdWx0aWZpbGVfaW5hY3RpdmVfc2VjcyI6IDg2NDAwLCAiZ2VuZXJpY19kYXRhIjogImF1dG8iLCAic2FtcGxlc19wZXJfcGx1Z2luIjoge30sICJkZXRlY3RfZmlsZV9yZXBsYWNlbWVudCI6IG51bGwsICJfX3RlbnNvcmJvYXJkX3N1YmNvbW1hbmQiOiAic2VydmUifX19", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugins_listing": { + "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiVGltZSBTZXJpZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAic2NhbGFycyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogInNjYWxhcnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXNjYWxhci1kYXNoYm9hcmQifX0sICJjdXN0b21fc2NhbGFycyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIkN1c3RvbSBTY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1jdXN0b20tc2NhbGFyLWRhc2hib2FyZCJ9fSwgImltYWdlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImltYWdlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaW1hZ2UtZGFzaGJvYXJkIn19LCAiYXVkaW8iOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJhdWRpbyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtYXVkaW8tZGFzaGJvYXJkIn19LCAiZGVidWdnZXItdjIiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJEZWJ1Z2dlciBWMiIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJncmFwaHMiOiB7ImRpc2FibGVfcmVsb2FkIjogdHJ1ZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImdyYXBocyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtZ3JhcGgtZGFzaGJvYXJkIn19LCAiZGlzdHJpYnV0aW9ucyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImRpc3RyaWJ1dGlvbnMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWRpc3RyaWJ1dGlvbi1kYXNoYm9hcmQifX0sICJoaXN0b2dyYW1zIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiaGlzdG9ncmFtcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtaGlzdG9ncmFtLWRhc2hib2FyZCJ9fSwgInRleHQiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAid2l0X3JlZGlyZWN0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiV2hhdC1JZiBUb29sIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX19", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/runs": { + "data": "W10=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D": { + "data": "ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D": { + "data": "ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/runs": { + "data": "W10=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACoMAA4AAAAAUsQAACm2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu5A1nULg14AATYCJAOHNgQgBYJ+ByAbIkSzoqzwsjiKkj2aj6JicZf9lwnmGDrzUL5ooaWgICnvqxcvLU1UUm052dq0PPEbkDL7t7A4c3dKponrEu8IjX2Sy0PoX9DLJNk9AHsAO6uC0MkqVZH48wM/t95fEVEDtBGpESMixmDAqNgYMLpGpmSIhFWEFSiIoIiFRIli3p2nHuksZyTDeXbXshPuAKlMlW53Zbg7HZue7/8N06wSlnxFE+rSAhYVkmR44D5FCo4yXQlcOX/hZsHaQuZYMcQ8fkufGldr+uACwqKNzkSGPbR7G1BVUZ3KOl0lGRYOQuDT2zTbfVpvBF5fojuuchvk6YE73cxV6dJS//W/1qu/X2vQGiTZDshHKx3JCpgmIwjIGl8FXKUCLIGkY12AuaMOqUzRXNWnLQmqS1HWqdIFnu/vG79/2raDcUAPMPAMtn38TkB/ouZjIAEmGGgThZmsWZkYwdIwtsYh6+N7ZqYra0NPaN1poDFKzhjB6Ep9/G4ZTnWidqQaNBB6+Y1RoPACsDkUTvsZQJjzgUiWDJEtGyJXLgQLC6JIEUSJMohOPVAu+QiBQAHTADNAgAKRDAGmosIAZt317VxBcvfkGAZI7h0THA6SB/jHRYIkDOBDaNj+e8ZEAjtwbBhGLXC2MFFLe6nWKwp1sS6WQ4VY39XdhkP/X4wChWLH4FC8KPFQDqMIiLjGjWJFabOIvvgn/jQ7N9ClKlWDRqlUq8XUxVp68cWGQ7/D+N36//YNN54bY0H9DUgUJtSPLQYOF25C9jvokMOOOE6FOg0EmrQR6dJnwJA1G3YcOXNB4obCkxdvvmrUqtfgksuuuOqa68ZNmDTlhpvue+ChRx6bteiVJa8t+2DFqjXrdnyE0M5bMIiE6TpAn6hZohBCyQ4q+IddgvVd259GlFOFNmHm+YZlbrMiWMMWJJCru+Uaj9zimRu8ySnLbXUJGnkTtMtp5Aqu4hquY1x71htzeI55LOCF9rJti3iFJbzGB6xgFWtY1zbasoktbGs7bfiYRnjlVP+hPoJCwSt7WIClnW8Rc4Vu7tDP12bBMR5M8483PCX8SrDD5C1uOcErZ0QkQ1pGyk5TrDylKDth8BBmTIBbLvMnBPCBG9uCt+WBq3CUc5cOYxpP8BQzexSGw49L58kUZJkbrABr2IJMeXnZ7NTgV8uoR4P2sg2LeIUlvK6OqM1GXCxzhxXBGrYgowwvsYhXWMLrdWPYEEahxosAu8OGlMtrXNyHhK8kWMUa1veMxZ95BFGHRjTRCLGDHexgBzsEexZimY2sYA1bh5RM5GSge4rzwqVs5y8Zi3iFJbzWPsS0glWsYV0g5P5oijmKkp9O3nw7kCfXGOc3/jcHxSZ3fc4WRHYgzYszl8Xt4s0nAnMbv+OWL1BmKuw9jcgRaflYdnZg5ZSinHQinwkpJtdyISq/Exs8UN0JBvTnxrwgTdysfiY754dWTK8Zted21jPU8/6ErTbDLJtDyepp3/I79jzdpwqjW9NkvFDxcrFn8ct7uyI/Nw20ef7NquSYG/mY2X3qX1lrwCxM5fcKo/9ELfnuZQg72j1T/muh/JezBlNxFtf0x58eYNG3oste6z3I1ae4pvIFyU8FzkQfejHes5fRm2qnDgIE807LfcaTOpsEUuLOw/wOZH8rylWi04VRGvkSdfjzXLcqGTZ0Ft8w4B8+d+iZ6+vzC6o0sWYSH/HEcH5jFetUsY0j935Npssg79F/4F6kHQmLa1Ms9Va9TLCHGVYlSVrgX3FCh77jG/+4Jd/AaEir86/WBqxJDUpC15D5baQ+bKJ1eAepuz3VUvN2vN56JxY2PSZ7AvMVJjZbZ/Wx571F+emsX0bLt4pUr261+xXWRibmZHFmW+n8uPjvZqdsHgYZaJrhAxFfgsQCHC4IflcVRfA32n6HYSjRwEGbwf3enCUJ1lCaXS7DmStZbirwzBVR+dinOD+oRqNDmr4ru+S145atI/8AunlBIbSLGGJIJak5i3JACQcVcEjEYbGU5XRcLiqKUhehoTBteejIiagkXcXpyU9fbgbyMRfHQjaWR5G4utgTpnSBQYJorrJxU4inHKgK8paDj7yKT2w/DkNMHU5SPxJDTCOU0qSUSznisnEoE/8JmHQT1n2PIabN4DRLObdnXsB5mYtY9Bq75SrGB+vQ4jU5EEAghAngKCphl/AJZwLlKIuirBh1UQiiaB15BevihAMRhOCDC/6lVKU1hC2fEJFAgwk0MkS4y81DLM9ndsFgDx65EKVUlLIqoko1UQkRQBgBhEPYRZxEAe6EEg8UHHAltutriGyg55hs2Ia9sP/pma3UcvNIgV4p7wPbWtuZ49ms4+I6jtZ3MR7rbeZo5+bGbm7taB/butgGVl5gXjGwzjQ6od7j9jgoKgIO/FOeB1A6gBbqD5oWvarVQfERMeBEXNJTXfov3YSsODZL10PI5bawcHipoWJqco0AdmG0Fahzlbqh2bDXCVXlnj+0tNzjd9JFoCEQNgJSIKK4OEEIjqMBwZ4QEBpHObSmwc1GiBZw3z09nPr16TVg0ElDThk+b/Qg+WyPShErzpjTzjjrnPNQEMJkgNr64xos6Fd0dVDm386rLwuJ+xGaHfI4sBiwjhfOBls4WgIeLDgTDv4A7DVuCsBDrgW0NfsYPDw0GIp54gptJc57XPaBKXbA6vAwxIFpZegI/5mdcMcTaz75i6gWUtyJxViaCOMl8bJ4BfwBPBFvhj8Cf9eCM/39C7yAR2e1EZPuemrdZ1JcdhbCi+OlD61TG8kfuUI0b+DMKZD/KL48Ms+I/9/7//zvc+8ypk6ZOG5Aj0fefn1zjikFLImVsdORlv+39+LZLrn3l/f7z5Fr2hNPzZiVJ98zc56bt+AFloK/wve6UJENm7Zs21HsI25A+fEeyGIo1rRLVExwDJpyHe7F9bgLuyt34z7cgwdxMB7C43hAeQLH40m8iAeVl3A/XsYbeApv4i2cgLfxPl7AB/gQJ+EjfI5XlS9wCr7Ej3hb+Qmn4mf8gU/wJ/7Cafgb/+MrZcAZSkrfq2UFjzO9ZWtpG4+z1HjC4xw13vE4V433PM7zTmY+8CwAzgeTOQ48F4ALwWQeaT6PS9TJgh6Xq5NFPa7wTtaQ1vS4Up2s63G1OjnC4xp1cpfHteqCM9mu+6jLZofKv/gMfuhW3pPiAU17HJjlQVDfAHEIQIeI+YlHYKEhpagtUCaan7BRoLDQThEoqCOLAJWzHoFQz5cnRaEgTFRYKkwRY+WMAUjjWkaXIJEwAoNOLUHcfDGMY644+bMo8P1hJLwSUN+asKZZ45uRjo1YMxyWKxyRtHwY9rOgmds0CKCF/jl3i3nj6npwDKJXOkiXSZbceUDhogx++TB31vdN6ZQnaxvAQgPbYXpfy/I6Gby5BrrAfAo57tf9GfB1tVXWWnuVU4GpY37ByDQpciH9rs9Fkp9P443DfcLcV8x96yyufmrJu5efcMIUsxvuc0q7GNZjpZHyRPs5yF+Nft3+yuA/6LcH2dFJjHAgZXAZJRIrN6goNldD9qlBbULVGSsaoh5oEK2LNnEsNozxNUMUkOcgY6GEwOWgXGdoIAytWzkWqXKsImVogtwlQ6QN8eIy43KaUgRlyCHLph1r2AI9X9Vp3ZzH4o1zI21kn+12int3NZc1cRD+pVws+BcrisPZ0GTWgzeWRs/8GTt0dqHtPLTxTW/D3C0Nb4WbLdHYNhtN3WpYVp50ki+pRNOGEQ3TGe1XMQgbZqEtbIgFv2GLob7lvxkOXHOrQVt7Ed5GWJeVDTwqrq9hZ66xSVL3jemdwJRJq1wbKtXMS5RsB3cd4wyxAPKkX7WsRqr4UBTVodqIhaMvIjaz6kPjla6hfx8DZaTPbfjoYxyuhqsJPQaOci4eSa7i9dxYeCq5d1aMAgpd2LR+JNLCmbR5fPmVlgbeuLah8bWrk7zjSbyg6uCwN0H2uIb1gvYbHvHHMPI78fT26Z1plmlY57237cR6slAinFkaTXsr8XAewr3w+momYZWzR5msF3pxUIdK5nei6fZM+2y4iu7NclQfbX/3oD9FtSFZjeVptS5YHdzJpO576objZkvUXNJktpdTQegVeg9Gzh5ZHQS/LZxulgBukUUnpQKlD+SqF0CN6zCTvb0ge2b2lOwzluW4B5tBiBIDlsULM1QhKCo1EytKj8N4somh9ur6hh11ciy3r59QPI4gw49GNFn7I8lyUorpYmXFzjZFpH0JWquDrEFBcpBGa8utTlysjL+82uit732iQ1pvhaCa2QM5MSLq0N1X7EzVecMmY510zPNyN+SKrEi8nktuL5OjLasS13VMy/usRnKieE17mxmz4I7q9uTejhz0H6VBrCCLktoO4Do0xSxgGguASIz1eDdRMHGDBqJH4xrWmfZU8FnFQKiplhMeNcfLAY7wkEeRkvNbHPtl1GhoqSMIr8zRc08vrfOrukNlnsFPH3XFAWJRHPJeKKpxULH9tiq5HwhfRkoogqAEVPNr/U1Gk4S0wo9pUSYUzhMD/Z2cKSKASmK6Q7XiprYN2yaK7MTN1lDiefZgXJDF/FFdp5SsqD0xumuYK3gTM/jD5bS40vIY0TEdlLp2etK4TCObfadRkLW26S3ICt+EabwQUb0NORjj9tOjnxs9HEXZAQfv8IxenpliLP26MSoQ+VEge76lti+2vQJFXjSImMBJx3JeyRNABXcr0jrwoOmkSCj8ow+n2qIquDBOM1bkfmRHQZxO66uEndYiMWz7Wg36SDwGTvrpVJ8M7WmLNRxIrMPxKynGGUzRXKIms/m16TyC3OwSC+PaSZzFqBVyXQfkAhKw2ODi0Q8bbOFZraQiMZYMOa193XxYXDO9SYRoLxcBkkPjzs36WsU8toTC1kPSKODcxrQN0RLjyLRGYOq4RmBPnDyqCNoi6dBIdQVIUEBK9wQVShR91SyrUlkWFbtzj5w13eK2As0rWE45U5zMAT982YojPiwMPrBKstKUGlMj0jMV1NsIworbxO3YX6FkvXjDXT7YnZ3giY5LPcMPCo4JoQPHhjEHWyI9+H5kBI7Jr2I9+t5IFpk+4lFZEfygX9jxrUCfWGTElirbElcxYKGs4GLzWiohxwyNi6K+CBbpYRU7/8WdHX+A4hbFFXkIf6XuFwodK7Yp3qX/QYZY7RAXjpn9tdnMGVqD4r83BTShxhFk7Dv29m2sUZsWbUA4pKLGbZGPPGjI6EQSrONDR103OGFBrMZiGP51aOrYVpprLdmIMnevqUA2g4lab3f2wt2O2dnVeztEQE1HIkZidCiJdDJyMNBV7+HYdDObwZ7Io2AGeZJ3vZI0s6ySFSg6wXlk+wuh4bCgL9DfL3KcmAxvo1uxtLlzSB2goNAWmSKvqtfOGRGdWHg5LkLOzkKGmFn7ZBPmULKaYlwt8nV4/YmGVWnhwAKUXjXS6hV2Zg4G3yG1GZvVT1HEQKvDK9Aw2sW1jP4ifj2x2E0Xs0YplhtsVEaRClGNl8uQ0ajYNQNZTdgRXNBE6H5tp+sv+fGrxNvsO8tz2cRj/q1d2Wwww4mV7VyCv4jm9lg6286I6NMyFpQcNGkvq4V2YYfaLZ7JhmUUSmamR0s+GYRiflL54FlmOlIgQaViIWKS5x0zaZlBvRgnzfLxqi/GMpaVV4zXW5ZliWVFPcc4jOTBaAJPjASuIvbLZ1nM4fZNaLjU2PHUB7gvgIBQ2o7YEXhLu61A6t80krAiF4C/rBsYkkz3cjJLN5ImOOVew3WXBhKDoQQaQKkbtzRiE4uO+8PY360dkcjskaGdYYSpzm3aQL6oE0RWUkwm4xF5qQuD65N63/eKXzz4u6tQLNff6J3+Pzu8epPi2nvxmg/2jtrxzyjFPQ2OngprCtnURD3WVrXyKG7A35twsKlr/wOzogN5v/vQdGLK8sTFvtKHU4iq1MYIm1X7BZJuSBdjr0b+u8bfnfoTinmaT5k/1TdA1T/TxdPvpXOrEzPMoCxgcGHhjMB8x8sx8bvfbsonBSSQXDyoLnbuXru+J1xpdK1Cr5PPnl0WvNt+55HIux+P5ROZGXRKMBWw3xpZw31lFcM9ZVYFw91l5SM9pRNYPTMrprG1gY2esTVRy9TKWC73eMFoT2n5SFeFFWuop6JyuLdoAq1laa+ZUmCnZ2rFNLUyRL6V2irFxZTagkVBMHOoPszIzbqRdHJ+7kL306mqkdG8KKf/FImxpT+kc0Zf/m9lQ+6gzbxAL29iwqg6srYOFNtQ90gGIhRv6x5tp9arZBlkbU00sHEEAUKEdM3Fg3OQ6ria3PrRoFhfq7kqvPumstzxzts1UVqNBXpbGqk16Ffgp72c3fnVsFhXq7GM3n0dJU842nW3Krre5kz8TMhrRi2BCOmGDoV4TjNNiHpLKFA5hXjBkDLD0cY8r3hWoi0cjgYep2FpjUKNdCy9QAguM+odFI1MkpGkd9/gLkRGvIeO/9Q31SG9zJxKtrCkks3NvFytLL1c4X7agjzr2AKYxngq/2u4t/tLB7WPW/V/3aVf2qh9eInzAT20EL8WVF/AGb9T4XTvXuQkyMt7UujbngtyYL12Z/67H43aaunvH+kVwGRFKuRnvFpPq3n/z8JtRtTbglobagyI11CaImkRXpQwfyopytNaPibl3FJw/jp26UZQcn+AUsrRpNGkG5Kbm4vCq9flXVJCPUPjGJ6Ln0+Abte+3s1eXXldMvf5/V8n9h1QLzVB4aHsIemDyp6ponaIZtzTbWSjLOHN65SGvPf0nCl0qiy7JyOIEkArzU5LzmWGfr8MWoSJXembqN3bYqOx8afH3/K9KU9ZfZdZviZpyBX28Qzd4c4SbL6wiLYaolRFd4V6x1THJ8ZWgZkIryKBV1XR7M7cFgaM847Rad1UFZpa6pnkG2zv7nC8n0pOPRumSlUJ66Zf+bn0fO6fRX51c9+IaG9qBNPPOzzaz4ceIfOK7BHi4uwRSHH3oPVQaKASY8GMbJhaZ39fkbb7Nq+08m1FKg8MhzNo7bY8FrD3ecTfOW4RZFmdWBPV6eMe1ZaUyGgECk3nnjhhJmJHDywORgFbGTsZrRXgGsPsgahmdMQ2vQyRYuA5Xmrae65DN0h7sMWG4ok4KiDjXxZm5zYfXSXb1vt4OdnZWnH660mrmXq6lXu6uXO4Wv4GQYSLOOffo9JNtzRrObPAks7q9u9C9wV6cuBuUVxFkPGWmjGHgyZJj5o6jx3mpxITCFPHbg6HcW7w+evm6JLO7zOW3X/i7rQKjT127kIblxyX0Ifzhbs/f/Xmz1YYZsdy5poW2qm6k6WdDr9gHI7NuAm62Uq8gUcN5VfHRBVExgzlZRkX8JAD2LE/HAIPboVHdPnvj5LKGkyd5Vr4iXAkFyH0hCCPe9MowWdvltGnA2Pc0mbBsWqVf0ubB8SNkqw9ZmsMBU9e+F+dR+yrEmcpK6O4vnYeeR+5U/6yqaQwgyOP81M9Oal8atDgoenDPt3jw+PAEXf9UdXY5VXkuf2biyunwWA50YjVs/cUsGPTX7u8jC5nkIxISmbyua+FSS+jE/6Sk99B+rnr0j1NOsizwMVqA+GBK2jFH5Lb+4TSCmOTTrSvwrL36vDmwKCl5S+B1/rgogJKTGsme7aSg7WDEkztY6D0fHgEn0tS5t7Glq0jWwvK4R7B/m7B8RFgbdnc3/H4HtTmnot5E41hyZseDobhz+l7g0xV8L1jYkF4MTN8cbmFY+UyI+K1+tPieXoyw+XjoeCCB6V9uePj7A9uX83k5FFwWb640GAqOXrxvNRwswnMWC00WUiOMHoyPYz547Da/bGxoXsLli3fdn9vaujcgWUYBoR16412zz+J+Utl8/t+oHFfuBPTosLC03MjESFwuXHxUa5SnOfe9fEBwj9WOlyTLcKfRFo/YjIosdXZuqw7OUSiC68JHs3+JTo1Jjg0Lj55D7ScM8iJnlpBnio/8z8k5F36J7S55SuT9ThXKSg9MiYymWpnWe5bfPiv3eaHk9dl5r8MCKVUPi87tocPT3QDu57r49eVrl/62gX22LGJT0dE0H+rCrX9QGmqojAn+Tea4z40hwn3WDrInR/TkasbswdHpIfbjPuoMGFMmffZdM+Vtzt5lNuVkw/D+QcOnb3C/92jf+bMa2+x3y7sPZO9hgcczMUrV1jJfOjgV+WvnklrmPj8Zo88dgzD8+Sr2SlQyJ8oB5x6+dsxYNsbA+hjBw/gjh0CeKPtovVtRYBof2lM1/C9tSPzs7LQKujAcoX8MwSKrg8+ChF0YVmzKCxuoP3pxdJTfy5+hnwDWzsPkrWLub68T2z7M8+8e1v3LjyHE4cdBATvGYVrt19hvOSpA01bczBdFsK8Vrg7FsbijsEADuQPBsZ133mnwI7H9ITWhxarM4c0oktKjxYJG4PKnFOgO2LFBxHxFx4FpW1wHcAI/cdxeOPhtzVkgg8hBYa5BIdU98r2B1eB8b7fy0dvt4XEH1IAHGB5YsJZJyfWlPA/GmmdwSxN5hCBmT8DfkK7RxS/Snenw1px7Zs/YkjCaR5aaSaj3zuprM3I63UIZ26SGz2WN7xaDPENDIPxkM65TuqFp/eu6bkJod5qa3SfcF+YWwgBs33/7hy/fyYgmSsYJ1qeNbMZ0Zr43kfHJnM0PKkpNjMlmhjI7L75WeV/PHtNfF9onnbAXZ2A7LCEQRCvuRVTNOKHaTwvP+ztSPHO1PZH5AEH8tChQFRQEzN2I9nauJOMTSikagoJJIWJ8Wev3zlra8q/qn0wtyRR9GFnvdtX+ufp0FCbb2+zIGlZCpt5sW4MJNhBhwLgQAHEVojsSTGlt2bse6J7no0NPZo+q3CGaunqlaOaCmvyp32sSR6pmsG/5YkgVktkT4utvHmq/z5y76r8Oaqji3eKXugveSIYH+hM/bVR1PRKmItvFbH+V0RpTvQoCs/WFNvFoMV3nG6I7w2nx/aA6azQf8tKUz1B0X/kAbvIzUELSx+89/ogBo9toHeHFKqFXtWgFz4B4wN/lw/eGQnJE2T+Aeyiwu9AZtfU6lH8v82MzsB8TdoEITgvKKITlL4e7T/WoxZ5S54owJblVtuk0gKXjhDC9GLFsp1+Vu5OTk3/mGqWN3B0Ils7GqureBIXjlhLrpCe1P6+cL9w1i9xIEAQbUdz9iC5GoB0nRnn5bnL0nrPjFUsXrlKeKpg1Szb5to44UcEPfv6yIW7yORt+auDTTWawX8UiPyA9rv3Qll0jiism1EG46misjExATPil0cDhu8td1KsdPT26Axw/jhvQlAXMDqoOUmaIGnJL7SagCagGu92aEppLCf5PXtraCT4aszFSZUmTxE7p68FVzYENnPG/m/f3QocAuvQ0CDG3Wdnnoyg78xdPvvhrJpWh62UfTGSMrt8xvOM14c5zGa9OnjxjAJufBTkbzcQ0NtzyxfcL7ivz6A3GrS1Os6onl2GiwvoOyNPzsy8ZPP2DQA7ksSVy+s1NhnavW0WRMtAh3nkyrn39Q6Zul1Npro2NDsYzNhDCX1WFzq/39SLXOpFZpFsxNnb3n78SOXkbJP01r3NKzLP5JZFF2fkr8m9u/e+S/rSa6SLHyEHhjiHBNdCu/xASCWoG2KLU/WtyvYU96iWAp2Y5q6dJtzygx+bT+b23k3Kkd08nE3c/P3Ylwk7YMof3pbx4GFrelZuaQWrMLD59iNGR0X1XqGssilm6kZTXEWNqVBTT297MOXfXFyKCtoxqQnhD8bjoiKVzP0SEsPvXY+NYoLg5w0UAtPequsY318cxcfiR/CiSqJqI2qxaqPfTO7rQiaPFEbqHuYHBqyn3l/opLCCr4wK3vmCyD5/iAePTJ9MZqyNoXGWMyPoUoRnHf1cJ7Ug5PKQ+Mynn3zv78u7p9DDIxPtzawjraP9b0R4N87E2BwONHexST342sRZ2dvA0yH+IIgRyAR7K30DW+swW5s0O5sZdU0nK6KugzVB4/TfCmA+69o40ml0be5c9Mj4XFv3qZ66Fj8vFwo1iAXM1PhgFtXDwymgN6+vTlrgZHc7f3eznGuTHH+fkeBgg5wzf/+DKx42d7Js7lzxePDouqfV7Ykpq7tXPcBrsinMzjktISeFFtmfNByinhlnbKWmcoonbCSrsKC5Il/PX8LJN/sQad9AId0WyLqqFNATSLiHSR0yBfILgat35n+Yh/9bLno6N7hINAwXZjCZ+tMqkT0403r+5qkOO2MT+9b8QhsfQw0LCyIVyoDQy3am/wywrYzFdHZGRrR1rLW1RDC6W/jYCWYWBA0zW7qlbZiVJRwhjVjtWTF+Mxz3HN1/C97G+G37wbkmRrEsMFVIYq6+asPHp+NOthbUdmQlWljGhrvVxPiCgHC0SyJFsUj1yIjM45CBlNyqkwnhiSzVukMVtAsZteVDeTHTCqYqGnpmitRkoIJgH+gKE7ZB8hYxKsMpIbBOK+yXPJEHa0qhFIZYKl2SB+wiFLM7rbH/nn/O8WftCGDHoOSSuRe5nEou9na1sPJ0AwpusE6yOvJCZh+uj+l8xETWBiNbDnxNj/ZdO9QWnyQEbEH+HeM3NCem+qzar95obbt+s3sEE0CNcHLwDAc/J39qhKMDlRECJ3Ly9bvbarQtpa2VWpvsPT0QJ3lkYm9+9vn2g2vtjY1+VOkD/ghFUdUVn4y4SsjmsRvvsyOp7h/7Z8eNN+DHzg5fEd0e8dAS0wGjODVtt9Bg/3FNFc0xdDirCuE4AUguzal19uSYu1ZeK9+7dSNMJ/W5pxdGi52tU6/mL5+5TSJm6Z5SYY5/s9ILbwT9ty4J07A/7OK6ubJ3Q9cOLINk8BjXWifsRmY+Yj0Q/voJ80VOHrBj+K/n3sZnx9/KSIxCYEDefunnx+WJtTtDDPqw/X49B3f7+vza06u3Fpxb5RIJK/7qyY4kK0NlMzdn47rEer+Ic44WFBezdswc2L8T/llcbWj2yD79yvPTna0/h77AgI6dE9nexcdCAy9Yh7n29FlsRHrUXWRuD7fR2sIZW5wcb58j56Zkd81Ka95QgzmnGqsUcL3HByJJ+tpOJqpqPZ6MGG5GhrSPWzAQRCT+YKHA5lSewMf6msrVjKx3hevfOacLw21VGuKY48n20Q1+sZY1Bzzffjx+Ovckwy56aNHUpSY6pjabmVgeEJp8rg3M1HQxa5huOTNPkpUl1cXc1MPFxtadtHVq0OOrEuwqbV7eGTJ7t9biXxGlLV8nCcuazpBn01V4nZxD9mgh/aP02J7xhph9zn/t5SFafAeYfiHM/oHM3wrA1qGguPTtuvN2Pxse199jHiF4ghDG+tPUL0+Uh3gjSOgTSh4Rqm7kRA3oD9fzC9eNpfYJxX3t9DLcNmR1W/vJ+IRy70TxUOq7L8EpwljfVXA50Jn833px03pJbX79PDL/HdlpK+dj5qSFkvPxzkoOV6x0XholbpbUFtXOCh9B49mamV0MenTHmROx3XRadDdxrMfeP5qPHiXpT/UHrbgN7rUTlScql/kPCg0AW/wxt+wEb2pOHIWcGevrnx4f46LUFtSmpDwSMAKawd+icxt9D3SEai1JKSLK/RxROc2+sg6JOq8kFPHKILCmUOBALkCV9K/W+4TNAbfi3rkiC1UxuNbsGTgD91Vks/bpqJrzu9ALlIDH8NSs3E7OR7W9WPgO+Hkv/rXiqeQaVNXCk/EA8Q16CazfYbnpYYysVCToaGhOGp2WlxoO9lyfyq+I5Qv16SvAf7Z5F756nf+pAk4y/ld5ObWWMY6Y6uqaZpqrrOJeqnQem5ok26/BxsG0wcYh/l96ojhajqziF285LylJvH2jY5ojGCq4+u74wvkE8elRQx7+WHpfMEk8vOsvHc5v8OCs0vO55yEFCkQF0DDHkzlsbvVbp42mwosfvCtydf3BXIOLHGC/KzQwI0Hc6lk33AzyayooxOkp8Cz+nWHOML714Fmlx2QeFk/msJVKmZYGzgfYZv6gtpXuNKGpo6+mrr0XqR5u7h6squ4eOvGQvZ4eiGbddtU0UgtGFQH/czz+71GoOaWf0v643ZOLFbQ7HTndNfcc3NIIDT+7nIRZW+Z5RbkpqYONJdln85CgabR5cFi0+il9tSP3QbF7/0B1FpnXw8woPCGvPDnuVEvhiaEuVK3+069bG82XHVUOpMYdM9ZXDYTTnTadL2wjB/oyod0wJlIrSzeL0ZVUVdmXxMjOITJ1mGGtiZxt8ZevOtNDnQ+VqhwvFQy3didb27uTYUnZRN0ptSQnN+l0X25lTx806r5YerEp0E33liEYkVoMsfbxNCWiuVY4dOScu3gu8ef6WkyzX1VVnbm8tWj21b827xXAoiD4lz9i7Pyt6nDQYjeJA37Ral/z+2QzEgCOrwXrb0HKMxeDvr9vUI3stCJywO4bN4ga0VrhO7BrfX8fo9rG96L565FJbRBtB7ClAVBGNYMFdGyA3WMjyFI5EBJi1Iqvhj1Zg/iC46vlHVeL0BKCbBBiF/IOQrbRY1ttECCa0Y9GZVA5qQwp6XBKGXaNTAkcCHQtaj/PArPCh2g6gfHlVmC567tXujMaK9K9qNYqim+pkw9qyeVW/pUPLzAzPzoIjC8lgeXyxtG1y8cCzZIVGI8YWJ4a4+jpaKmFKG9Y6rHJMoq6PKuoyw8VdXlOUZfXLJ3wrX9tCKUjCCzXP47uhqVPkksscwZ/DlDMm7VMeISS5dNJlWvkePomQAWebJZvA0vZGNbSyD4SEEptFVmItWQJ66Ova5VI2xPXng2PYC1uWWopVIYg9J2IS1iurSxSLHKzQpKd6kjYSEXC1iqSaw/Lw1duUDxkuzqPkvWOPvouljdBFpe94/SldWOqtTZ8YPcFIf8fW1L7P+Do/F5uNSqdoQY5O7809tJrR21BllZP12bBoB/UT3IF/fE+xgeMpsFe1RiuracaiQjXPktPJbOJVyxOgVXdi+URwMn5vceXwwjRHJN9jGWUxZl+CSEaz/5h5vw0YOHc7Nep+3CmkeKYRmmM8JclsvyKzljBBvoOY81EUVc4vzwV3AbV9qvfkgPa1mOdJJPn7xVQHmapzhPXtuYocCeGE7ePeeyHpi84VueWO095rAlFfQdOiGu9pyiOYEhDgfYjzNYAhwM0YP9Yc6jmwWRQrT+aAytaA9kRYLN9LgdAub3vYYE4m7zZisvRXP3SfhsNtOmxf5jEroHpCEAtg39O2HTw4SAIDT1scgjDmwI7BwFioZlex7GL+PR+Z5eYAgCPfYFlAXh9XN74T+X/51MWTBELwQEFUMD4gIEbYMozKs9AWAXEbF/fb6kgbWUYVollpEUVo3aLajeg9g2+3YhlsWUYT/wPZdah2kGq+dAp3yhWSZFBkhG/82ss92X0wwJG0AINQdCH71PtFibSQ4JOE6TZahU2BUn1l2Pjw2x7ALYuJafrcevqcloW8YDz1Fg+vb9KkNW1JIe6cCKRvWMU72POihWHt6arb0bbZt6+xryXzMR1XWyjv6DYRYi2L1DtJevQkVT9QKyBp2ZSqtWQ6KXRbJi1bFFNiUnLYdJIrOINmVbFvKUICzkRIZydZyEq5GSMPopqqWiNxcRHym+Nbe4rQzvO4aTXbFzA09+TboJEGgbQ84FtoodK4GD45VHoKuhhIqs1CWxTAnsx52aDMzCQ1dmAWq/xGVlwq2WK6l+wbzQZbs2GgoEqJaPZ8YhftPSXXCX6BbePSuo226ApjX0C4peCOiCh/gVyHxc8EuM6SuRTfzEf50M1I8Y9l3d7I79zQ8Foiklr4toqGbY8Jq1YdKhijSf4jbWQ6k+pcVJifSm+80LjSEpEeSuszCOW/5lUQ8xqzqrqMIl3Cvq2/MjACDqnWkU2fiG0Bh4tRk17Q7itkxlHJFPiP1oogCVUQIA5LKAOS800frEEAeawsNSLpqmGqSaT3Tl3tFR0SbXFdGUYimhesYS9Odo0rKnCmMZMHNUT1UxxE1HSTx4mh2oOeLC82drUrJ3CmDZF2GuFATQ0BPhBBVEOsBCA6UBArQgHAaYQAg1pHAB2AsddEdx8dkVhR98VTVTMoTG7Yh1QyHE+ZeSh8nJ1i6koTMli0IQKEwdPjQpVp+FZiiLwMwTv2VqkQMrc+AZGs4uHiHXiwWI1HiPBxoMo3+JRAhhxMFmZIShrxveFm088Fg0isn0oL1CnRTeYkVp+7mO07cw4TETHnZxYTZk/Jn+BwhKuzE6MUMdtNk2gYJFB3pNYx9mxZsqcAxJzx1ptUvlZcFlJF2QG", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { + "data": "d09GMgABAAAAADBAAA4AAAAAWSgAAC/nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCvtU5E8Lg14AATYCJAOHNgQgBYMKByAbzkqzoqzvGjeKSs5nUZTtzWj2XyXwZOjNKyMiImBY6zWKNWA4InKyCXHjC4uVkc/4jsPk6tWO0dBIYh7RfvvZ2xfNC6JEQBvBRsACoSVa6XxUtYSUCCLyUMJGxQYVRREVMb/RPwqiaO3/++ju6jlvgdCDQkS1EtguC4OoERR+EIr4ZoID9KtY027T2QGFC8Sv3Wdr/ZL9V7XGmSLf7eVq1V0NM8fgyzEnvgOVQLoTJHeOBOnpy033erpXvoAXNLb//7rMVtfPikfHmhw/mzsrxFN0S6eXEzdVikojDfjPtwysJR4vzhKPJzAOEfRLwFWQSiyarXJStOlSlGlLxmrvXfu0V2RVV2FkMjP5L5lJPmT3mHIAoFJEoSpsHaOtc/Xd3n97Iqt3cLdZiriXiEgIUqQLI3uXfvxtVWfBTplCeE5blssTmOjrTLc6eFqS0E7GBITAcXnvmyMwrLEPos8VEi8eki4dkikTkiMHki8fUqgY0uYowhmfIAgBgAWACwFAkHgIAMMW+5COOsbUFmSvjI8IBtlrI3yCQPYmj6hQkEUCAN9CU914dUQo0IBckjoaBEapySreYP2mPI4vu7Ctb1pjaFwYc+NO0+4EQcNznUNId7Wu3T171HjWc3pRSfcur/xpY6KxduwohWEOw3scHykWzHNjqODCuJM1d17PSlpRcJT6uiWhYGIRWGOd9TbYaLMtttthJ3UatOy21z77GTNhyoIVazbsHebIiQs3larUqHXGqDHjJpx1znkXXHTJZdfdcNMtt93zxLynFry05JXX3njro08Qjcwh0SJuN769JN0jCRFE0RbcSOLTqq2JPbW1P2kQp59nDPOB0QRjHIQN7GZtnzcc8hvHvOMyBRbng+pIqkODMRp7YxjHBM7inHE/zzzALB7iEeaMx/ngCebxFAtYwiu8xhu8Nd7lN+/xGz4YH/POpwp0rc/FO9tym3IYR3qOINPILK28sjsf7c2Ce06QKhgUnwpMW3RYaEiZYx8Rp1wTsnampKyXHjM5KZGfNiRs4nTw2OclDwKAGFj4IDkbT/wahVo+0yTcwV1MY+bU4ii4mKE+iXyGeccIMMZB2Nl9RXGKV+KqItSg1nicd55gHk+xcGomw3xkBGMchB2K8RhPMI+nWFg0ZkLMYds44aGwKcUS8Aqv8QZvT03GTRY+qlGHBosLNWjiDu5iGjOJTKYUWQCWs7ZJmkMp44Rp6UW8Al7jDd5KVJ0QW5XLDudLpuX5xOy8oZOfPIotI5jkM6f8BknPcxyMvMQmjpO7mgmT+mD7zDmcHK0SQzIgKbeZn6NWObkoPxfU5z6kKoMQE2zEtEQC5C9XHJAnLWTzHb+8lFfKCzyNyx9cj9eZ9QW/5X1Fg/eD1l9g+WcM4tR38iWpaXdZDeQ9+jhY7u1f/e3J/QoZt+VFE8ou12lY/hTr88U/UW8AiHfCtzb8ZT/LTf8lCqG8S/mGH8nuWpe/N0PX1F2k2IzqNnG9f7O7kd9kMe/zenXcZZ1jyQsufj5LmYub+jjtOZ2PacXDz9W8zFdsALD8Hi+qpbhVT4Tl5rxKJY3elpMpzZnfwhHcFGXy3Y2fIpa1Zat0uMBH4oUfveKDd+j5/YQNll/vVb7lyg/oskXm5F5K8WVf6p32MV740dM/Cc59Dh/cm8JythXCbrzlmPwiBmcnet7w/x/lX9a48Gb1A8jzjh8QPFVibqx9WubB9/9rvuVwfdmqbvnK4FouF+bljr48mMKUDcuLbrR8ymyeozMcbTn7skwOe2uvc73ivkvygS7xe3kV0fWy/JI/ryvB8rxQZtmeJH7LLA+IMyHchQn8RWNrbECyyQ50GvaVifoMyTAGyzMNXMGKLQX2rMwxcBVnrlYrCFynUp31Guas5owFm730lt0xZhQnhJ22JSmSIjnIWcSEtSxjHfOsZ2QDk6kxw2Zm2sKStjOyg8VpMJsmM2ixrN0sbQ9z7WWWfSxGnykMmMowJrGvbDSQ4tZIbMCYLVPZs4Aj0zkznwvTuTJHgaQe8Twp1ZByRz1PSh1YTgPLOROIjDqHcH7VeC64jOy625A7ZjDcmwJZ7ptD8ThQwhMLaF6OTrLkLaxeFp14xPPE8cCS+FJcQ0khj6BCTFBjKduZsJMJu2IcxbIxiE4SJCAxYhLX1ipuDDlIEqlEmEgeZgdGDjGLQ4ysmAkN0ST73OERiogJxaMj5SpIakg8EiceiXviTkNKgiiSUI8IohMT1G4LkG6ELRz/zgdkl3Z2KV+Rl1kbM4ZjvFlQD79AXxFMjrS2jTnHWOuU7DnZwpRP0bHnMyzMcs6yPihNRFQ3JSFnHWMQT0256hZhCKz9vzuTwaabAvw8QJ1oz9hGt0SHRIBll6EAGCEvAQQ51/AKgtCyyCg4tnEWpsEEAzSpnSTRkh0Hyqc204Zg1u5Qno6ypXZpuR2bQPYVSBaUBQIUgQF+D18wmiAWNA8D6DQwcKj36u3B0K1Lpx69julzXH87OkN2b5+QIFKUQScNOWWYCAERtwIALmErQwbkZ+Z2gHZJw/B3fPvbEQqlaWAdv65dYHiqhSEgoLw5Bf4HvquGDorQiwCAdMAcpHjTCwMv5fcVSlvCAOg6pGYKQIMiEmkAbClax9+z51111xtfLKOtzaZf7U/6013FFWUVFRSVFdcqainqKUYpHlfmLy8jgqJs2/nEF1wz7a2vUK2PFyhKK8p3qLnolt/zimQuYeQiWP5zxfcj7xit/0/9J3pYikQJYkXx5GDj8x/PSiAwi43ADrh2MSSfXh+a7oypk+uRz5DpjrumzbgnS7b7Hpj10CNzcuSeaNc7T7533vvNBx8V+IQFANDhvcN1QC57BYYiUkBSWzGCNhyHl9qP0xjAeQhxAVcwql5FOq65dznuNHAGM3iIKTzCHDLwGAu4g2d4jiy8wGvcV98gB2/dLxL3K5CLb/gdL/EH/kQe/sJ/eKf+jwJ1Wfmko318UKihM5QzfVCkEx/7oEQnfvJBqU784oMyTXELZUsflGuK24rtX1CJHbEzarA7dkc99sbeaMD+OACNOApHoRl34S60VL4EHxzRlTc/B7RCCLTGLB/1Mj43oF+08HEO9cl+Pxr+DRC3IYssieX8I2QYSicSiBjub1G0sFGJs1RQiS5FIGaI7RD3wggdtDVEjBhLR0pBboIDoEgknIZ24jAchLlpKE9WI/ySrE5yqEP61Qg0XYwA+K6b4x6/4bGw7FpLNLCoWacXj+Uo65icZAV0wv9g/qK1a+/ptkSmJNeyt+OS7MU0bbTOwCiw8Y2byrEZLdngAgM2rdTGwnAa9TUwuyUWY/jdeplHwDeS81iWTnKeWpDE+IA+GTXGCfMfp85F+3h4tyC8nxpXiVHcFWfJoZleGFEVR4wwOeM21siDx7x5HZD9mFKJjCClRCYmX4vD0mRHXKyAYHLt1Ve3XuZm2LoYCpQycIS99jSgB4zkuEKABrMJamFAsTDxzmnH3jMjZRkKT8ct2WyZtFhLw2B2jhH6qMxLE0Shy9693ptc+baB+dtpZ28Td6DiR7SogHG6iKkmLajt86QvKdDfbx3KePzrFl9mYtUH7HnRQc2KgQAj395kZRv/qJmmItcKPFdtY430ZuR1S3PWbJIlGeahAM2IGuyjfqOlQHkDQd5aqa2qtTGzCL7/0r6w9VmvQHBoDMob25vKDGmsideq9jVWNTWfdwlkkI9jZ5mr7M1oJq/9Q0ZLotJbxWRVqBxWvOQCUU8gCi2u/sWgyIJJIXo/ikpUNF5lTbJrdhc0Zqae+b8IgV2iDkJ2b57j9mZhYt5CM4Ve5CQBKXKntBe9DxSq4ROdKGZ7DhifAw4atwrXNtYGgdGv6n+l8JD75Fz2QRYfpVMsJGXuDLc1copPUsKVco8jSOhGDPCa9o19fr0+5XRidXHtYUyFNmeH/nbgWzi+1DC2Wf0aKwtupdXh2purKltu5mbaUzb/wJ/tDB595xokRQOCU3CuMIAylGZk4xAMhEMurw5vRFwEUuNbh7Kmgpb+0jWIzGWuGpeb4V2Xl0Slm+w9+kophiUqSycVTekL8FDapWZiu+3CqGDZaJifDgrPD/Jc2gpRwTkYliIsXKqSpLgZIANcJfPFnCqemYKR5Nropqo2iKKtMR0G2a2nS3otCUc7Ye4HqhlqNMjGyTfU1tL2OIQJjd5l6/OKtIVqGESF2cCCZKzmJfXJ0UPb4NznlNf6p5X4Kwi6b1xRSi0TSITurGUv+QS2Id4qiXsBvGRhlNP29E9jhcTOKcUnUdP5yyXGM4dhcgKqk1jt+5IQoiFxJ21hsK4ngQQpL4XAquMzSZ5RQEYhxkNwFGSLoR9LFzt24HnWKqqkmxfSXPeuYaCWuoYXrmEXNfkb4VzMd9kSyegY/Uihij2+t3qZ0xBv7JqjfATQFGECXGBQLygbZvhYYIdciw8KdG9ZtLBt2Gnf9Ud3eocCjINhtkoV3fyuppgiJEhqDAyLQrPApveRJYlBAxAtHlAYQOFw++P+Wy9zl9m6fyWJtfqe5htfpCxBgp3MXZZKH5ufcAVHD0PxQkjFvbWx3QXf6L2FWmKJvezyDaUqh/4ApynK93jIOLcpPMPUATwrD4YiJkaI5ue1axchmXYwmhRdo6TUTPrtaa/Jn8LDT/rb6SzT0DeTYZYDM60Lz+/OMP2eIB45yl1y/H6KMLy8XzkE26URQVzDc9PUq+MKThyG/lGIB7AindfQNzV/4XmlG+ISlQHIYzkKPID0f3lEWfPJTF3ZR7Q7U30gSD5QK+3xqwe1DXDb4Nz+TPGEDBLoQv2XA0f7CNCqZgBTzz2IhX2lI0gIPMOg6BiTYS/lIN3uQxuTOXScyqzkCKPaqmt011kgAXbUXNbyKQpSbYqy/HiDWqZtoFDstBLjBFKe2M/x9v4BNIKJQIRiiScyrtS0AlYyH12t+H9ALQ9rSrBPH0SNXBA+HznUhPV3KV7a3TFqO5KtH2m1rV0L+TvJt7E+kW0safRPVW2h1u0Yqt5Le+qhe7ZL1/Ey03V5/3DKDNY+8alw512dUVkNwrgHDUfnZDlkqI7nAvmaLru7exdcPci9+XdMed+7OABjliVpnDTmuajF3mvjjT2jhh9OlbmzWuSK52v1L53tYrrBP6ggNY3VoUZQH8RAr50dOCPZM/6CUZDQdgOViGVTTRuQUvRd7v0yDiXRov/+1svcnG+uO/yYogFJ/lf9JccQEY+gjKmKqs265pK+gZlZgoAQ/KakHBRH85rafiMsTReioDLOYxU1Okbjo0dJkznpFSKsDiCykB3vnQzIR506ydi7WUyiLoNhA9LHwha/ypgIpg1q5i5FAPGaUrdIGr2LJt+rMY4MDg7XPK036QppIcJKd7/UUz5N8dqlr7R3sSdoUJqG6Mi3sldQg4M5KbJwnMM8bWk+NevdUVsPF/dBBpDM12Kqrl/o3dneDK2Kpx7puNMTD6e2mae+0xjmJBB128pEfVuLA99epZSbFyQZi4PRpPbJxbhDcxoQMYl2oVszH+K9PCv05ofs/WJOa6KOCor3mGY5mzB3XH4JW7gYevTs0eee3JjeyR6+lbIo5On0op/uZc3miPJRg7JP/m1H3Af9eysofbtGodLPWpTkrVIXXW7JHZAqtjczHn5wAXHA18CGh1i7wm1acMlFoCMdC3Amoaaiqiird/MnF+Z7SyeQfLKVGamYsDxzD0wtT4qD9xspJa4vDKswRFaUXBJ1wl2Lh+ZgaK87jQQEnM+9CYO3g8D87seYFrJ6FO758bvaZN45wOs4ARlYReOQn1M8GqtOQJxHX21B2xkihgcxv4KkC58uBNfqsi/eUgk9KU5lwi67BG9y6nXdt/fSnqvfEGRtM2Z1NOXtFYGRLwRt8G133ySQByexjzOQqbwM/ZgvzNilNoxc8pALhi0NRxlVEufkJOw5Td9mxtU2j7ngXpCuDrV2CgGL33Npn8uellCLX7DycKn+7+r6sqr6N1J5yw8M/SlVwK89Ul535J9aqaiYpCueSSrm5BXftL8EKrYr/53m8Tds46XQ7QJS/3U32VMZx77M6Hj4cFBy7ZOKdQuV8mVfOedPUSt8m7yIMFSRwQyl2Tkn8oKLY7TrKZ6sY69mJgRK58qVL3RIdb9njIoYGVGN0SgFHcsCxdmrcbikh5pGNuVkD/cm4ThU3kdNdmOVjhw/kEKy1HP9pou8vRmWNDPKQR2fA0gP+fgwLJ+QE3HxMWoy+QCraHggFceiil5qGlmXVXCyf28KyeKAuw7SR54+DEuaOcWkSo4B8voJZcH66Wm4S9zf0wAMUjmjd8rDD240NcykhjGPPprqwDnoxDFqCq3vZkmFx59JjjmSDW2y/9f3Nf28YRTWnzuNJ9DrFz2m2UR1JKe7fyiRn8EJSi6m4qdUGw3vgTrfQAuGv5uVjZ6NMA6kfAoO+qeZPquALBPFN0MivOOIuWxiU9SLuHgK+uduoJa34yZhV+TgFepq5Ma0B2Uj5R+nh2Bjo5lchD2K0FJ9jR6Qjt8YVRMKzRoII3t8mnBn2oE0nhd30C2VCNvmVKN/SC2I36LlWMFPPZShtCAV7gEbO9gFCgP5FjdHVnt71LVxzwjQlP1MIkvkimRqTornrFqCHwrzsjXz0DED/yGPf93wE8+92rAt6ag6RbUDHglO49P/Uj8hY5rhqu+b1dlbn5JG8cjvlN8IE5qh8m87jJibmTbZ7Dg4QPrvPKWQdHxO6e1GJXYkGJFo5yhZ5ON3Vy+C8wjb+1ZGrsIJuUuKMHJEokia7uHe08MrYYUIC3xwBj7Ryi8cAlZ2wZ2XoVnEMH5wj9PNPX/zvpPz/YnzIIu3xULWcAErhhUpzApE4agljxc5BNxT3BcTaARPP2UP03wLexN3ea7zOE6NFJuU/jKFx/DCc+rgMJCFsXnhOBX31jPTGDHpWWm4AGBn+ftJ2ZrLWlYjWlZZ4jHb8NurW+5fG0y/eR2ePD1z76HsMS1hcYh2KhpGF1m8u/znUmLTuB/NzpNHeimx8Zl+KBUPnBWrZ+fED0RjIxS2OQl2i4bEmlZdw3JfzN7n5opwBOpIMJ1jZgieiitcJ7fhu685F6j+ikN6UTX5Wpql7qg3UtWBcgBZWm+t97DQgTjS8bPcBrrDhmp3ezDs3Lc1et/VrTul/5SqnYADWXtpwXkD0RouOx2HqYGcCyveXccTeH6RM8BIqh/L0jTbadJBdWGfIS+dw/345mNepiUzLLYmHCeiE63sFGZkXGEoSsYnGiirlBje/vnuWIjqK1iRDL/AbHcUjBrKYHtEmrFZp6kVikDtySbzzHRWae6XJxmZuB9f+UG9RQTKtehEZyVsIauKNa55iPnvZv90xN2hO12oRoQlbgjs9sKJpIEpdk0wL/nETnegpO74V3HscYJM+c6ZhFW3YN8qtY1yrSre+zfKHVGBLfdK7AhF0T8JMmUaKGnVFGjXsSLcTgS5WRokhYrFM13soh2xD8oI4x4+BfyjP68Oom585ib7KFc01h3v53FYsuaP/Zymb9M3OGrjLxZ7weSr+GEUfJhlmttXQkQioYjZSG+tNZ8fTEcFRJZPlipdR46U405UkEV2DDblVADvTWEP8RTH//fzNVOSOhwi97ysDXpwr5VsVIH963Mg01WvfQ/NtVyStfcfvEZcJCS7K3RuLWa4PR0+uZd0LIoIJDlX/WRk/bXbvYB0QUrpI2jMJJlfTby+NXqwk08eHN0v8zyuC3aLzQ4eg+cL19hDvOmfAR5r3E/TQjmTK94sXetxZK6HvNPlnER2dEhmNFZp4EDqQDonnBUQHJRMWgFgzJvesKhHfUnOIa6nCD+Ty7AVw4wbq2YYmkAh3cJfgLI0ztr6UgpNkP5VXv2PRA35EPl0yVwRriVdbdx+vOXDEA9DcFKoIXmRbqSytzphO6rms7yjz8CDtVSV18qnGWmchhMDlRj2Em3eDnhKrimzxCLkms9a3veG3RGZlsKMCUEJfkEN2n2zAsPBC0a+kqFDqISYTY3/TKulxBhVi9ZxG08QN/DXd9x7Y4z80soUPE75V24dl19IHLzS9rAc3SMlBu82MJJrBEiYiGq9tto19p4IDr+a9zkLpHGq9zhovBb2BOMnVf624OdtfB7PPGdeHmfECkuEKAH3tvHTYGX7g3M2S5VWIXHy9eT3o4XyNqtngN/UItfkqJjtWVC2GxT72b5hsv2PxhbntT/GeINeQRlXr80h0n1TqVlAwohiViBLL/AsZZGXYpWQZSscB0tBAXErNfpPcgM5TserbUWkXVPkFH6AfynQfmL/bboZEt4uJzq4S7Xkyeq5SpyN79XmqPHeEtrky7ULZXiC9Kfs+uWWDA6anpodvBhew+KPz9wrvOn1X37sa9aF+sv13DyxhOy6VHwYQGPQdG66IOy/78ZiJnlwNyPid3IjOVnbuVlaaHck/jYuIu6mh4sflrChWzNt9w74J1Gu1c6Wt7maOGLvtRw/D+I05W+pDf+Lp8BxU0sfU3Pe7CJ4BV9e868w8gbvVuxY9GVNwXsBlF2p46ZyktKLs7AygPpMrMSRcePj++pWZfG/0uPKR7965xKZxB1h0BQ5eQLo2YUV6SgPnc5khwuqbphW7TBZKZMuvuwSSod+9ygm8uBlRPQ1Sso40NJb6pTweDqYz/KvcCT449vRZlfkmvXBmjzIyHys9FKX9QqXEPcSvJ5xixmZT0YZkfPcuvyBQlxLnh6UPcLIfAp7YfXPEw82kwe7+NGDV+DsBXxCt09u+48j1B1A79w3JaW7cHFV52Af9ZUq9toQuYK0oo+6ZvA0bOjI7Nn0Tv2J9YP7SF2k/u7AG+OpafCc/fz4xfr7jc7i424bxG1ybsH7JmW5JrJs/R7vuJ9yzU9kamB957tRrn3emFStUGB4JgyYvwaPCkZUO4Dxe1qY4NCZMKnaca593gQoTo4yn59sfZjU/rAF/q5JkK1JAOXhJyW31twGUbD8+qr8LlyChgapWfQ+6QuvJ4BpR3d3DXNFzqjEVcxMBDTX9IqblsGoB49PctoPSZFMJWe59wvtUYP9LtO1z/KgTxTE9KQdPOwN+62lBZ3F9OupCcRl7FqyOrmbOwKi4L3ppaO4EfcvkC6JBfXbEOV+DYG4B0f1Wz7cffQoDsAt2VZf4W26O2qMknI9BhyfrO7rLgFEDhrLO/STXafDbyz99TavEPfim/O9PYACwjPccREx9kjy4gY3rEuJis4FawXB0WL63cwkYhi7p/rtEHG7oJMfmVo4jqvxyZeUcxtFEkRJULMfaqLEH7X7sbuyGQcS7Tm23+G74DpeUuItmnBbm+iLORlEFz47SxshtCnaDOvLvIqs25n4CM6t9Duk6/EwFAluC4mu5i2NbNgvlhzWBbEM3b5u6ZIuXqpMu5eTv1s72m7Glaj5C7lGRbHdxQJfSJe8YGzvAxsFqcES0q2keGIcu+Wviuti6q2SvyPx501yCJry0rT3DfUoa8VpeKhWvlDglpk5iL2JKl+rSzhWdkRAlPg3BeA2HNVu+3V3ZRO5Ak/8wb0HUoKR4oYzuBZV3OKfiZ4UxVyzNOYWVhKdOPYkzYsk4o6ACJaGmZNaw2sLZm5s4fS54FHk0gwy3lqsB+OCuqNHspCODk+s0mgmXaae9XNcQY5T/G3mlhpnfPHiOLR/L07ZH1nHlyED14QKU90+fL1lF3wVloa5XSACab3dknG5pRewLypxkLWqPXkHt+H6GcFgzNXh6CkbR35uC+GJWlMkfRPujMReY4U6x3qgHuzVTKuUEjEntUDae7dMXvmRUVyHy2+qX9JOJAw6BV7767LMc9HFUud/OdUS/Obq/z8VF+McdKnU4Q9WFae7lvm54rlhKEWXHh1X6E04ELWufuc5UVQnc2ZcfKE3LiQuL0qOwP5t0oKj+dSbGYnEOPZKcKeLuPpPOkAQl106Bs1d4CQi2VSENvjjJhxe50jZU9qMc4iJOVhdZTGC3VIUQ7rdD9+wB05P7MO1SLRIOU9O1OcX3Drrc8eQZEOUhbb6oTocXe0i0CmoxnnE+CPYhKttaQNeTTQbZMc32wDIJkfUNGIlc5hYzRHmq46rf7KinqWU/D7ShTrQrTFcfQqQZYDPIeSCdDd/pBuxXFI3OkqPbm6sJ4eTvWOrr5mHEX3o+SRuGAanyBAfT1RqDytntVXJV6RLJsNaN0hQzMyVAtg12jzdIBTUwMwIaT4vXXJelQy3A1MyLuMGXDXLPxM5Joo6e3ADyfCglS5xkRzQTssUV+5v+z7o/lfaa+95ZXGtArae1hDsawOJSq1xhQdalVS8TdprWyXVVquftGqtNF5bAV9OrMl/dnIlVebKUOWWyoVzKsvhKrRzpQUbptav/pxNmSG0Dbli1a/scJLtZlftRObwqrPwvsZdtuaAdNkmG+5OuTp5qUJYCG7eUfmZ3yd3x9KYm1tBFSubo6/8TWFJy9rVWzbqvv4mhtIXxWsnXXxN6cUqWgrfkYECtyV7BwyxK7hvzlVA5N9zBhu5CosKdy85h+mxKjRNFX4hA+J0leamsMYdpZ/5x2TvWhmJ5VRQOWWP6Ss/yd3Z5hHgB2b3Gez2S3OFKJlIEI4aHjiQS6h0RTUSYm2XpotwDBHkfNhad8/+g/4hPB8Y6utkVImfk/1lsbnZDferih1bnL4O79LdUVOErHsfiGdPTxxZofpOpPYhZkXZOLuIGarCiJsZzYoR37Qo2vQiY2XFjepjgcJMd1xLvrLMXqITxZFNcDpE7r6g7pDvDUK+6YN84wEUtl7+qeztVtmmJoV/pW9K/DpP7sbnp6mDY0AJ8Ij3xiG4vkMsbeXf6rJNsE87dCz7LL6Kc5ObcoNLW7JX2NLt+dWHFf2iopqKUsIrh+JFeBzlxQzUhpYfr1hpzzzMK7WU8YyNqC5J2foyghNufLclIQhH4YfJZQtiCewIo9vNcUE4Gj9KLp0H5UzZpuonL+7+KZGkJX90t0Si1i6dsxo6OyUSd8gf3SmRRHpzdwpobFqH1Mj2vcLInBrJ/DUCut9O887dc/P1ZfWw+1feXEBz+NtrxtVhINvuS07XOwTWqHKnkydNj2kaGCp+2GLNtwjBB/bpGV/PAFYnNSj7eIxawuYidAe/eMW8MkxNzqxOxDloJIrjz7B0C+bYGCiwIj9Q6rd3qUnUsL1M9kgjS23p/u0SFQwjV2HMBmB3OrCn1LNffNHbuondvPh1TGzzWKjefHrWduya0a4qXIaPPGJ30T0EE3eeNKFi3NBOriwBsq2ehwNyRSll8v+z+RRTcwddopeifO6ejMQdTDmLxrDps5EkwVmJW8voAmkCmz4XxTqukbi65OVy4yI+ieQuFzuKX5a8seRx6No4MEawFPdag+hz2NjJLiIgNgG7kyJGE7tDIXujFMXclgiz3/K2kcEIPpGSgRJwVhU9caejJitZL/6go65cicshwm9/jIkL7DoZO6JGjZRvXQfRMx0tfADJnqtwlJiSvPna0/H6eTwEFrswl0xVZkba/K3oZGIMG8+3E/AvsbPSHt2IzJUzf3fPTiRNhO6wKqDZWAEUkKrSKOEbdN0sVU1VaO4shr3CZm6BrYBiaEfR2ayniyvTSsAQeevlt2jvPUwUgYa+ZLFkSTFwJk/j0NZWX+SOUqqQNxa2NPogD5RRluRrucdoq7qtxSG3XeY71O1tYcOSvYdUjbt281Ht5hjpmmjtpg6q+A8VqVoVaGswEER6bvC0YRoL9b/qgIXJQj0wovqrUlEsKkgm+VATapK+Xy5LBIkoXzPQQc57fCynt4XJOzcxvFvikpOJ4miSOyWmVid6I04jhQ6nZaEYVJUYXLtNR11L23G/N8uniGQPIPc7vN265gjIvNLyFdJtNtBHyokRsnsT7ZTSCHNSq50fEZrfhnItTA7PDnP1n4C4I/XrPeLF/4IpdnHl4y9RZeIgdmUQjs7CHm3et/+2wf/oorYWdBukyeNswqc/vJrAQZ1kMW+mgR9zVjULPjQ0+NnO75LK8QqTgNWzV4pw6ySrjmLA7ZyeqsbFuPUaq5qiz+2+d83kNN3NMMIUmRPCcI4fzZLqYxxsiKyQMJLtBYY9zGDrVn8vd8eYCFYEy8Ml0hl5oKwwnssp4Hf9uDGIj+Oz1zmdnJFzA5E+jrbSVb/2b+5f/NavyhmbmZ6CoDBwUHOXJ7m/018z2C5b27Lv4T7Zml0G/H5zpbhhtxlYZ5VgTrJIDSebxZl5Z8RakL//ASkWCRZgJt6JoywSG2on3gYcI70G9y0qMcTJM4vuKcRtnBafcbTm7vKWSHo8u8dufHFfi45Q7cj/KEjBepNXkalfI0lE+keg8kPp/LZyQ2zGMFPZHmOsGY7Pkf5ds44tUQEKosFtqz/BXfjwkjPOSC+a/BRYLgnqGiNis4P+E65KAIUX67gp7Ni04mgM90XMV4d42dG3RwPiUAvuP8mqpLm2/WAezNkZVF6pGaZC73g7dhyfROFGWnUBJmHIp8CTYeevHlhRvSfG1WSXu7ajhms83epgkCX2J3JrxMvAEMTj0BnnbbY9pwW4HPUcpxfRj/x36vEiMO2YfnZxDtgPlQZy7Ib4YjX/nBhFwajdXsm0reciTkH9ycZPufm86HM03VJWYFqSHzigpt3Gajvy8mP3DVbroxYjHY2Nn25AXGcY05Fm7GC/+9TOEKK3aUczwy3Hg2Hh4wSarwWDa7dGsByluproL7LSiXH8nM+fYpfmf1/IzcT1ODQUiwLqPldqBd1J9rE7uV2/aX5Xde50umbwm6ldyb2kUnz5Br+HU5A6JiRSSKInCudB++XhG4qnr0upbwXo2J888HzRsnflv91wC9a9svRFjht9qjKh9E5IOuWKJNWO39hC+ZJbjA4jZ+Wrb6GiW9GJlFvyTitXUXZuO1FFz9zmeGM0+FsTnubb8wljBb1rpyTTC4mpeYUxlivsvyQt6Cyk30hLJEaxd6I7XSSxq3U4QD0jbxg34+NLxARrdC/JplzY6IeOYGGtA2VPSRMpj5h4Aksjja0VgZ8ibJrj6UEtftLszhNvUdu4kXfY+DsyRvf4mj/ff6LLNXk54CkDkD5I5LPY4mVBXLcB9OG74n01FboZxYyeUVwD616Zx6GzkRs9Tz6dI5LQiWTjeW4uP344yY0eFJXmRvSRS0P3pOhqX9OJQIloIkzF9djcD3IWGi+2/VOsauUq0qbtTUYhWJcUFVHiTeSSLs3LjEmQ7EsjOoJxIenCG8lhfaVab+JovXrNf3Awyp1l7usI6npfORUorOdEdx3BlWAHAndnHHJMS3awjoi0Q4fTEh1sI8I9bPe6qqiZG1i57NLZqGZhBFqvF5ih8dkua+6IFrbYEgrB8RRmSFKhM5J7EaCNWu1XhoGspMDLWFgomy2VPcwTrloAzgNJL+PoCql8yYwhftyqF0CS9TSJKJUq4AWIOG7K84BV/Uwia2RrVhwblm5c+9WnxpfOqZephGhnfYHWf8kuUWH2Vv7Bh2XIDmEhjta+AXbAkDuZkfwiQ+CYVQc8L9ED8UkMawezwFLo8Y+ytb9pYdvLFRE0Y4oBMzY7O5xwJRKVSK3h8jFoEX/aufLXKZBIPC6d1y+R1LmXpSX7FjlUrlDqCFjliVrRveuqFxMkkqKk8qJhr2ehimyNCjgxtvd1SZd0AttLdiTWK8J1ABmgLGV9KZXmsG2h6BVWWmLZP5IueegS00DmpY6A5i+fNIndXrGhHFdexOLvqCrRz60Vp8h0PRrtRMHo9AY3gdjrOdEvscPDjZPsvn/+CLIyEZOo/Qs5RAVwXfhxmWxvmcE3U8PIEOWt0ZVSa4jYFoqWkNIiy35OuuRRvcENmZVCaMpYZe1OJpUXxbv4mBUjndpWu3G9U1SImC83KIsTKH1q9kIvskNhEufWtd8ittO7/KB7biGll2zXRZmS5zXeILCZ79Ljs8fCVjLTcdopZh0rnt9//HTeZ1XK8Gc2dhq/99ip7VtwoieRRchfFgxRcIo3kUmWn+KLYOlGtpyQsdFfMt1vRU/D+g0cxBKe++fouffTmsouoJ8dXXJfKtNS69g/B0LSsnAEObG/IQNFobJUkmcl0LxDkY6dFVXXSVt/UPc9rLq8kpXB/I+we2Fl5oMCoyvIQeT4Ey3/4PI+RqGhxE3apwdXy53RHsutFANNtxR7e2f/3cbQOjg52D9ZMSSZ7ggRJpSwXKMgLRxN+LenJhHcZKI0huRBSW80clTH/jiwPSkWRaK8mMtntXXU1ffZ7vey2nwBtdNWyze23aJutNvVMUptm9keuLjfdL9jUHwxOYycMNCdjlJQ1iCjdJtE6MzAix+3sFIebHA51GaJ95yQvGmTuZ/qXlsnis6FWgfB4Y76cdma8dCU/x8fubn+x6H/iVV8xub3PwHW4v8DgIqvdERahyHE9aXgbljnxv/837uxaQVWxk0bwaybmhuAdbqY9zrMvrnx0FD19gvgTvPGbsHYquV3Dkp2KzJ6hwxYXI+O3shA609g+pV2T60Pge812lty5TowKpsm4KoNoV9V22lUpZR13dpxIw8e+wCRjF6RvRHdqFN71WNqn3pc7aeBkSjAA4TjNWCEXgto6pk5uv0wl/jr5LKGkNZNA9v2ulHaUpoOrTPi26X84W7ozrvaAXVD+kUyl7iWF9gQqZr18tkcLdZckpS8wJxxt41IO2n7CL1W0DRgju7ippImG5QUKbc9eYHN1tXs0Mu7qZM5un02l/iZF9jU3L0sOkv6I/TMAxRFN5+7UJTcOOeV3Ulyel1VJ98o9RXTNdSY9rnGnemCakwmmcZpp1XzAhVQYS+955Zf9Oi9Quo2bgo5kL5ZpfVoGTe4NhvSddXGtSEH8vxriN/B5XmBKl0HMd1WHehQpoN7MTkCqnVdOKRALl7gJRCOxWZLIga8dgf0/wcy7dr/AVDJ93a0DNK4toCKy4CD2lEyThFTN+yHyCgg7zf7DSfcj5aZPzbP6u6FVT2UNUzafLhrRmrr2LcIVJfkkFgANPO9bNzn1Rv7mzmorOf1nxIrR11Lv3zUDsJNWN4L+vw8o72mjbVbmtKL+oc5rreX9t/mGJm+sosRIzkBSI+u1IGnk/L8V1dKjct/9OmpELV2oP6a1+0GpNdXByiRDsaA2A5B6HgnnfhjLV6v9WnZDcj3rpTE5u1kUzWQuaqEsgzXlkNxpT7R8p8eQN4Xo27Pu3F3AejFjOZ5SvNDj9/ntdqSnRmsHRhvypp+fhsvFiD16zEvgtxR1QD6ZC7DT3yhPlX67rxqZR/StvMDHsO7WrkA/PMDX+NUDoUFrNYp0rmmPz6GEHSHAQEg9th87stPo0vF9vydJrMOAAAm/8RTAwCYbda/+1vjv1m66bpIBDoCzQwB6k1rLAD61rP2f/DdAL0pnOnTqOGtAf3j9pAS64FuzzZVM6zLl8kcNV4LtJq3Y/2kkH42pcNTUIUxbWUp7WpkuoSdY29KucIf+AtS2AEyIhCGZujMqqp9oNIG0jj+zYVpfdOkaY1hnSsC9KZsTtRzu6eUqKlkd0WSsKVSG/Gzwv5mSShrjHrrlF3aMh2sjTbdxdaXtGuFNUOrOq2rPj2Tz6/+dnT56HK9zYM6padO5EOXyfLQdH7aNQnDiMUoSHoPM126tpePlSXLoAIdrLX0+4SocvGksrSyfbS5vYr4+IviS8LyiEJZc3dlLP3yyaOKZNyPWVkMUOuVdMuK07gldD6XNpYyOUbS6cSn9mCN9pkSWlI08VswoH3OtzJiXUX5MSvwawXd9iZ/1K0sDCNPllU8R4bLY4BD2UtfVvMYdf7oX72rzdb0l5z7S6E93mwJ83rMSuxcne33TPWXno1yF0Y/sTlqdBGD4UWgZYzk/upgskrV+ulOsVppVDeFpZagajhXHL0S0qzMvGi/qK3C2K4kGY6TTaq3N4RPWZjKuhcZ9a3WQKuV36pT16eM9Luq+0iqerfWuZtmd+XWXRGjPF/6S17ly6ri9ZW9wxUhajm2FveXea8JUlZo+Uf5qpGEAjaDCXWUwQv5KEc7UmK9FrYt2Xfux7NSSmdby7FVlEJIQsRSbaMMn59tJ8cyqci2kG2fJLJ1TELUOm2ijBUn2zaWXwIE4LMykuyRs20F4AACsT0KBIDGF4aKDgCuYD4RYXEFoQaeiMmK6ZB0ItlaZYJSU0c2lcPWNF1CYeJFCODHXxRF22yxdTEUGRJa4GA+pzYWyoua0CkQXG0tkJGZ5yNy9SLE+Im9qbEm5AlECWM8vYdgAbxq7RW9tJd6kQIgQ8eA2ojtdtk9VPtdriNVhxKjhNGyeaFYodbIC+Ph+VCjEyP42dzNR+jAIrIQppSoS585myhVN07cAoPln9d7C+TtAgAAAA==", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYWRkXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgMTNoLTZ2NmgtMnYtNkg1di0yaDZWNWgydjZoNnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImFycm93X2JhY2tfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImFycm93X2Rvd253YXJkXzI0cHgiPjxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0yMCAxMmwtMS40MS0xLjQxTDEzIDE2LjE3VjRoLTJ2MTIuMTdsLTUuNTgtNS41OUw0IDEybDggOCA4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYXJyb3dfZm9yd2FyZF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDRsLTEuNDEgMS40MUwxNi4xNyAxMUg0djJoMTIuMTdsLTUuNTggNS41OUwxMiAyMGw4LTh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfdXB3YXJkXzI0cHgiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnJpZ2h0bmVzc182XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4VjZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iYnVnX3JlcG9ydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjYW5jZWxfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoYW5nZV9oaXN0b3J5XzI0cHgiPjxwYXRoIGQ9Ik0xMiA3Ljc3TDE4LjM5IDE4SDUuNjFMMTIgNy43N00xMiA0TDIgMjBoMjBMMTIgNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX2xlZnRfMjRweCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9yaWdodF8yNHB4Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2xlYXJfMjRweCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJjbG9zZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjb250ZW50X2NvcHlfMjRweCI+PHBhdGggZD0iTTE2IDFINGMtMS4xIDAtMiAuOS0yIDJ2MTRoMlYzaDEyVjF6bTMgNEg4Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDExYzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTZIOFY3aDExdjE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkYXJrX21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDNjLTQuOTcsMC05LDQuMDMtOSw5czQuMDMsOSw5LDlzOS00LjAzLDktOWMwLTAuNDYtMC4wNC0wLjkyLTAuMS0xLjM2Yy0wLjk4LDEuMzctMi41OCwyLjI2LTQuNCwyLjI2IGMtMi45OCwwLTUuNC0yLjQyLTUuNC01LjRjMC0xLjgxLDAuODktMy40MiwyLjI2LTQuNEMxMi45MiwzLjA0LDEyLjQ2LDMsMTIsM0wxMiwzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImRvbmVfMjRweCI+PHBhdGggZD0iTTkgMTYuMkw0LjggMTJsLTEuNCAxLjRMOSAxOSAyMSA3bC0xLjQtMS40TDkgMTYuMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJkcmFnX2luZGljYXRvcl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTEgMThjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yIC45LTIgMi0yIDIgLjkgMiAyem0tMi04Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMC02Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNiA0YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJlZGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImVycm9yXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9sZXNzXzI0cHgiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbW9yZV8yNHB4Ij48cGF0aCBkPSJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmaWx0ZXJfYWx0XzI0cHgiPjxnPjxwYXRoIGQ9Ik0wLDBoMjQgTTI0LDI0SDAiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNC4yNSw1LjYxQzYuMjcsOC4yLDEwLDEzLDEwLDEzdjZjMCwwLjU1LDAuNDUsMSwxLDFoMmMwLjU1LDAsMS0wLjQ1LDEtMXYtNmMwLDAsMy43Mi00LjgsNS43NC03LjM5IEMyMC4yNSw0Ljk1LDE5Ljc4LDQsMTguOTUsNEg1LjA0QzQuMjEsNCwzLjc0LDQuOTUsNC4yNSw1LjYxeiIvPjxwYXRoIGQ9Ik0wLDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJmbGFnXzI0cHgiPjxwYXRoIGQ9Ik0xNC40IDZMMTQgNEg1djE3aDJ2LTdoNS42bC40IDJoN1Y2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZ1bGxzY3JlZW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZ1bGxzY3JlZW5fZXhpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJnZXRfYXBwXzI0cHgiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ3JvdXBfd29ya18yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNOCAxNy41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXpNOS41IDhjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41UzkuNSA5LjM4IDkuNSA4em02LjUgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJoZWxwX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iaW1hZ2Vfc2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTggMTN2N0g0VjZoNS4wMmMuMDUtLjcxLjIyLTEuMzguNDgtMkg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi01bC0yLTJ6bS0xLjUgNWgtMTFsMi43NS0zLjUzIDEuOTYgMi4zNiAyLjc1LTMuNTR6bTIuOC05LjExYy40NC0uNy43LTEuNTEuNy0yLjM5QzIwIDQuMDEgMTcuOTkgMiAxNS41IDJTMTEgNC4wMSAxMSA2LjVzMi4wMSA0LjUgNC40OSA0LjVjLjg4IDAgMS43LS4yNiAyLjM5LS43TDIxIDEzLjQyIDIyLjQyIDEyIDE5LjMgOC44OXpNMTUuNSA5QzE0LjEyIDkgMTMgNy44OCAxMyA2LjVTMTQuMTIgNCAxNS41IDQgMTggNS4xMiAxOCA2LjUgMTYuODggOSAxNS41IDl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaW5mb19vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxN2gydi02aC0ydjZ6bTEtMTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4ek0xMSA5aDJWN2gtMnYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwXzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTYsOVY0bDEsMGMwLjU1LDAsMS0wLjQ1LDEtMXYwYzAtMC41NS0wLjQ1LTEtMS0xSDdDNi40NSwyLDYsMi40NSw2LDN2MCBjMCwwLjU1LDAuNDUsMSwxLDFsMSwwdjVjMCwxLjY2LTEuMzQsMy0zLDNoMHYyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yaDBDMTcuMzQsMTIsMTYsMTAuNjYsMTYsOXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF9vdXRsaW5lXzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48cGF0aCBkPSJNMTQsNHY1YzAsMS4xMiwwLjM3LDIuMTYsMSwzSDljMC42NS0wLjg2LDEtMS45LDEtM1Y0SDE0IE0xNywySDdDNi40NSwyLDYsMi40NSw2LDNjMCwwLjU1LDAuNDUsMSwxLDFjMCwwLDAsMCwwLDBsMSwwdjUgYzAsMS42Ni0xLjM0LDMtMywzdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJjMCwwLDAsMCwwLDBjLTEuNjYsMC0zLTEuMzQtMy0zVjRsMSwwYzAsMCwwLDAsMCwwYzAuNTUsMCwxLTAuNDUsMS0xIEMxOCwyLjQ1LDE3LjU1LDIsMTcsMkwxNywyeiIvPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGlnaHRfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsN2MtMi43NiwwLTUsMi4yNC01LDVzMi4yNCw1LDUsNXM1LTIuMjQsNS01UzE0Ljc2LDcsMTIsN0wxMiw3eiBNMiwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMCBjLTAuNTUsMC0xLDAuNDUtMSwxUzEuNDUsMTMsMiwxM3ogTTIwLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwYy0wLjU1LDAtMSwwLjQ1LTEsMVMxOS40NSwxMywyMCwxM3ogTTExLDJ2MiBjMCwwLjU1LDAuNDUsMSwxLDFzMS0wLjQ1LDEtMVYyYzAtMC41NS0wLjQ1LTEtMS0xUzExLDEuNDUsMTEsMnogTTExLDIwdjJjMCwwLjU1LDAuNDUsMSwxLDFzMS0wLjQ1LDEtMXYtMmMwLTAuNTUtMC40NS0xLTEtMSBDMTEuNDUsMTksMTEsMTkuNDUsMTEsMjB6IE01Ljk5LDQuNThjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwYy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MWwxLjA2LDEuMDYgYzAuMzksMC4zOSwxLjAzLDAuMzksMS40MSwwczAuMzktMS4wMywwLTEuNDFMNS45OSw0LjU4eiBNMTguMzYsMTYuOTVjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwYy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MSBsMS4wNiwxLjA2YzAuMzksMC4zOSwxLjAzLDAuMzksMS40MSwwYzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxTDE4LjM2LDE2Ljk1eiBNMTkuNDIsNS45OWMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MSBjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMMTkuNDIsNS45OXogTTcuMDUsMTguMzYgYzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDcuMDUsMTguMzZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpbmVfd2VpZ2h0XzI0cHgiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIgeD0iMCIvPjwvZz48Zz48Zz48Zz48cGF0aCBkPSJNMywxN2gxOHYtMkgzVjE3eiBNMywyMGgxOHYtMUgzVjIweiBNMywxM2gxOHYtM0gzVjEzeiBNMyw0djRoMThWNEgzeiIvPjwvZz48L2c+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Im1vcmVfdmVydF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Im5vdGlmaWNhdGlvbnNfbm9uZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyIDIyYzEuMSAwIDItLjkgMi0yaC00YzAgMS4xLjkgMiAyIDJ6bTYtNnYtNWMwLTMuMDctMS42My01LjY0LTQuNS02LjMyVjRjMC0uODMtLjY3LTEuNS0xLjUtMS41cy0xLjUuNjctMS41IDEuNXYuNjhDNy42NCA1LjM2IDYgNy45MiA2IDExdjVsLTIgMnYxaDE2di0xbC0yLTJ6bS0yIDFIOHYtNmMwLTIuNDggMS41MS00LjUgNC00LjVzNCAyLjAyIDQgNC41djZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icGFsZXR0ZV8yNHB4Ij48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InJlZnJlc2hfMjRweCI+PHBhdGggZD0iTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZXR0aW5nc18yNHB4Ij48cGF0aCBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE0IDEyYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMiAuOSAyIDIgMiAyLS45IDItMnptLTItOWMtNC45NyAwLTkgNC4wMy05IDlIMGw0IDQgNC00SDVjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjUxIDAtMi45MS0uNDktNC4wNi0xLjNsLTEuNDIgMS40NEM4LjA0IDIwLjMgOS45NCAyMSAxMiAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyLjAxIDUuNUwxMCA4aDRsLTEuOTktMi41ek0xOCAxMHY0bDIuNS0xLjk5TDE4IDEwek02IDEwbC0yLjUgMi4wMUw2IDE0di00em04IDZoLTRsMi4wMSAyLjVMMTQgMTZ6bTctMTNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2LjAxSDNWNC45OWgxOHYxNC4wMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJ2aXNpYmlsaXR5X29mZl8yNHB4Ij48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0id2FybmluZ18yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiLz48L3N2Zz48L2RlZnM+PC9zdmc+Cg==", + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/index.js?_file_hash=62538f61": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIHZ2ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHkseHZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGJ2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHd2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxTdmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsTXZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFdmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpRXZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pnh2ZShlLHd2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIFN2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPWJ2ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP3Z2ZShNdmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBIZHQ9SCgocF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxNZHQsRWR0LFRkdCxDZHQsQ0ksaEcsQWR0LFBkdCxJZHQsVHgsTGR0LGtkdCxSZHQsTmR0LERkdCxPZHQsemR0LEZkdCxCZHQsQUk7KGZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiP2dsb2JhbDp0eXBlb2Ygc2VsZj09Im9iamVjdCI/c2VsZjp0eXBlb2YgdGhpcz09Im9iamVjdCI/dGhpczp7fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZSgidHNsaWIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKG4pe2Uocih0LHIobikpKX0pOnR5cGVvZiBQST09Im9iamVjdCImJnR5cGVvZiBQSS5leHBvcnRzPT0ib2JqZWN0Ij9lKHIodCxyKFBJLmV4cG9ydHMpKSk6ZShyKHQpKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG4hPT10JiYodHlwZW9mIE9iamVjdC5jcmVhdGU9PSJmdW5jdGlvbiI/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOm4uX19lc01vZHVsZT0hMCksZnVuY3Rpb24obyxhKXtyZXR1cm4gbltvXT1pP2kobyxhKTphfX19KShmdW5jdGlvbihlKXt2YXIgdD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24obixpKXtuLl9fcHJvdG9fXz1pfXx8ZnVuY3Rpb24obixpKXtmb3IodmFyIG8gaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmKG5bb109aVtvXSl9O21kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iJiZpIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGkpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO3QobixpKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ufW4ucHJvdG90eXBlPWk9PT1udWxsP09iamVjdC5jcmVhdGUoaSk6KG8ucHJvdG90eXBlPWkucHJvdG90eXBlLG5ldyBvKX0sZ2R0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSxvPTEsYT1hcmd1bWVudHMubGVuZ3RoO288YTtvKyspe2k9YXJndW1lbnRzW29dO2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiYobltzXT1pW3NdKX1yZXR1cm4gbn0sX2R0PWZ1bmN0aW9uKG4saSl7dmFyIG89e307Zm9yKHZhciBhIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkmJmkuaW5kZXhPZihhKTwwJiYob1thXT1uW2FdKTtpZihuIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIHM9MCxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobik7czxhLmxlbmd0aDtzKyspaS5pbmRleE9mKGFbc10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChuLGFbc10pJiYob1thW3NdXT1uW2Fbc11dKTtyZXR1cm4gb30seWR0PWZ1bmN0aW9uKG4saSxvLGEpe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGgsbD1zPDM/aTphPT09bnVsbD9hPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTphLGM7aWYodHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZT09ImZ1bmN0aW9uIilsPVJlZmxlY3QuZGVjb3JhdGUobixpLG8sYSk7ZWxzZSBmb3IodmFyIHU9bi5sZW5ndGgtMTt1Pj0wO3UtLSkoYz1uW3VdKSYmKGw9KHM8Mz9jKGwpOnM+Mz9jKGksbyxsKTpjKGksbykpfHxsKTtyZXR1cm4gcz4zJiZsJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxvLGwpLGx9LHZkdD1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihvLGEpe2kobyxhLG4pfX0seGR0PWZ1bmN0aW9uKG4saSxvLGEscyxsKXtmdW5jdGlvbiBjKFMpe2lmKFMhPT12b2lkIDAmJnR5cGVvZiBTIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIFN9Zm9yKHZhciB1PWEua2luZCxoPXU9PT0iZ2V0dGVyIj8iZ2V0Ijp1PT09InNldHRlciI/InNldCI6InZhbHVlIixmPSFpJiZuP2Euc3RhdGljP246bi5wcm90b3R5cGU6bnVsbCxwPWl8fChmP09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixhLm5hbWUpOnt9KSxkLGc9ITEsXz1vLmxlbmd0aC0xO18+PTA7Xy0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gYSl5W3hdPXg9PT0iYWNjZXNzIj97fTphW3hdO2Zvcih2YXIgeCBpbiBhLmFjY2Vzcyl5LmFjY2Vzc1t4XT1hLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKFMpe2lmKGcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoU3x8bnVsbCkpfTt2YXIgYj0oMCxvW19dKSh1PT09ImFjY2Vzc29yIj97Z2V0OnAuZ2V0LHNldDpwLnNldH06cFtoXSx5KTtpZih1PT09ImFjY2Vzc29yIil7aWYoYj09PXZvaWQgMCljb250aW51ZTtpZihiPT09bnVsbHx8dHlwZW9mIGIhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhkPWMoYi5nZXQpKSYmKHAuZ2V0PWQpLChkPWMoYi5zZXQpKSYmKHAuc2V0PWQpLChkPWMoYi5pbml0KSkmJnMucHVzaChkKX1lbHNlKGQ9YyhiKSkmJih1PT09ImZpZWxkIj9zLnB1c2goZCk6cFtoXT1kKX1mJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZixhLm5hbWUscCksZz0hMH0sYmR0PWZ1bmN0aW9uKG4saSxvKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aD4yLHM9MDtzPGkubGVuZ3RoO3MrKylvPWE/aVtzXS5jYWxsKG4sbyk6aVtzXS5jYWxsKG4pO3JldHVybiBhP286dm9pZCAwfSx3ZHQ9ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT0ic3ltYm9sIj9uOiIiLmNvbmNhdChuKX0sU2R0PWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdHlwZW9mIGk9PSJzeW1ib2wiJiYoaT1pLmRlc2NyaXB0aW9uPyJbIi5jb25jYXQoaS5kZXNjcmlwdGlvbiwiXSIpOiIiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibmFtZSIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpvPyIiLmNvbmNhdChvLCIgIixpKTppfSl9LE1kdD1mdW5jdGlvbihuLGkpe2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QubWV0YWRhdGE9PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobixpKX0sRWR0PWZ1bmN0aW9uKG4saSxvLGEpe2Z1bmN0aW9uIHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfXJldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKGZ1bmN0aW9uKGwsYyl7ZnVuY3Rpb24gdShwKXt0cnl7ZihhLm5leHQocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGgocCl7dHJ5e2YoYS50aHJvdyhwKSl9Y2F0Y2goZCl7YyhkKX19ZnVuY3Rpb24gZihwKXtwLmRvbmU/bChwLnZhbHVlKTpzKHAudmFsdWUpLnRoZW4odSxoKX1mKChhPWEuYXBwbHkobixpfHxbXSkpLm5leHQoKSl9KX0sVGR0PWZ1bmN0aW9uKG4saSl7dmFyIG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKGxbMF0mMSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX0sYSxzLGwsYztyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LHR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGgoW2YscF0pfX1mdW5jdGlvbiBoKGYpe2lmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxmWzBdJiYobz0wKSksbzspdHJ5e2lmKGE9MSxzJiYobD1mWzBdJjI/cy5yZXR1cm46ZlswXT9zLnRocm93fHwoKGw9cy5yZXR1cm4pJiZsLmNhbGwocyksMCk6cy5uZXh0KSYmIShsPWwuY2FsbChzLGZbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChzPTAsbCYmKGY9W2ZbMF0mMixsLnZhbHVlXSksZlswXSl7Y2FzZSAwOmNhc2UgMTpsPWY7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOmZbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxzPWZbMV0sZj1bMF07Y29udGludWU7Y2FzZSA3OmY9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobD1vLnRyeXMsIShsPWwubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoZlswXT09PTZ8fGZbMF09PT0yKSl7bz0wO2NvbnRpbnVlfWlmKGZbMF09PT0zJiYoIWx8fGZbMV0+bFswXSYmZlsxXTxsWzNdKSl7by5sYWJlbD1mWzFdO2JyZWFrfWlmKGZbMF09PT02JiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPWY7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChmKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9Zj1pLmNhbGwobixvKX1jYXRjaChwKXtmPVs2LHBdLHM9MH1maW5hbGx5e2E9bD0wfWlmKGZbMF0mNSl0aHJvdyBmWzFdO3JldHVybnt2YWx1ZTpmWzBdP2ZbMV06dm9pZCAwLGRvbmU6ITB9fX0sQ2R0PWZ1bmN0aW9uKG4saSl7Zm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiZBSShpLG4sbyl9LEFJPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpLG8sYSl7YT09PXZvaWQgMCYmKGE9byk7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOyghc3x8KCJnZXQiaW4gcz8haS5fX2VzTW9kdWxlOnMud3JpdGFibGV8fHMuY29uZmlndXJhYmxlKSkmJihzPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGEscyl9OmZ1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pLG5bYV09aVtvXX0sQ0k9ZnVuY3Rpb24obil7dmFyIGk9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLml0ZXJhdG9yLG89aSYmbltpXSxhPTA7aWYobylyZXR1cm4gby5jYWxsKG4pO2lmKG4mJnR5cGVvZiBuLmxlbmd0aD09Im51bWJlciIpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbiYmYT49bi5sZW5ndGgmJihuPXZvaWQgMCkse3ZhbHVlOm4mJm5bYSsrXSxkb25lOiFufX19O3Rocm93IG5ldyBUeXBlRXJyb3IoaT8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LGhHPWZ1bmN0aW9uKG4saSl7dmFyIG89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmbltTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBuO3ZhciBhPW8uY2FsbChuKSxzLGw9W10sYzt0cnl7Zm9yKDsoaT09PXZvaWQgMHx8aS0tID4wKSYmIShzPWEubmV4dCgpKS5kb25lOylsLnB1c2gocy52YWx1ZSl9Y2F0Y2godSl7Yz17ZXJyb3I6dX19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxBZHQ9ZnVuY3Rpb24oKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbj1uLmNvbmNhdChoRyhhcmd1bWVudHNbaV0pKTtyZXR1cm4gbn0sUGR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wLG89YXJndW1lbnRzLmxlbmd0aDtpPG87aSsrKW4rPWFyZ3VtZW50c1tpXS5sZW5ndGg7Zm9yKHZhciBhPUFycmF5KG4pLHM9MCxpPTA7aTxvO2krKylmb3IodmFyIGw9YXJndW1lbnRzW2ldLGM9MCx1PWwubGVuZ3RoO2M8dTtjKysscysrKWFbc109bFtjXTtyZXR1cm4gYX0sSWR0PWZ1bmN0aW9uKG4saSxvKXtpZihvfHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIGE9MCxzPWkubGVuZ3RoLGw7YTxzO2ErKykobHx8IShhIGluIGkpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGksMCxhKSksbFthXT1pW2FdKTtyZXR1cm4gbi5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpfSxUeD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFR4Pyh0aGlzLnY9bix0aGlzKTpuZXcgVHgobil9LExkdD1mdW5jdGlvbihuLGksbyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhPW8uYXBwbHkobixpfHxbXSkscyxsPVtdO3JldHVybiBzPXt9LGMoIm5leHQiKSxjKCJ0aHJvdyIpLGMoInJldHVybiIpLHNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHM7ZnVuY3Rpb24gYyhnKXthW2ddJiYoc1tnXT1mdW5jdGlvbihfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeSx4KXtsLnB1c2goW2csXyx5LHhdKT4xfHx1KGcsXyl9KX0pfWZ1bmN0aW9uIHUoZyxfKXt0cnl7aChhW2ddKF8pKX1jYXRjaCh5KXtkKGxbMF1bM10seSl9fWZ1bmN0aW9uIGgoZyl7Zy52YWx1ZSBpbnN0YW5jZW9mIFR4P1Byb21pc2UucmVzb2x2ZShnLnZhbHVlLnYpLnRoZW4oZixwKTpkKGxbMF1bMl0sZyl9ZnVuY3Rpb24gZihnKXt1KCJuZXh0IixnKX1mdW5jdGlvbiBwKGcpe3UoInRocm93IixnKX1mdW5jdGlvbiBkKGcsXyl7ZyhfKSxsLnNoaWZ0KCksbC5sZW5ndGgmJnUobFswXVswXSxsWzBdWzFdKX19LGtkdD1mdW5jdGlvbihuKXt2YXIgaSxvO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIsZnVuY3Rpb24ocyl7dGhyb3cgc30pLGEoInJldHVybiIpLGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxpO2Z1bmN0aW9uIGEocyxsKXtpW3NdPW5bc10/ZnVuY3Rpb24oYyl7cmV0dXJuKG89IW8pP3t2YWx1ZTpUeChuW3NdKGMpKSxkb25lOiExfTpsP2woYyk6Y306bH19LFJkdD1mdW5jdGlvbihuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0sbztyZXR1cm4gaT9pLmNhbGwobik6KG49dHlwZW9mIENJPT0iZnVuY3Rpb24iP0NJKG4pOm5bU3ltYm9sLml0ZXJhdG9yXSgpLG89e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gYShsKXtvW2xdPW5bbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGgpe2M9bltsXShjKSxzKHUsaCxjLmRvbmUsYy52YWx1ZSl9KX19ZnVuY3Rpb24gcyhsLGMsdSxoKXtQcm9taXNlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbihmKXtsKHt2YWx1ZTpmLGRvbmU6dX0pfSxjKX19LE5kdD1mdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInJhdyIse3ZhbHVlOml9KTpuLnJhdz1pLG59O3ZhciByPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obixpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6aX0pfTpmdW5jdGlvbihuLGkpe24uZGVmYXVsdD1pfTtEZHQ9ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciBpPXt9O2lmKG4hPW51bGwpZm9yKHZhciBvIGluIG4pbyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJkFJKGksbixvKTtyZXR1cm4gcihpLG4pLGl9LE9kdD1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn19LHpkdD1mdW5jdGlvbihuLGksbyxhKXtpZihvPT09ImEiJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZih0eXBlb2YgaT09ImZ1bmN0aW9uIj9uIT09aXx8IWE6IWkuaGFzKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBvPT09Im0iP2E6bz09PSJhIj9hLmNhbGwobik6YT9hLnZhbHVlOmkuZ2V0KG4pfSxGZHQ9ZnVuY3Rpb24obixpLG8sYSxzKXtpZihhPT09Im0iKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKGE9PT0iYSImJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhczohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4gYT09PSJhIj9zLmNhbGwobixvKTpzP3MudmFsdWU9bzppLnNldChuLG8pLG99LEJkdD1mdW5jdGlvbihuLGkpe2lmKGk9PT1udWxsfHx0eXBlb2YgaSE9Im9iamVjdCImJnR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0Iik7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP2k9PT1uOm4uaGFzKGkpfSxlKCJfX2V4dGVuZHMiLG1kdCksZSgiX19hc3NpZ24iLGdkdCksZSgiX19yZXN0IixfZHQpLGUoIl9fZGVjb3JhdGUiLHlkdCksZSgiX19wYXJhbSIsdmR0KSxlKCJfX2VzRGVjb3JhdGUiLHhkdCksZSgiX19ydW5Jbml0aWFsaXplcnMiLGJkdCksZSgiX19wcm9wS2V5Iix3ZHQpLGUoIl9fc2V0RnVuY3Rpb25OYW1lIixTZHQpLGUoIl9fbWV0YWRhdGEiLE1kdCksZSgiX19hd2FpdGVyIixFZHQpLGUoIl9fZ2VuZXJhdG9yIixUZHQpLGUoIl9fZXhwb3J0U3RhciIsQ2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixBZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixQZHQpLGUoIl9fc3ByZWFkQXJyYXkiLElkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLExkdCksZSgiX19hc3luY0RlbGVnYXRvciIsa2R0KSxlKCJfX2FzeW5jVmFsdWVzIixSZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixOZHQpLGUoIl9faW1wb3J0U3RhciIsRGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLE9kdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsemR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixGZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsQmR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixncGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixfcGU9IlxcdTIwMDAtXFx1MjA2ZiIseXBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2dwZStfcGUreXBlLGVxPSJbJ1x1MjAxOV0iLHZwZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIseHBlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGJwZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix3cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1icGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsU3BlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIixNcGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsRXBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K1NwZSxUcGU9Iig/OiIrW3hwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsQ3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLHZwZV0uam9pbigifCIpKyIpIixBcGU9UmVnRXhwKGVxLCJnIiksUHBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK0NwZStuZnQsImciKSxJcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIsd3BlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LEVwZSxNcGUsamh0LFRwZV0uam9pbigifCIpLCJnIiksTHBlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLGtwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxScGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxOcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgRHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sT3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSx6cGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LEZwZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxCcGU9cGFyc2VGbG9hdCxIcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxWcGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fFZwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gVXBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBxcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gR3BlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBXcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFlwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBqcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/b2RlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIFhwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gJHBlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBLcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gWnBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgSnBlPWZxKERwZSksUXBlPWZxKE9wZSk7ZnVuY3Rpb24gdGRlKHV0KXtyZXR1cm4iXFwiK0ZwZVt1dF19ZnVuY3Rpb24gZWRlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBMcGUudGVzdCh1dCl9ZnVuY3Rpb24gcmRlKHV0KXtyZXR1cm4ga3BlLnRlc3QodXQpfWZ1bmN0aW9uIG5kZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIGlkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gb2RlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiBhZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2xkZSh1dCk6V3BlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9jZGUodXQpOllwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIHNkZT1mcSh6cGUpO2Z1bmN0aW9uIGxkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gY2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiB1ZGUodXQpe3JldHVybiB1dC5tYXRjaChJcGUpfHxbXX12YXIgaGRlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFJwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxmZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUscGRlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PXBkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSxkZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLG1kZT1ZNi5jYWxsKHZuKSxnZGU9Zm8uXyxfZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSx5ZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsdmRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LHhkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxiZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUsd2RlPUc2LmpvaW4sU2RlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLE1kZT1nZS5ub3csRWRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sVGRlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sQ2RlPWFfKHZxKSxBZGU9YV8oVE0pLFBkZT1hXyh4cSksSWRlPWFfKGd4KSxMZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBrZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFJkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBOZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVltZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBEZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9kZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiB6ZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gQmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPURkZSxlXy5wcm90b3R5cGUuZGVsZXRlPU9kZSxlXy5wcm90b3R5cGUuZ2V0PXpkZSxlXy5wcm90b3R5cGUuaGFzPUZkZSxlXy5wcm90b3R5cGUuc2V0PUJkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBIZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIFZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIFVkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBxZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gR2RlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPUhkZSxpcC5wcm90b3R5cGUuZGVsZXRlPVZkZSxpcC5wcm90b3R5cGUuZ2V0PVVkZSxpcC5wcm90b3R5cGUuaGFzPXFkZSxpcC5wcm90b3R5cGUuc2V0PUdkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBXZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gWWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gamRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBYZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uICRkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVdkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVlkZSxvcC5wcm90b3R5cGUuZ2V0PWpkZSxvcC5wcm90b3R5cGUuaGFzPVhkZSxvcC5wcm90b3R5cGUuc2V0PSRkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIEtkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIFpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1LZGUscl8ucHJvdG90eXBlLmhhcz1aZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBKZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBRZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gdG1lKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBlbWUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIHJtZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1KZGUsZXUucHJvdG90eXBlLmRlbGV0ZT1RZGUsZXUucHJvdG90eXBlLmdldD10bWUsZXUucHJvdG90eXBlLmhhcz1lbWUsZXUucHJvdG90eXBlLnNldD1ybWU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsZmRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gbm1lKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIGltZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIG9tZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gYW1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1YbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/em1lKG0sYW1lKEosbSkpOk9tZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPSRtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIHNtZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBsbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gY21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1abWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9XbWUobSk6aWdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiB1bWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIGhtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGZtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBwbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpnbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBnbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6cW1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxHbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBfbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8UW1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP19kZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiB5bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gdm1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIHhtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiBTZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGJtZShtKXtpZighZWkobSkpcmV0dXJuIG5nZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXdtZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24gd21lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gJHBlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gRG1lKFksSixUKX0pfWZ1bmN0aW9uIFNtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiBNbWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP1hwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBFbWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiBUbWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gQ21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLEFtZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIFBtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBJbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOlZtZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIExtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9eWRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBrbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBSbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gTm1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIERtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBPbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiB6bWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9VcGU6b21lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gRm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoQXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gQm1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1acGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPW9nZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gcG1lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBIbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxFbWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIFZtZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP2lkZSh2KTpLcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJnJnZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPUZtZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPUJtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1IbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gVW1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gcW1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEdtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBKbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPWVkZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFdtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgQ2RlOnJldHVybiBoZTtjYXNlIEFkZTpyZXR1cm4gcTtjYXNlIFBkZTpyZXR1cm4ga3Q7Y2FzZSBJZGU6cmV0dXJuIExlO2Nhc2UgTGRlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gWW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gam1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uICRtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4ga21lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBSbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gTm1lKG0pfX1mdW5jdGlvbiBLbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIFptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gSm1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiBRbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciB0Z2U9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIGVnZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiByZ2UobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBuZ2UobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGlnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIG9nZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPXhkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoQW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sS21lKE4sYWdlKGptZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj1NZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9ZWdlKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIGFnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gc2dlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBsZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIGNnZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciB1Z2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLGhnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksZmdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIHBnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBkZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gbWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZ2dlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gX2dlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxjbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIHlnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiB2Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiB4Z2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBiZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24gd2dlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciBTZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLE1nZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxFZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gVGdlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6d2RlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gQ2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P2FkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gQWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBQZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBJZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gTGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIGtnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFJnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206VGRlLmNhbGwobSl9ZnVuY3Rpb24gTmdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIERnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIE9nZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiB6Z2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gRmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gQmdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIEhnZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiBWZ2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gcWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gR2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFdnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBZZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBqZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgWGdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLCRnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxLZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIFpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gSmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gUWdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIHQwZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksZTBlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxyMGU9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLGkwZT1ucihacSk7ZnVuY3Rpb24gbzBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gYTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIHMwZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gbDBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBjMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gdTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBoMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gZjBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gcDBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZDBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBtMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBnMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIF8wZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiB5MGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDpsbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIHYwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciB4MGU9dXB0KExwdCksYjBlPXVwdChrcHQpO2Z1bmN0aW9uIHcwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIFMwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIE0wZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/cXBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBFMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiBUMGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBDMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxBMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gUDBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgSTBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBMMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBrMGUobSx2LFQpe3ZhciBOPSRlKG0pP0dwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFIwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBOMGUobSl7dmFyIHY9JGUobSk/TGZ0OlRtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBEMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/bm1lOkNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIE8wZShtKXt2YXIgdj0kZShtKT9pbWU6UG1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIHowZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBGMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOkltZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEIwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST12ZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIEgwZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgVjBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxVMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIHEwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gRzBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVzBlPUxtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxZMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gajBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBYMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gJDBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBLMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIFowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBKMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uIFEwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiB0X2UobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIGVfZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIHJfZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBuX2UobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgaV9lPWRJKEVxKSxvX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxhX2U9YWZ0P1dzKGFmdCk6ZG1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIHNfZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPWJkZXx8dUcsbF9lPXNmdD9XcyhzZnQpOm1tZTtmdW5jdGlvbiBjX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIHVfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBoX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBmX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBwX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6X21lO2Z1bmN0aW9uIGRfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBtX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZ19lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIF9fZShtKXtpZih0Z2UobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiB2X2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PW1kZX12YXIgZUc9Y2Z0P1dzKGNmdCk6eW1lO2Z1bmN0aW9uIHhfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOnZtZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6eG1lO2Z1bmN0aW9uIGJfZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24gd19lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gU19lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciBNX2U9ZEkoUHEpLEVfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIG5kZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP0hwZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiBUX2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBDX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLEFfZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxQX2U9bHAod3EpO2Z1bmN0aW9uIElfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIExfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxrX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBSX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gTl9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIERfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBPX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIHpfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIEZfZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIEJfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBIX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gVl9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsdW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LGhtZSl9dmFyIFVfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSkscV9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxHX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpibWUobSl9ZnVuY3Rpb24gV19lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBZX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBqX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLFhfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxVbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gJF9lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIEtfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OlNtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIFpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiBRX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gdHllKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIGV5ZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIG55ZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gaXllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIG95ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gYXllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGZtZShtLHYsVCl9ZnVuY3Rpb24gc3llKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rQnBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLEpwZSkucmVwbGFjZShQcGUsIiIpfWZ1bmN0aW9uIGN5ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiB1eWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sUXBlKTptfWZ1bmN0aW9uIGh5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGZ5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxweWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksZHllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBteWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBneWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIF95ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24geXllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLEVkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiB2eWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24geHllKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgYnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHd5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgU3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24gTXllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBFeWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK05wZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCx0ZGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gVHllKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBBeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBQeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gSXllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gTHllKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIGt5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxzZGUpOm19dmFyIFJ5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP3JkZShtKT91ZGUobSk6anBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksTnllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gRHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBzbWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIHp5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIEZ5ZT1ocHQoKSxCeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gSHllKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24gVnllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBVeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxxeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEd5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89Z2RlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFd5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgWXllPUJxKCRuKSxqeWU9QnEoZmZ0KSxYeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOk1tZShtKX1mdW5jdGlvbiAkeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIEt5ZT1wcHQoKSxaeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gSnllKCl7cmV0dXJue319ZnVuY3Rpb24gUXllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gdHZlKCl7cmV0dXJuITB9ZnVuY3Rpb24gZXZlKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gcnZlKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gbnZlKG0pe3ZhciB2PSsrZGRlO3JldHVybiBvbihtKSt2fXZhciBpdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxvdmU9SHEoImNlaWwiKSxhdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxzdmU9SHEoImZsb29yIik7ZnVuY3Rpb24gbHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIGN2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gdXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gaHZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGZ2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBwdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciBkdmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxtdmU9SHEoInJvdW5kIiksZ3ZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gX3ZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIHl2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9SDBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1DX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPUFfZSxHLmF0PVBfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1OeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1KMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1zZ2UsRy5jb21wYWN0PWxnZSxHLmNvbmNhdD1jZ2UsRy5jb25kPUR5ZSxHLmNvbmZvcm1zPU95ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1fMGUsRy5jcmVhdGU9SV9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1MX2UsRy5kZWZhdWx0c0RlZXA9a19lLEcuZGVmZXI9VjBlLEcuZGVsYXk9VTBlLEcuZGlmZmVyZW5jZT11Z2UsRy5kaWZmZXJlbmNlQnk9aGdlLEcuZGlmZmVyZW5jZVdpdGg9ZmdlLEcuZHJvcD1wZ2UsRy5kcm9wUmlnaHQ9ZGdlLEcuZHJvcFJpZ2h0V2hpbGU9bWdlLEcuZHJvcFdoaWxlPWdnZSxHLmZpbGw9X2dlLEcuZmlsdGVyPXYwZSxHLmZsYXRNYXA9dzBlLEcuZmxhdE1hcERlZXA9UzBlLEcuZmxhdE1hcERlcHRoPU0wZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9eWdlLEcuZmxhdHRlbkRlcHRoPXZnZSxHLmZsaXA9cTBlLEcuZmxvdz1GeWUsRy5mbG93UmlnaHQ9QnllLEcuZnJvbVBhaXJzPXhnZSxHLmZ1bmN0aW9ucz1CX2UsRy5mdW5jdGlvbnNJbj1IX2UsRy5ncm91cEJ5PUUwZSxHLmluaXRpYWw9d2dlLEcuaW50ZXJzZWN0aW9uPVNnZSxHLmludGVyc2VjdGlvbkJ5PU1nZSxHLmludGVyc2VjdGlvbldpdGg9RWdlLEcuaW52ZXJ0PVVfZSxHLmludmVydEJ5PXFfZSxHLmludm9rZU1hcD1DMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PUEwZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVdfZSxHLm1hcFZhbHVlcz1ZX2UsRy5tYXRjaGVzPUh5ZSxHLm1hdGNoZXNQcm9wZXJ0eT1WeWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9al9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1VeWUsRy5tZXRob2RPZj1xeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1XeWUsRy5vbWl0PVhfZSxHLm9taXRCeT0kX2UsRy5vbmNlPUcwZSxHLm9yZGVyQnk9UDBlLEcub3Zlcj1ZeWUsRy5vdmVyQXJncz1XMGUsRy5vdmVyRXZlcnk9anllLEcub3ZlclNvbWU9WHllLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249STBlLEcucGljaz1LX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj0keWUsRy5wdWxsPVBnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PUlnZSxHLnB1bGxBbGxXaXRoPUxnZSxHLnB1bGxBdD1rZ2UsRy5yYW5nZT1LeWUsRy5yYW5nZVJpZ2h0PVp5ZSxHLnJlYXJnPVkwZSxHLnJlamVjdD1SMGUsRy5yZW1vdmU9UmdlLEcucmVzdD1qMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1EMGUsRy5zZXQ9Sl9lLEcuc2V0V2l0aD1RX2UsRy5zaHVmZmxlPU8wZSxHLnNsaWNlPU5nZSxHLnNvcnRCeT1CMGUsRy5zb3J0ZWRVbmlxPVZnZSxHLnNvcnRlZFVuaXFCeT1VZ2UsRy5zcGxpdD13eWUsRy5zcHJlYWQ9WDBlLEcudGFpbD1xZ2UsRy50YWtlPUdnZSxHLnRha2VSaWdodD1XZ2UsRy50YWtlUmlnaHRXaGlsZT1ZZ2UsRy50YWtlV2hpbGU9amdlLEcudGFwPWwwZSxHLnRocm90dGxlPSQwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1ydmUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT10eWUsRy51bmFyeT1LMGUsRy51bmlvbj1YZ2UsRy51bmlvbkJ5PSRnZSxHLnVuaW9uV2l0aD1LZ2UsRy51bmlxPVpnZSxHLnVuaXFCeT1KZ2UsRy51bmlxV2l0aD1RZ2UsRy51bnNldD1leWUsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9cnllLEcudXBkYXRlV2l0aD1ueWUsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj1peWUsRy53aXRob3V0PXQwZSxHLndvcmRzPXNkdCxHLndyYXA9WjBlLEcueG9yPWUwZSxHLnhvckJ5PXIwZSxHLnhvcldpdGg9bjBlLEcuemlwPWkwZSxHLnppcE9iamVjdD1vMGUsRy56aXBPYmplY3REZWVwPWEwZSxHLnppcFdpdGg9czBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD1pdmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1seWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9b3ZlLEcuY2xhbXA9b3llLEcuY2xvbmU9UTBlLEcuY2xvbmVEZWVwPWVfZSxHLmNsb25lRGVlcFdpdGg9cl9lLEcuY2xvbmVXaXRoPXRfZSxHLmNvbmZvcm1zVG89bl9lLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz16eWUsRy5kaXZpZGU9YXZlLEcuZW5kc1dpdGg9Y3llLEcuZXE9cnUsRy5lc2NhcGU9dXllLEcuZXNjYXBlUmVnRXhwPWh5ZSxHLmV2ZXJ5PXkwZSxHLmZpbmQ9eDBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9Ul9lLEcuZmluZExhc3Q9YjBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1OX2UsRy5mbG9vcj1zdmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1EX2UsRy5mb3JJblJpZ2h0PU9fZSxHLmZvck93bj16X2UsRy5mb3JPd25SaWdodD1GX2UsRy5nZXQ9ckcsRy5ndD1pX2UsRy5ndGU9b19lLEcuaGFzPVZfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPVQwZSxHLmluZGV4T2Y9YmdlLEcuaW5SYW5nZT1heWUsRy5pbnZva2U9R19lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1hX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPXNfZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWxfZSxHLmlzRWxlbWVudD1jX2UsRy5pc0VtcHR5PXVfZSxHLmlzRXF1YWw9aF9lLEcuaXNFcXVhbFdpdGg9Zl9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPXBfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPWRfZSxHLmlzTWF0Y2hXaXRoPW1fZSxHLmlzTmFOPWdfZSxHLmlzTmF0aXZlPV9fZSxHLmlzTmlsPXZfZSxHLmlzTnVsbD15X2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9eF9lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPWJfZSxHLmlzV2Vha01hcD13X2UsRy5pc1dlYWtTZXQ9U19lLEcuam9pbj1UZ2UsRy5rZWJhYkNhc2U9ZnllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPUNnZSxHLmxvd2VyQ2FzZT1weWUsRy5sb3dlckZpcnN0PWR5ZSxHLmx0PU1fZSxHLmx0ZT1FX2UsRy5tYXg9bHZlLEcubWF4Qnk9Y3ZlLEcubWVhbj11dmUsRy5tZWFuQnk9aHZlLEcubWluPWZ2ZSxHLm1pbkJ5PXB2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9SnllLEcuc3R1YlN0cmluZz1ReWUsRy5zdHViVHJ1ZT10dmUsRy5tdWx0aXBseT1kdmUsRy5udGg9QWdlLEcubm9Db25mbGljdD1HeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPW15ZSxHLnBhZEVuZD1neWUsRy5wYWRTdGFydD1feWUsRy5wYXJzZUludD15eWUsRy5yYW5kb209c3llLEcucmVkdWNlPUwwZSxHLnJlZHVjZVJpZ2h0PWswZSxHLnJlcGVhdD12eWUsRy5yZXBsYWNlPXh5ZSxHLnJlc3VsdD1aX2UsRy5yb3VuZD1tdmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9TjBlLEcuc2l6ZT16MGUsRy5zbmFrZUNhc2U9YnllLEcuc29tZT1GMGUsRy5zb3J0ZWRJbmRleD1EZ2UsRy5zb3J0ZWRJbmRleEJ5PU9nZSxHLnNvcnRlZEluZGV4T2Y9emdlLEcuc29ydGVkTGFzdEluZGV4PUZnZSxHLnNvcnRlZExhc3RJbmRleEJ5PUJnZSxHLnNvcnRlZExhc3RJbmRleE9mPUhnZSxHLnN0YXJ0Q2FzZT1TeWUsRy5zdGFydHNXaXRoPU15ZSxHLnN1YnRyYWN0PWd2ZSxHLnN1bT1fdmUsRy5zdW1CeT15dmUsRy50ZW1wbGF0ZT1FeWUsRy50aW1lcz1ldmUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9VHllLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPVRfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1DeWUsRy50cmltPUF5ZSxHLnRyaW1FbmQ9UHllLEcudHJpbVN0YXJ0PUl5ZSxHLnRydW5jYXRlPUx5ZSxHLnVuZXNjYXBlPWt5ZSxHLnVuaXF1ZUlkPW52ZSxHLnVwcGVyQ2FzZT1SeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPWtkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1SZGUsZ3IucHJvdG90eXBlLnZhbHVlPU5kZSxHLnByb3RvdHlwZS5hdD1jMGUsRy5wcm90b3R5cGUuY2hhaW49dTBlLEcucHJvdG90eXBlLmNvbW1pdD1oMGUsRy5wcm90b3R5cGUubmV4dD1mMGUsRy5wcm90b3R5cGUucGxhbnQ9ZDBlLEcucHJvdG90eXBlLnJldmVyc2U9bTBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWcwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPXAwZSksR30sbW09aGRlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gX190KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGcyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIF8yZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGdfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bTJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbTJlLHZzLHlfdD1NKCgpPT57bTJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1fX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWcyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPV8yZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Z190KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Z190KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9X190fSk7dmFyIGttPU0oKCk9Pnt5X3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBDdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIEF2dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgUHZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsSXZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSprdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKmt2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoTHZ0KmUpKS8yfXZhciBMdnQsa3Z0LFJ2dD1NKCgpPT57THZ0PU1hdGguUEksa3Z0PUx2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgTnZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgRHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTx1U2U/REwqKGUtPWNTZSkqZStoU2U6ZTxwU2U/REwqKGUtPWZTZSkqZStkU2U6REwqKGUtPW1TZSkqZStnU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxjU2UsdVNlLGhTZSxmU2UscFNlLGRTZSxtU2UsZ1NlLERMLE92dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LGNTZT02LzExLHVTZT04LzExLGhTZT0zLzQsZlNlPTkvMTEscFNlPTEwLzExLGRTZT0xNS8xNixtU2U9MjEvMjIsZ1NlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsenZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLEZ2dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIEJ2dD17fTtLcyhCdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntDdnQoKTtBdnQoKTtQdnQoKTtJdnQoKTtSdnQoKTtOdnQoKTtEdnQoKTtPdnQoKTt6dnQoKTtGdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uIFF2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPVF2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9UXZ0fSk7ZnVuY3Rpb24gcjF0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxOU2UsRFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCx0MXQsZTF0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCx0MXQsZTF0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIE5TZSgpe3JldHVybnt9fWZ1bmN0aW9uIERTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIHQxdCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIGUxdChlLHQscil7ZS5zZXQodCxyKX12YXIgbjF0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gaTF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sbzF0LGExdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPWkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtvMXQ9aTF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGwxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGMxdD1NKCgpPT57fSk7ZnVuY3Rpb24gdTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBoMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57bjF0KCk7YTF0KCk7akwoKTtzMXQoKTtjMXQoKTtoMXQoKX0pO2Z1bmN0aW9uIHYxdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEdTZShlLHQpe3ZhciByPXYxdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIHkxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gV1NlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFlTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6V1NlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/R1NlKF8sZik6djF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLF8xdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09XzF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXkxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1lTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBfMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e18xdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYix4MXQsYjF0LHcxdCxTMXQsTTF0LEUxdCxUMXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSx4MXQ9Ul8ucGFyc2VSb3dzLGIxdD1SXy5mb3JtYXQsdzF0PVJfLmZvcm1hdEJvZHksUzF0PVJfLmZvcm1hdFJvd3MsTTF0PVJfLmZvcm1hdFJvdyxFMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsQzF0LEExdCxQMXQsSTF0LEwxdCxrMXQsUjF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsQzF0PU5fLnBhcnNlUm93cyxBMXQ9Tl8uZm9ybWF0LFAxdD1OXy5mb3JtYXRCb2R5LEkxdD1OXy5mb3JtYXRSb3dzLEwxdD1OXy5mb3JtYXRSb3csazF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKWpTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBqU2UsTjF0PU0oKCk9PntqU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7VDF0KCk7UjF0KCk7TjF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT55NWUsX19hc3luY0RlbGVnYXRvcjooKT0+QTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PkM1ZSxfX2FzeW5jVmFsdWVzOigpPT5QNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT5TNWUsX19kZWNvcmF0ZTooKT0+eDVlLF9fZXhwb3J0U3RhcjooKT0+RTVlLF9fZXh0ZW5kczooKT0+XzVlLF9fZ2VuZXJhdG9yOigpPT5NNWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9Pkk1ZSxfX21ldGFkYXRhOigpPT53NWUsX19wYXJhbTooKT0+YjVlLF9fcmVhZDooKT0+bk10LF9fcmVzdDooKT0+djVlLF9fc3ByZWFkOigpPT5UNWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gXzVlKGUsdCl7ZzVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gdjVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIHg1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIGI1ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB3NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gUzVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIE01ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBFNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gbk10KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIFQ1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KG5NdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gQzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBBNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gUDVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIEk1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGc1ZSx5NWUsZGU9TSgoKT0+e2c1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07eTVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgaU10LG9NdD1NKCgpPT57aU10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1MNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciBhTXQseCQsc010LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7YU10PWFSKF9jKSx4JD1hTXQucmlnaHQsc010PWFNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gbE10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNNdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciB1TXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBoTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGZNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgcE10LGRNdCxtTXQsQyQ9TSgoKT0+e3BNdD1BcnJheS5wcm90b3R5cGUsZE10PXBNdC5zbGljZSxtTXQ9cE10Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZ010PU0oKCk9Pnt9KTtmdW5jdGlvbiBfTXQoZSl7cmV0dXJuIGV9dmFyIHlNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiB2TXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiB4TXQoKXt2YXIgZT1fTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUoZE10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIGJNdD1NKCgpPT57QyQoKTtiJCgpO2dNdCgpO1QkKCk7eU10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB3TXQoZSx0LHIpe3JldHVybiBlPW1NdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgU010PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24gTU10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgRU10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gVE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBDTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFNdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBQTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBJTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIExNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBrTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5NdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgRE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBPTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgek10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gRk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIEJNdD1NKCgpPT57fSk7ZnVuY3Rpb24gSE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciBWTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxrNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gazVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBVTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgcU10PU0oKCk9PntPJCgpfSk7dmFyIEdNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7dU10KCk7Zk10KCk7RSQoKTtUJCgpO2JNdCgpO1NNdCgpO0VNdCgpO04kKCk7Q010KCk7UE10KCk7TE10KCk7Uk10KCk7RCQoKTtTJCgpO0RNdCgpO2RSKCk7QSQoKTt6TXQoKTtCTXQoKTtWTXQoKTtSJCgpO08kKCk7TSQoKTtxTXQoKX0pO3ZhciBfUixXTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFlNdChlKXtyZXR1cm4gZX12YXIgak10PU0oKCk9Pnt9KTtmdW5jdGlvbiBSNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBONWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBENWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBPNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gejVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UjVlOk41ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6WU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP081ZTpENWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLFhNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsWE10KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKHo1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gJE10KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBLTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIFpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gSk10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsWE10LFFNdD1NKCgpPT57V010KCk7ak10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxYTXQ9MWUtNn0pO3ZhciB0RXQ9TSgoKT0+e1FNdCgpfSk7ZnVuY3Rpb24gckV0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEI1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEg1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGVFdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09RjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgRjVlLFc1LG5FdD1NKCgpPT57RjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1yRXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUI1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUg1ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09ZUV0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09ZUV0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9ckV0fSk7dmFyIEYkPU0oKCk9PntuRXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gVjVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBVNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/VTVlOlY1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBxNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/cTVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgb0V0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBHNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9HNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIHNFdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBsRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBjRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gdUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIGhFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGZFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVzVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gWTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9cEV0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9cEV0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gZEV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9ZNWU6VzVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9aEV0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIHBFdCxtRXQ9TSgoKT0+e3d1KCk7VyQoKTtmRXQoKTtwRXQ9IiQifSk7ZnVuY3Rpb24gZ0V0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgX0V0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiB5RXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHZFdD1NKCgpPT57fSk7ZnVuY3Rpb24geEV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBiRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdChlKXtlfHwoZT1qNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgRUV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gVEV0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBDRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFFdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBQRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIElFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBORXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIERFdD1NKCgpPT57fSk7ZnVuY3Rpb24gT0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgekV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uICQ1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEs1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIFo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBKNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFE1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBGRXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/JDVlOlg1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1E1ZTpKNWU6ci5sb2NhbD9aNWU6SzVlKShyLHQpKX12YXIgQkV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gdFRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGVUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHJUZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBIRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3RUZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yVGU6ZVRlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBuVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGlUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gb1RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIFZFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP25UZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9vVGU6aVRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgVUV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEdFdChlKX1mdW5jdGlvbiBHRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPXFFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFdFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFlFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtXRXQodGhpcyxlKX19ZnVuY3Rpb24gc1RlKGUpe3JldHVybiBmdW5jdGlvbigpe1lFdCh0aGlzLGUpfX1mdW5jdGlvbiBsVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/V0V0OllFdCkodGhpcyxlKX19ZnVuY3Rpb24gakV0KGUsdCl7dmFyIHI9cUV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2xUZTp0P2FUZTpzVGUpKHIsdCkpfXZhciBYRXQ9TSgoKT0+e0dFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBjVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHVUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIGhUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gJEV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2NUZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/aFRlOnVUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBLRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHBUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBkVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBaRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/ZlRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9kVGU6cFRlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBRRXQoKXtyZXR1cm4gdGhpcy5lYWNoKG1UZSl9dmFyIHQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gZ1RlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gZTV0KCl7cmV0dXJuIHRoaXMuZWFjaChnVGUpfXZhciByNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG41dChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBpNXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBfVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBvNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9fVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIGE1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24geVRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gczV0KCl7cmV0dXJuIHRoaXMuZWFjaCh5VGUpfXZhciBsNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZUZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24geFRlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBjNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/eFRlOnZUZSl9dmFyIHU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZjV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiVGUoZSx0LHIpe3JldHVybiBlPW01dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBtNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24gd1RlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBTVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTVRlKGUsdCxyKXt2YXIgbj1kNXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9iVGU6bTV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGc1dChlLHQscil7dmFyIG49d1RlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9NVGU6U1RlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciBkNXQsd3IscDV0LEFSPU0oKCk9PntkNXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYocDV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIHA1dHx8KGQ1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBfNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEVUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBfNXQodGhpcyxlLHQpfX1mdW5jdGlvbiBUVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gXzV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHk1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1RUZTpFVGUpKGUsdCkpfXZhciB2NXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiB4NXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57b0V0KCk7c0V0KCk7Y0V0KCk7bUV0KCk7VyQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTt6RXQoKTtCRXQoKTtqJCgpO1VFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO3U1dCgpO2Y1dCgpO0FSKCk7djV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT14NXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6aUV0LHNlbGVjdEFsbDphRXQsZmlsdGVyOmxFdCxkYXRhOmRFdCxlbnRlcjp1RXQsZXhpdDpnRXQsam9pbjp5RXQsbWVyZ2U6eEV0LG9yZGVyOndFdCxzb3J0Ok1FdCxjYWxsOlRFdCxub2RlczpBRXQsbm9kZTpJRXQsc2l6ZTprRXQsZW1wdHk6TkV0LGVhY2g6T0V0LGF0dHI6RkV0LHN0eWxlOkhFdCxwcm9wZXJ0eTpWRXQsY2xhc3NlZDpqRXQsdGV4dDokRXQsaHRtbDpaRXQscmFpc2U6UUV0LGxvd2VyOmU1dCxhcHBlbmQ6bjV0LGluc2VydDpvNXQscmVtb3ZlOnM1dCxjbG9uZTpjNXQsZGF0dW06aDV0LG9uOmc1dCxkaXNwYXRjaDp5NXR9O1VwPXg1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBiNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB3NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgUzV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24gTTV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIEU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9dzV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLE01dChlLHQpfXZhciBUNXQ9TSgoKT0+e1M1dCgpO0U1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO1Q1dCgpO1NSKCk7YjV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBDNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgQTV0PU0oKCk9PntFcygpO0M1dCgpfSk7dmFyIFA1dD1NKCgpPT57QTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEk1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gazV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gTlRlKCl7cmV0dXJuIEY1dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBSNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1DVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9ONXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUFUZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9UFRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1JVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9TFRlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PWtUZS5leGVjKGUpKT96NXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1SVGUuZXhlYyhlKSk/ejV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6TDV0Lmhhc093blByb3BlcnR5KGUpP041dChMNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIE41dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIERUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0RUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBENXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gTzV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHo1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIEY1dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gQjV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9GNXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLENUZSxBVGUsUFRlLElUZSxMVGUsa1RlLFJUZSxMNXQsSDV0PU0oKCk9PntJNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQ1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLEFUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksUFRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxJVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxMVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxrVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFJUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEw1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDprNXQsZm9ybWF0SGV4Oms1dCxmb3JtYXRIc2w6TlRlLGZvcm1hdFJnYjpSNXQsdG9TdHJpbmc6UjV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkQ1dCxmb3JtYXRIZXg6RDV0LGZvcm1hdFJnYjpPNXQsdG9TdHJpbmc6TzV0fSkpO0xSKEtoLEI1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e0g1dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBWNXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBVNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBxNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBPVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiB6VGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD96VGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP09UZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFc1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFk1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxGVGUsQlRlLG9LPU0oKCk9PntOUigpO25LKCk7cTV0KCk7VzV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1HNXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7RlRlPVk1dChWNXQpLEJUZT1ZNXQoVTV0KX0pO2Z1bmN0aW9uIGo1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBYNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciAkNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEs1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIEo1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyIFE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VHQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBlVHQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBIVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFZUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9WVGUobFswXS54KTpIVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/SjV0Olg1dCh0KT9qNXQ6QXJyYXkuaXNBcnJheSh0KT9LNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3RUdDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtaNXQoKTtRNXQoKTtRNSgpO2VUdCgpO2xLKCk7aUsoKTskNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnJUdCxza2V3WDpNYXRoLmF0YW4obCkqclR0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgclR0LHpSLG5UdD1NKCgpPT57clR0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gb1R0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpVHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9aVR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIGFUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLGlUdCxGUixzVHQ9TSgoKT0+e25UdCgpfSk7ZnVuY3Rpb24gbFR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxjVHQ9TSgoKT0+e1E1KCk7c1R0KCk7aEs9bFR0KG9UdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1sVHQoYVR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO2NUdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGZUdChVVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBVVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gcFR0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiB1VHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e3BUdCgpfWZpbmFsbHl7aDI9MCxHVGUoKSx5eT0wfX1mdW5jdGlvbiBxVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5oVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBHVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dCh1VHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChxVGUsaFR0KSksaDI9MSxmVHQodVR0KSl9fXZhciBoMixpVCxuVCxoVHQsQlIsb1QsSFIseXksVlIsYVQsZlR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxoVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGZUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIGRUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTtkVHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47alRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpXVGUsdHdlZW46WVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmdUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmdUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24galRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1tVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1tVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFdUZSxZVGUsZ1R0LGdLLFdSLEdSLG1UdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1dUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxZVGU9W10sZ1R0PTAsZ0s9MSxXUj0yLEdSPTMsbVR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIF9UdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciB5VHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBYVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiAkVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIHZUdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP1hUZTokVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gS1RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBaVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBKVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gUVRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB0Q2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBlQ2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIHhUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP2VDZTp0Q2UpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9aVGU6S1RlKShyKTooci5sb2NhbD9RVGU6SlRlKShyLG4sdCkpfXZhciBiVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiByQ2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIG5DZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGlDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJm5DZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gb0NlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmckNlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB3VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/aUNlOm9DZSkobix0KSl9dmFyIFNUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBzQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/YUNlOnNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEVUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGxDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBjQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gVFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/bENlOmNDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIENUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHVDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gQVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh1Q2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgUFR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gSVR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBMVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIGtUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBSVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBoQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBmQ2UoZSx0LHIpe3ZhciBuLGksbz1oQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gTlR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goZkNlKHIsZSx0KSl9dmFyIERUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gT1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLHBDZSh0aGlzLl9pZCkpfXZhciB6VHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEZUdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBCVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gSFR0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciBWVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gVVR0KCl7cmV0dXJuIG5ldyBkQ2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBkQ2UscVR0PU0oKCk9PntFcygpO2RDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBtQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gR1R0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGdDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIF9DZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiB5Q2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9R1R0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gV1R0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxtQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsR1R0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxfQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goeUNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxnQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBZVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIHZDZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24geENlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZ2Q2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24galR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLHhDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIFhUdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gd0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uICRUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/d0NlKGQyKHRoaXMsInRleHQiLGUpKTpiQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIEtUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIFNDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gTUNlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJlNDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIFpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsTUNlKGUpKX12YXIgSlR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgdEN0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBlQ3QoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgckN0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK0VDZX12YXIgRUNlLG0yLEdwPU0oKCk9PntFcygpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1ZUdCgpO3FUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO0pUdCgpO3RDdCgpO3VUKCk7ckN0KCk7RUNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpGVHQsc2VsZWN0QWxsOkhUdCxmaWx0ZXI6SVR0LG1lcmdlOmtUdCxzZWxlY3Rpb246VVR0LHRyYW5zaXRpb246UVR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpOVHQsYXR0cjp4VHQsYXR0clR3ZWVuOndUdCxzdHlsZTpXVHQsc3R5bGVUd2VlbjpqVHQsdGV4dDokVHQsdGV4dFR3ZWVuOlpUdCxyZW1vdmU6T1R0LHR3ZWVuOnZUdCxkZWxheTpNVHQsZHVyYXRpb246VFR0LGVhc2U6QVR0LGVuZDplQ3R9fSk7ZnVuY3Rpb24gVENlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBuQ3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fFRDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4SyxpQ3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBvQ3Q9TSgoKT0+e0VzKCk7eVR0KCk7aUN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1fVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249bkN0fSk7dmFyIGFDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIHNDdD1NKCgpPT57b0N0KCk7R3AoKTthQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBsQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNDdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciB1Q3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBoQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBJQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIExDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gbUN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZ0N0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBfQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIHlDdCgpe3JldHVybiBUSyhDQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUxDZSxyPUlDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgY0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2ZDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpBQ2VbcF0sXz1lPT09JFI/bnVsbDpQQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgZkN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIHBDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPXBDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiBkQ3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD1kQ3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGZDdCxTSyxnMixfMiwkUixLUixDQ2UsV3AscEN0LGRDdCxBQ2UsUENlLHZDdD1NKCgpPT57RiQoKTtQNXQoKTtyVCgpO0VzKCk7c0N0KCk7bEN0KCk7dUN0KCk7aEN0KCk7ZkN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LENDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0scEN0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkQ3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LEFDZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxQQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgeEN0PU0oKCk9Pnt2Q3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9a0NlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24ga0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgYkN0LFJDZSxOQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtiQ3Q9Q0sobGcpLFJDZT1iQ3QucmlnaHQsTkNlPWJDdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgd0N0PU0oKCk9PntJSygpfSk7dmFyIFNDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciBNQ3QsT0NlLHpDZSxOSz1NKCgpPT57TUN0PUFycmF5LnByb3RvdHlwZSxPQ2U9TUN0LnNsaWNlLHpDZT1NQ3QubWFwfSk7dmFyIEVDdD1NKCgpPT57fSk7dmFyIFRDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgU2xuLE1sbixFbG4sT0s9TSgoKT0+e1Nsbj1NYXRoLnNxcnQoNTApLE1sbj1NYXRoLnNxcnQoMTApLEVsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBDQ3Q9TSgoKT0+e05LKCk7UEsoKTtFQ3QoKTtSSygpO1RDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBJQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgTEN0PU0oKCk9Pnt9KTt2YXIga0N0PU0oKCk9Pnt5MigpfSk7dmFyIFJDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBEQ3Q9TSgoKT0+e30pO3ZhciBPQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgekN0PU0oKCk9Pnt9KTt2YXIgRkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgQkN0PU0oKCk9PntCSygpfSk7dmFyIEhDdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7d0N0KCk7U0N0KCk7a0soKTtSSygpO0NDdCgpO1BDdCgpO0lDdCgpO3pLKCk7TEN0KCk7a0N0KCk7UkN0KCk7TkN0KCk7RksoKTtJSygpO0RDdCgpO0pSKCk7REsoKTtPQ3QoKTt6Q3QoKTtGQ3QoKTtPSygpO0JLKCk7TEsoKTtCQ3QoKX0pO3ZhciBISyxWSyxWQ3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLFZDdD1NYXRoLlBJLGRUPVZDdC8yLFVLPVZDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gV0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gVUN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVdDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgcUN0PU0oKCk9PntIQ3QoKTtHSygpfSk7dmFyIEdDdCxXQ3Q9TSgoKT0+e0dDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFlDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxZQ2UsWEssWEN0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixZQ2U9WUsteHk7aksucHJvdG90eXBlPWpDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPllDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1qQ3R9KTt2YXIgJEN0PU0oKCk9PntYQ3QoKX0pO2Z1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gWENlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiAkQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIEtDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIFpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBLQ3QoKXt2YXIgZT1qQ2UsdD1YQ2Uscj0kQ2Usbj1LQ2UsaT1aQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUdDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIFpDdD1NKCgpPT57V0N0KCk7WUN0KCk7R0soKTskQ3QoKX0pO3ZhciBKQ3Q9TSgoKT0+e3FDdCgpO1pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gUUN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9UUN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT1RQ3R9KTtmdW5jdGlvbiByQXQoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEpDZSxRQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLHRBdCxlQXQpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLHRBdCxlQXQpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gSkNlKCl7cmV0dXJue319ZnVuY3Rpb24gUUNlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gdEF0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gZUF0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBuQXQ9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiBpQXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxvQXQsYUF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9aUF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O29BdD1pQXR9KTtmdW5jdGlvbiBzQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGNBdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIHVBdD1NKCgpPT57fSk7ZnVuY3Rpb24gaEF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBmQXQ9TSgoKT0+e30pO3ZhciBwQXQ9TSgoKT0+e25BdCgpO2FBdCgpO2VOKCk7bEF0KCk7dUF0KCk7ZkF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dEFlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PWVBZS5leGVjKGUpKT9tQXQocGFyc2VJbnQodFsxXSwxNikpOih0PXJBZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9bkFlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1pQWUuZXhlYyhlKSk/Z0F0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW9BZS5leGVjKGUpKT9nQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9YUFlLmV4ZWMoZSkpP19BdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXNBZS5leGVjKGUpKT9fQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpkQXQuaGFzT3duUHJvcGVydHkoZSk/bUF0KGRBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbUF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGdBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gX0F0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gbEFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bEFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCx0QWUsZUFlLHJBZSxuQWUsaUFlLG9BZSxhQWUsc0FlLGRBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsdEFlPS9eIyhbMC05YS1mXXszfSkkLyxlQWU9L14jKFswLTlhLWZdezZ9KSQvLHJBZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksbkFlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSxpQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxvQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxhQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLHNBZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLGRBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkveUF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS92QXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL3hBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPmNBZT9NYXRoLnBvdyhlLDEvMyk6ZS93QXQrYkF0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOndBdCooZS1iQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT91QWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLHlBdCx2QXQseEF0LGJBdCxiMix3QXQsY0FlLFNBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgseUF0PS45NTA0Nyx2QXQ9MSx4QXQ9MS4wODg4MyxiQXQ9NC8yOSxiMj02LzI5LHdBdD0zKmIyKmIyLGNBZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9dkF0KnRaKGUpLHQ9eUF0KnRaKHQpLHI9eEF0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIGhBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShUQXQqbitNQXQqdC1FQXQqcikvKFRBdCtNQXQtRUF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2hBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgQ0F0LG9aLGFaLGNOLF9ULE1BdCxFQXQsVEF0LEFBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7Q0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCxNQXQ9X1QqY04sRUF0PV9UKm9aLFRBdD1vWiphWi1jTipDQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKENBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBQQXQ9TSgoKT0+e2lOKCk7U0F0KCk7QUF0KCl9KTtmdW5jdGlvbiBMQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIHBBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGRBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIElBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09ZkFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgZkFlLGtBdCxSQXQ9TSgoKT0+e2ZBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9TEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1wQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1kQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUlBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUlBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O2tBdD1MQXR9KTt2YXIgTkF0PU0oKCk9PntSQXQoKX0pO2Z1bmN0aW9uIE9BdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBnQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBfQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBEQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPW1BZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIG1BZSxzWix6QXQ9TSgoKT0+e21BZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9T0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1nQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1fQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPURBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPURBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPU9BdH0pO3ZhciBGQXQ9TSgoKT0+e3pBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiB5QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHZBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD92QWU6eUFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIHhBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD94QWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIEJBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBIQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIGJBZSgpe3JldHVybltdfWZ1bmN0aW9uIFZBdChlKXtyZXR1cm4gZT09bnVsbD9iQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVUF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVZBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgR0F0PU0oKCk9PntlZigpO1VBdCgpfSk7ZnVuY3Rpb24gV0F0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBZQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9V0F0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBYQXQ9TSgoKT0+e2VmKCk7WUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uICRBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBLQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBaQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHdBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIFNBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUpBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUpBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFFBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/U0FlOndBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUtBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBKQXQsdDR0PU0oKCk9PntlZigpO2RaKCk7WkF0KCk7SkF0PSIkIn0pO2Z1bmN0aW9uIGU0dCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIHI0dD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gbjR0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBpNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIG80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgYTR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gczR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoZSl7ZXx8KGU9TUFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHU0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIGg0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgZjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgZDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBtNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gdjR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciB4NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGI0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHc0dD1NKCgpPT57fSk7ZnVuY3Rpb24gRUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBUQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBDQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBBQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gUEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gUzR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP1RBZTpFQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9JQWU6UEFlOnIubG9jYWw/QUFlOkNBZSkocix0KSl9dmFyIE00dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIExBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBrQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBSQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gRTR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0LHI9PW51bGw/IiI6cikpOk5BZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBOQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgVDR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gREFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBPQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHpBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBDNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9EQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ekFlOk9BZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIEE0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBJNHQoZSl9ZnVuY3Rpb24gSTR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1QNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBMNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBrNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7TDR0KHRoaXMsZSl9fWZ1bmN0aW9uIEJBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtrNHQodGhpcyxlKX19ZnVuY3Rpb24gSEFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0w0dDprNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFI0dChlLHQpe3ZhciByPVA0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9IQWU6dD9GQWU6QkFlKShyLHQpKX12YXIgTjR0PU0oKCk9PntJNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gVkFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBVQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBxQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEQ0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9WQWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3FBZTpVQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgTzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBXQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gejR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0dBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WUFlOldBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQjR0KCl7cmV0dXJuIHRoaXMuZWFjaChqQWUpfXZhciBINHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFY0dCgpe3JldHVybiB0aGlzLmVhY2goWEFlKX12YXIgVTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRzR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gJEFlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVzR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/JEFlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBZNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIEtBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGo0dCgpe3JldHVybiB0aGlzLmVhY2goS0FlKX12YXIgWDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEpBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gJDR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0pBZTpaQWUpfXZhciBLNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIEo0dD1NKCgpPT57fSk7ZnVuY3Rpb24gUUFlKGUsdCxyKXtyZXR1cm4gZT1lUHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gZVB0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIHQ0ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gZTRlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIHI0ZShlLHQscil7dmFyIG49dFB0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UUFlOmVQdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiByUHQoZSx0LHIpe3ZhciBuPXQ0ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/cjRlOmU0ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgdFB0LHNuLFE0dCx4Tj1NKCgpPT57dFB0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFE0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBRNHR8fCh0UHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gblB0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBuNGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gblB0KHRoaXMsZSx0KX19ZnVuY3Rpb24gaTRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5QdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBpUHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9pNGU6bjRlKShlLHQpKX12YXIgb1B0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gbzRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e0hBdCgpO0dBdCgpO1hBdCgpO3Q0dCgpO2RaKCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7VDR0KCk7QTR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7SzR0KCk7SjR0KCk7eE4oKTtvUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPW80ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpCQXQsc2VsZWN0QWxsOnFBdCxmaWx0ZXI6akF0LGRhdGE6UUF0LGVudGVyOiRBdCxleGl0OmU0dCxqb2luOm40dCxtZXJnZTpvNHQsb3JkZXI6czR0LHNvcnQ6YzR0LGNhbGw6aDR0LG5vZGVzOnA0dCxub2RlOm00dCxzaXplOl80dCxlbXB0eTp2NHQsZWFjaDpiNHQsYXR0cjpTNHQsc3R5bGU6RTR0LHByb3BlcnR5OkM0dCxjbGFzc2VkOlI0dCx0ZXh0OkQ0dCxodG1sOno0dCxyYWlzZTpCNHQsbG93ZXI6VjR0LGFwcGVuZDpxNHQsaW5zZXJ0Olc0dCxyZW1vdmU6ajR0LGNsb25lOiQ0dCxkYXR1bTpaNHQsb246clB0LGRpc3BhdGNoOmlQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgYVB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgc1B0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBsUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57c1B0KCk7YVB0KCk7bFB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBjUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciB1UHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gYTRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBzNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGw0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBjNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gaFB0KCl7dmFyIGU9YTRlLHQ9czRlLHI9bDRlLG49YzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGZQdD1NKCgpPT57RkF0KCk7U04oKTtTWigpO3daKCk7Y1B0KCk7dVB0KCl9KTt2YXIgcFB0PU0oKCk9PntmUHQoKTtTWigpfSk7ZnVuY3Rpb24gbVB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gdTRlKGUsdCl7dmFyIHI9bVB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gaDRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P3U0ZShkLHUpOm1QdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSxkUHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PWRQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1oNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciBkUHQsTVosRVosYlQsVFosQ049TSgoKT0+e2RQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixnUHQsX1B0LHlQdCx2UHQseFB0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZ1B0PUFOLnBhcnNlLF9QdD1BTi5wYXJzZVJvd3MseVB0PUFOLmZvcm1hdCx2UHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixiUHQsd1B0LFNQdCxNUHQsRVB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksYlB0PVBOLnBhcnNlLHdQdD1QTi5wYXJzZVJvd3MsU1B0PVBOLmZvcm1hdCxNUHQ9UE4uZm9ybWF0Um93c30pO3ZhciBUUHQ9TSgoKT0+e0NOKCk7eFB0KCk7RVB0KCl9KTtmdW5jdGlvbiBDUHQoZSl7cmV0dXJuK2V9dmFyIEFQdD1NKCgpPT57fSk7ZnVuY3Rpb24gUFB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gSVB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBMUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGtQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUlB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgTlB0PU0oKCk9Pnt9KTt2YXIgUFosRFB0LE9QdCxJWix6UHQ9TSgoKT0+e1BaPTMsRFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLE9QdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGguY29zKGUqQlB0KX1mdW5jdGlvbiBWUHQoZSl7cmV0dXJuIE1hdGguc2luKGUqQlB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhGUHQqZSkpLzJ9dmFyIEZQdCxCUHQsVVB0PU0oKCk9PntGUHQ9TWF0aC5QSSxCUHQ9RlB0LzJ9KTtmdW5jdGlvbiBxUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gR1B0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFdQdD1NKCgpPT57fSk7ZnVuY3Rpb24gWVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24galB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBYUHQ9TSgoKT0+e30pO2Z1bmN0aW9uICRQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxwNGU/SU4qKGUtPWY0ZSkqZStkNGU6ZTxnNGU/SU4qKGUtPW00ZSkqZStfNGU6SU4qKGUtPXk0ZSkqZSt2NGV9ZnVuY3Rpb24gS1B0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosZjRlLHA0ZSxkNGUsbTRlLGc0ZSxfNGUseTRlLHY0ZSxJTixaUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxmNGU9Ni8xMSxwNGU9OC8xMSxkNGU9My80LG00ZT05LzExLGc0ZT0xMC8xMSxfNGU9MTUvMTYseTRlPTIxLzIyLHY0ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLEpQdCxRUHQsT1osdDZ0PU0oKCk9PntEWj0xLjcwMTU4LEpQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSxRUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixlNnQsQloscjZ0LG42dD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsZTZ0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLHI2dD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIGk2dD1NKCgpPT57QVB0KCk7TFB0KCk7TlB0KCk7elB0KCk7VVB0KCk7V1B0KCk7WFB0KCk7WlB0KCk7dDZ0KCk7bjZ0KCl9KTtmdW5jdGlvbiBvNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgYTZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gbDZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gbDZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIGM2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilsNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIHU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gaDZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBmNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBkNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZzZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIF82dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHk2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIHY2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB4NnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBiNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHc2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciBTNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE02dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIEU2dD1NKCgpPT57fSk7ZnVuY3Rpb24gVDZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIEM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIEE2dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgUDZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gSTZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEw2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIGs2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUjZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE42dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEQ2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP0k2dDp0LHI9PW51bGw/UjZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gTzZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsejZ0PU0oKCk9Pnt1NnQoKTtmNnQoKTtkNnQoKTtnNnQoKTt5NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtDNnQoKTtQNnQoKTtrNnQoKTtENnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1PNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1PNnQobikpO3JldHVybiBlfTtHYS5hZGQ9czZ0O0dhLmFkZEFsbD1jNnQ7R2EuY292ZXI9aDZ0O0dhLmRhdGE9cDZ0O0dhLmV4dGVudD1tNnQ7R2EuZmluZD1fNnQ7R2EucmVtb3ZlPXY2dDtHYS5yZW1vdmVBbGw9eDZ0O0dhLnJvb3Q9dzZ0O0dhLnNpemU9TTZ0O0dhLnZpc2l0PVQ2dDtHYS52aXNpdEFmdGVyPUE2dDtHYS54PUw2dDtHYS55PU42dH0pO3ZhciBWWj1NKCgpPT57ejZ0KCl9KTtmdW5jdGlvbiB4NGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIGI0ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gRjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQseDRlLGI0ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBCNnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gSDZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9SDZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1INnR9KTt2YXIgVjZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24gdzRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksVTZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9dzRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIHE2dD1NKCgpPT57fSk7dmFyIEc2dD1NKCgpPT57fSk7dmFyIFc2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9PntWNnQoKTtVNnQoKTtOTigpO3E2dCgpO0c2dCgpO1c2dCgpfSk7ZnVuY3Rpb24gUzRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFk2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBqNnQoZSl7dmFyIHQ9UzRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVk2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVk2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBYNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gSzZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEU0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFQ0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uICQ2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TTRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTTRlLHFaLFo2dD1NKCgpPT57TTRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1LNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUU0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVQ0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09JDZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09JDZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9SzZ0fSk7dmFyIEo2dD1NKCgpPT57WjZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KGVJdChDNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBDNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gckl0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiBRNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e3JJdCgpfWZpbmFsbHl7RTI9MCxQNGUoKSxQeT0wfX1mdW5jdGlvbiBBNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD50SXQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBQNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dChRNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChBNGUsdEl0KSksRTI9MSxlSXQoUTZ0KSl9fXZhciBFMixTVCx3VCx0SXQsek4sTVQsRk4sUHksQk4sRVQsZUl0LG5JdD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsdEl0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxlSXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIGlJdD1NKCgpPT57bkl0KCl9KTtmdW5jdGlvbiBvSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBhSXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBzSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1JNGUqTWF0aC5zcXJ0KGQpLHg9ZCpMNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIEk0ZSxMNGUsalo9TSgoKT0+e0o2dCgpO1VaKCk7aUl0KCk7STRlPTEwLEw0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBsSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsb0l0LGFJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgY0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gdUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBoSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBmSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIHBJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIGRJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgbUl0PU0oKCk9PntUeSgpfSk7dmFyIGdJdD1NKCgpPT57YTZ0KCk7QjZ0KCk7WDZ0KCk7Y0l0KCk7aEl0KCk7alooKTtwSXQoKTttSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gX0l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciB5SXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZJdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIHhJdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkl0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgd0l0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTSXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIE1JdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57d0l0KCk7JFooKTtNSXQoKTtVTj17IiI6Ykl0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6U0l0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1rNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBrNGUsUVo9TSgoKT0+e1paKCk7azRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBFSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP19JdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP3ZJdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP1RJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPVRJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgVEl0LGVKPU0oKCk9PntUVCgpO3lJdCgpO3hJdCgpO1FaKCk7WlooKTskWigpO0VJdCgpO1RJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixDSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBBSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIFBJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIElJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgTEl0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24ga0l0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFJJdD1NKCgpPT57VFQoKX0pO3ZhciBOSXQ9TSgoKT0+e0NJdCgpO2VKKCk7UVooKTtQSXQoKTtMSXQoKTtSSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBESXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtESXQoWU4sZSx0aGlzLnQpLERJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmekl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJnpJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gRkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYmT0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/T0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBPSXQsekl0LG1nPU0oKCk9PntPSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LHpJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtGSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylGSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFI0ZSgpe0V1LnBvaW50PUQ0ZX1mdW5jdGlvbiBONGUoKXtWSXQoQkl0LEhJdCl9ZnVuY3Rpb24gRDRlKGUsdCl7RXUucG9pbnQ9Vkl0LEJJdD1lLEhJdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIFZJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gVUl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLEJJdCxISXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1SNGUsRXUubGluZUVuZD1ONGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBYSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIHFJdCgpe0twLnBvaW50PVhJdH1mdW5jdGlvbiBHSXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uICRJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFlJdD1lLGpJdD10O0V1LnBvaW50KGUsdCksWEl0KGUsdCl9ZnVuY3Rpb24gTzRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gejRlKCl7JEl0KFlJdCxqSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIEY0ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gV0l0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBLSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChGNGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxXSXQobixpWzBdKXx8V0l0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxZSXQsakl0LFAyLExULGdnLFpwLEtwLFpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpxSXQsbGluZUVuZDpHSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9JEl0LEtwLmxpbmVTdGFydD1PNGUsS3AubGluZUVuZD16NGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9cUl0LEtwLmxpbmVFbmQ9R0l0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIEpJdCgpe1R1LnBvaW50PUI0ZX1mdW5jdGlvbiBCNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9SDRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBINGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBRSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiBWNGUoKXtUdS5wb2ludD1xNGV9ZnVuY3Rpb24gVTRlKCl7cjl0KHQ5dCxlOXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIHE0ZShlLHQpe3Q5dD1lLGU5dD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PXI5dDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIHI5dChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gbjl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLHQ5dCxlOXQsV2EsWWEsamEsVHUsaTl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpKSXQsbGluZUVuZDpRSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PVY0ZSxUdS5saW5lRW5kPVU0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1KSXQsVHUubGluZUVuZD1RSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgbzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qoczl0KGUpLGw5dCh0LHIpKTpzOXQoZSk6dHx8cj9sOXQodCxyKTpfSn1mdW5jdGlvbiBhOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIHM5dChlKXt2YXIgdD1hOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PWE5dCgtZSksdH1mdW5jdGlvbiBsOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPWM5dChhLGkpLG89Yzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gYzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIHU5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtvOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLGg5dChvKSxoOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGg5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1HNGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBHNGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBmOXQsVzRlLFk0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2Y5dD1FSihfZyksVzRlPWY5dC5yaWdodCxZNGU9Zjl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBwOXQ9TSgoKT0+e0FKKCl9KTt2YXIgZDl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIG05dCxYNGUsJDRlLGtKPU0oKCk9PnttOXQ9QXJyYXkucHJvdG90eXBlLFg0ZT1tOXQuc2xpY2UsJDRlPW05dC5tYXB9KTt2YXIgZzl0PU0oKCk9Pnt9KTt2YXIgXzl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBrMG4sUjBuLE4wbixOSj1NKCgpPT57azBuPU1hdGguc3FydCg1MCksUjBuPU1hdGguc3FydCgxMCksTjBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIHk5dD1NKCgpPT57a0ooKTtDSigpO2c5dCgpO0xKKCk7Xzl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIGI5dD1NKCgpPT57SUooKX0pO3ZhciB3OXQ9TSgoKT0+e30pO3ZhciBTOXQ9TSgoKT0+e0wyKCl9KTt2YXIgTTl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIEU5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgVDl0PU0oKCk9Pnt9KTt2YXIgQzl0PU0oKCk9PntGeSgpfSk7dmFyIEE5dD1NKCgpPT57fSk7dmFyIFA5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIEk5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7cDl0KCk7ZDl0KCk7SUooKTtMSigpO3k5dCgpO3g5dCgpO2I5dCgpO0RKKCk7dzl0KCk7Uzl0KCk7TTl0KCk7RTl0KCk7T0ooKTtBSigpO1Q5dCgpO2REKCk7UkooKTtDOXQoKTtBOXQoKTtQOXQoKTtOSigpO3pKKCk7UEooKTtJOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsaVBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoblBlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBuUGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gaVBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIG9QZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9YVBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gYVBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBzUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sb1BlLHNQZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gTDl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIGs5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0w5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7azl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBSOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgTjl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gbFBlKCl7azIucG9pbnQ9dVBlLGsyLmxpbmVFbmQ9Y1BlfWZ1bmN0aW9uIGNQZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gdVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1oUGV9ZnVuY3Rpb24gaFBlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6bFBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGZQZSl9dmFyIEdKLGZQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxmUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJk85dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP085dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIEY5dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEI5dChlLHQpe3JldHVybiEhZkQoZS5tYXAocFBlKSxIOXQodCkpfWZ1bmN0aW9uIHBQZShlKXtyZXR1cm4gZT1lLm1hcChIOXQpLGUucG9wKCksZX1mdW5jdGlvbiBIOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gVjl0KGUsdCl7cmV0dXJuKGUmJkQ5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0Q5dFtlLnR5cGVdOndEKShlLHQpfXZhciBEOXQsTzl0LFU5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7RDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sTzl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gejl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKHo5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEY5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEY5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEI5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gcTl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gRzl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXE5dChvLGksOTApLHA9Rzl0KHQsZSxfKSxkPXE5dChzLGEsOTApLGc9Rzl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBXOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBZOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIGo5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBYOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRQZSgpe3lnLnBvaW50PW1QZX1mdW5jdGlvbiBtUGUoZSx0KXt5Zy5wb2ludD1aOXQsJDl0PVhKPWUsSzl0PSRKPXR9ZnVuY3Rpb24gWjl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGdQZSgpe1o5dCgkOXQsSzl0KX12YXIgWUosakosJDl0LEs5dCxYSiwkSix5ZyxLSixKOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PWRQZSx5Zy5saW5lRW5kPWdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24geVBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxfUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxfUGU9e3BvaW50OnlQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1fUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gUTl0KCl7Q3UucG9pbnQ9dlBlfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PXhQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIHhQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiB0THQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBiUGUoKXtDdS5wb2ludD1TUGV9ZnVuY3Rpb24gd1BlKCl7bkx0KGVMdCxyTHQpfWZ1bmN0aW9uIFNQZShlLHQpe0N1LnBvaW50PW5MdCxIeShlTHQ9b2Y9ZSxyTHQ9YWY9dCl9ZnVuY3Rpb24gbkx0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsZUx0LHJMdCxvZixhZixDdSxyUSxpTHQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDpROXQsbGluZUVuZDp0THQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PWJQZSxDdS5saW5lRW5kPXdQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD1ROXQsQ3UubGluZUVuZD10THR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIG9MdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIE1QZShlLHQpe0lELnBvaW50PWxMdCxhTHQ9cVQ9ZSxzTHQ9R1Q9dH1mdW5jdGlvbiBsTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLGFMdCxzTHQscVQsR1QsSUQsb1EsY0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD1NUGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmbEx0KGFMdCxzTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB1THQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIGhMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOnVMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPXVMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gZkx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBwTHQ9TSgoKT0+e01EKCk7bWcoKTtKOXQoKTtaSigpO2lMdCgpO29MdCgpO2NMdCgpO2hMdCgpfSk7ZnVuY3Rpb24gZEx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9DUGUoZSx0KTpUUGUoZSl9ZnVuY3Rpb24gVFBlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIENQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPEVQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxtTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLG1MdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBtTHQsRVBlLGdMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7bUx0PTE2LEVQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBQUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1BUGUoUFBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIEFQZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Z0x0KCk7QVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gX0x0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIHlMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gX0x0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTt5THQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gSVBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiB2THQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1JUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgeEx0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBiTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQsd0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gU0x0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCxNTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBFTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiBUTHQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIENMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIEFMdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIFBMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgSUx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gTEx0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBrTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFJMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBOTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBETHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBPTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gekx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgRkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIEJMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgSEx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIFZMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIFVMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIHFMdD1NKCgpPT57dUooKTtaSXQoKTtpOXQoKTt2SigpO0JKKCk7SEooKTtOOXQoKTtCVCgpO1U5dCgpO1dKKCk7WTl0KCk7WDl0KCk7cUooKTtwTHQoKTt1USgpO3hMdCgpO3dMdCgpO01MdCgpO0NMdCgpO05EKCk7SUx0KCk7cFEoKTtrTHQoKTtOTHQoKTtBdSgpO0JEKCk7T0x0KCk7Rkx0KCk7SEx0KCk7VUx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBMUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24ga1BlKGUpe3JldHVybiBlLnJlZHVjZShSUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUlBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIE5QZShlKXtyZXR1cm4gMStlLnJlZHVjZShEUGUsMCl9ZnVuY3Rpb24gRFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBPUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIHpQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gR0x0KCl7dmFyIGU9TFBlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1rUGUocCksZi55PU5QZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1PUGUobyksYz16UGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFdMdD1NKCgpPT57fSk7ZnVuY3Rpb24gRlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFlMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihGUGUpfXZhciBqTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgJEx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgWkx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIGVrdD1NKCgpPT57fSk7ZnVuY3Rpb24gcmt0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KGUpe2Zvcih2YXIgdD10aGlzLHI9QlBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gQlBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgb2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBha3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIHNrdD1NKCgpPT57fSk7ZnVuY3Rpb24gbGt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBja3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHVrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgaGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBma3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIHBrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1WUGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBIUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShVUGUpfWZ1bmN0aW9uIFZQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBVUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTtoa3QoKTtwa3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpZTHQsZWFjaDpYTHQsZWFjaEFmdGVyOkpMdCxlYWNoQmVmb3JlOktMdCxzdW06dGt0LHNvcnQ6cmt0LHBhdGg6aWt0LGFuY2VzdG9yczpha3QsZGVzY2VuZGFudHM6bGt0LGxlYXZlczp1a3QsbGlua3M6Zmt0LGNvcHk6SFBlfX0pO2Z1bmN0aW9uIG1rdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgZGt0LGdrdD1NKCgpPT57ZGt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9bWt0KGRrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJl9rdChvLGkpPysrdDoobz1HUGUobj1xUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBxUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKHlrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gX2t0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighX2t0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gR1BlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBXUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4geWt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gV1BlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHlrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Z2t0KCl9KTtmdW5jdGlvbiB2a3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24geGt0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIGJrdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7dmt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXt2a3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoeGt0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoeGt0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWJrdCh0KTsobj1uLm5leHQpIT09cjspKGE9Ymt0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB3a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gU2t0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBZUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBUa3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoTWt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoRWt0KDEpKTpvLmVhY2hCZWZvcmUoTWt0KFlQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKEVrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Ta3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIE1rdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBFa3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIENrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gQWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIFBrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gWFBlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uICRQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBra3QoKXt2YXIgZT1YUGUsdD0kUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9SWt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0xrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtJa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Ma3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1qUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBJa3QsalBlLExrdCxSa3Q9TSgoKT0+e1pEKCk7akQoKTtJa3Q9IiQiLGpQZT17ZGVwdGg6LTF9LExrdD17fX0pO2Z1bmN0aW9uIEtQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gWlBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIEpQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBRUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiB0NmUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gTmt0KCl7dmFyIGU9S1BlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dDZlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe0pQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoWlBlKFFQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBEa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIE9rdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciB6a3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBGa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgQmt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciBWa3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBVa3QscWt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtVa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgR2t0PU0oKCk9PntXTHQoKTtqRCgpO0NrdCgpO3ZRKCk7X1EoKTtQa3QoKTtSa3QoKTtEa3QoKTt6a3QoKTtCa3QoKTtVMigpOyRUKCk7Vmt0KCk7ZU8oKTtxa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFlrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGw2ZSgpe3JldHVybiBKa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gamt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9ZTZlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/WGt0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1yNmUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PW42ZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9aTZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PW82ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1hNmUuZXhlYyhlKSk/Wmt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9czZlLmV4ZWMoZSkpP1prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOldrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ya3QoV2t0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBYa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBLa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWmt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gSmt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Smt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixlNmUscjZlLG42ZSxpNmUsbzZlLGE2ZSxzNmUsV2t0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixlNmU9L14jKFswLTlhLWZdezMsOH0pJC8scjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxuNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLGk2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLG82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLGE2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksczZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksV2t0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OllrdCxmb3JtYXRIZXg6WWt0LGZvcm1hdEhzbDpsNmUsZm9ybWF0UmdiOmprdCx0b1N0cmluZzpqa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6JGt0LGZvcm1hdEhleDoka3QsZm9ybWF0UmdiOktrdCx0b1N0cmluZzpLa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGk4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gbzh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvdDh0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL1FrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL2U4dCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2k4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5jNmU/TWF0aC5wb3coZSwxLzMpOmUvbjh0K3I4dH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpuOHQqKGUtcjh0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHU2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9aTh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG84dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLFFrdCx0OHQsZTh0LHI4dCxXMixuOHQsYzZlLGE4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsUWt0PS45NjQyMix0OHQ9MSxlOHQ9LjgyNTIxLHI4dD00LzI5LFcyPTYvMjksbjh0PTMqVzIqVzIsYzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1Ra3QqTFEodCksZT10OHQqTFEoZSkscj1lOHQqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG84dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBoNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oYzh0Km4rczh0KnQtbDh0KnIpLyhjOHQrczh0LWw4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9oNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHU4dCxOUSxEUSxsTyx0QyxzOHQsbDh0LGM4dCxoOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO3U4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsczh0PXRDKmxPLGw4dD10QypOUSxjOHQ9TlEqRFEtbE8qdTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKih1OHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7YTh0KCk7aDh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGY4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGY2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBwOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9mNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2Y4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gZDh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLG04dCxnOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1wOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7bTh0PWQ4dChjTyksZzh0PWQ4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gcDZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBkNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/ZDZlKGxbMF0ueCk6cDZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gXzh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciB5OHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnY4dCxza2V3WDpNYXRoLmF0YW4obCkqdjh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgdjh0LF9PLHg4dD1NKCgpPT57djh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gdzh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxiOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Yjh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFM4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLGI4dCx5TyxNOHQ9TSgoKT0+e3g4dCgpfSk7ZnVuY3Rpb24gRTh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBUOHQsQzh0LEE4dD1NKCgpPT57ckMoKTtNOHQoKTtUOHQ9RTh0KHc4dCwicHgsICIsInB4KSIsImRlZykiKSxDOHQ9RTh0KFM4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gSTh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGc2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBfNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEw4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8bTZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK1A4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktUDh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9STh0KF8pLEM9aS8oWFEqcCkqKFMqXzZlKGlDKmIrXyktZzZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0k4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsUDh0LG02ZSxrOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixQOHQ9NCxtNmU9MWUtMTJ9KTtmdW5jdGlvbiBSOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIE44dCxEOHQsTzh0PU0oKCk9PntqeSgpO0syKCk7Tjh0PVI4dCgkMiksRDh0PVI4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciB6OHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgQjh0LEg4dCxWOHQ9TSgoKT0+e2p5KCk7SzIoKTtCOHQ9Rjh0KCQyKSxIOHQ9Rjh0KEpuKX0pO2Z1bmN0aW9uIFU4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIHE4dCxHOHQsVzh0PU0oKCk9PntqeSgpO0syKCk7cTh0PVU4dCgkMiksRzh0PVU4dChKbil9KTtmdW5jdGlvbiBZOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgajh0PU0oKCk9Pnt9KTt2YXIgWDh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO3k4dCgpO1dRKCk7QTh0KCk7azh0KCk7QlEoKTtPOHQoKTt6OHQoKTtWOHQoKTtXOHQoKTtqOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gJDh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHkseTZlLEs4dCxaOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LHk2ZT1aUS1YeTtKUS5wcm90b3R5cGU9JDh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+eTZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O0s4dD0kOHR9KTt2YXIgSjh0PU0oKCk9PntaOHQoKX0pO2Z1bmN0aW9uIFE4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIHRSdD1NKCgpPT57fSk7ZnVuY3Rpb24gZVJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgclJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuUnQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciBpUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY2ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBvUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmblJ0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGFSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KHY2ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89b1J0KG4pLGE9b1J0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBzUnQ9TSgoKT0+e2lSdCgpfSk7ZnVuY3Rpb24gbFJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgY1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1UnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIGhSdD1NKCgpPT57fSk7dmFyIGZSdD1NKCgpPT57dFJ0KCk7clJ0KCk7c1J0KCk7Y1J0KCk7aFJ0KCl9KTtmdW5jdGlvbiBwUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiBkUnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiBkUnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gbVJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilkUnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGdSdD1NKCgpPT57fSk7ZnVuY3Rpb24gX1J0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciB5UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZSdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB4UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgd1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIFNSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIE1SdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIEVSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBUUnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBDUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFSdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBQUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIElSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIExSdD1NKCgpPT57fSk7ZnVuY3Rpb24ga1J0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFJSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIE5SdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24gT1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHpSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQlJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEhSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIFZSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP09SdDp0LHI9PW51bGw/QlJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gVVJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEscVJ0PU0oKCk9PntnUnQoKTt5UnQoKTt4UnQoKTt3UnQoKTtNUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtSUnQoKTtEUnQoKTtGUnQoKTtWUnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1VUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1VUnQobikpO3JldHVybiBlfTtYYS5hZGQ9cFJ0O1hhLmFkZEFsbD1tUnQ7WGEuY292ZXI9X1J0O1hhLmRhdGE9dlJ0O1hhLmV4dGVudD1iUnQ7WGEuZmluZD1TUnQ7WGEucmVtb3ZlPUVSdDtYYS5yZW1vdmVBbGw9VFJ0O1hhLnJvb3Q9QVJ0O1hhLnNpemU9SVJ0O1hhLnZpc2l0PWtSdDtYYS52aXNpdEFmdGVyPU5SdDtYYS54PXpSdDtYYS55PUhSdH0pO3ZhciBHUnQ9TSgoKT0+e3FSdCgpfSk7dmFyIFdSdCxZUnQ9TSgoKT0+e1dSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBqUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtiNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gYjZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09dzZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8eDZlKX19ZnVuY3Rpb24gdzZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/alJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIHg2ZSxYUnQ9TSgoKT0+e1lSdCgpO3g2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVdSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLGpSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgJFJ0PU0oKCk9PntYUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgSlJ0LFFSdD1NKCgpPT57JHkoKTtydHQoKTtKUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50LGVOdD1NKCgpPT57JHkoKTtudHQoKTt0TnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciByTnQsbk50PU0oKCk9PnskeSgpO3JOdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgaU50PU0oKCk9PntaUnQoKTtydHQoKTtRUnQoKTtlTnQoKTtudHQoKTtuTnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZNNmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9UzZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIFM2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24gTTZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBvTnQsYU50PU0oKCk9PntvQygpO29OdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgc050LGxOdD1NKCgpPT57b0MoKTtzTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e29DKCk7Y050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBoTnQsZk50PU0oKCk9PntvQygpO2hOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKEU2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gRTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIHBOdCxkTnQ9TSgoKT0+e3FFKCk7aXR0KCk7cE50PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIG1OdCxnTnQ9TSgoKT0+e3FFKCk7aXR0KCk7bU50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgX050PU0oKCk9PntFTygpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpO2ROdCgpO2dOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1UNmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBUNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgeU50LHZOdCxDNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO3lOdD1hQyhwZiksdk50PXlOdC5yaWdodCxDNmU9eU50LmxlZnQsZGY9dk50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57c3R0KCl9KTt2YXIgYk50PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHdOdCxQNmUsSTZlLGh0dD1NKCgpPT57d050PUFycmF5LnByb3RvdHlwZSxQNmU9d050LnNsaWNlLEk2ZT13TnQubWFwfSk7dmFyIFNOdD1NKCgpPT57fSk7dmFyIE1OdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO1NOdCgpO3V0dCgpO01OdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIFROdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgQ050PU0oKCk9PntjdHQoKX0pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e3R3KCl9KTt2YXIgSU50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBMTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBrTnQ9TSgoKT0+e30pO3ZhciBSTnQ9TSgoKT0+e0t5KCl9KTt2YXIgTk50PU0oKCk9Pnt9KTt2YXIgRE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBPTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO3hOdCgpO2JOdCgpO2N0dCgpO3V0dCgpO0VOdCgpO1ROdCgpO0NOdCgpO190dCgpO0FOdCgpO1BOdCgpO0lOdCgpO0xOdCgpO3l0dCgpO3N0dCgpO2tOdCgpO0FPKCk7ZnR0KCk7Uk50KCk7Tk50KCk7RE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7T050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiB6TnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT16TnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PXpOdH0pO3ZhciBGTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBPNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxCTnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1PNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgSE50PU0oKCk9Pnt9KTt2YXIgVk50PU0oKCk9Pnt9KTt2YXIgVU50PU0oKCk9Pnt9KTt2YXIgcU50PU0oKCk9PntGTnQoKTtCTnQoKTtJTygpO0hOdCgpO1ZOdCgpO1VOdCgpfSk7dmFyIEdOdCxydyxwbCxDZz1NKCgpPT57R050PUFycmF5LnByb3RvdHlwZSxydz1HTnQubWFwLHBsPUdOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57cU50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gV050KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdOdCh0KCkpfSxlfWZ1bmN0aW9uIFlOdCgpe3JldHVybiBXTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBqTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gJE50KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRzZlKCl7cmV0dXJuIGVEdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBLTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD16NmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9aTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PUY2ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9QjZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1INmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9VjZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PVU2ZS5leGVjKGUpKT90RHQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1xNmUuZXhlYyhlKSk/dER0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6WE50Lmhhc093blByb3BlcnR5KGUpP1pOdChYTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBKTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gUU50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB0RHQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBlRHQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIHJEdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/ZUR0KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsejZlLEY2ZSxCNmUsSDZlLFY2ZSxVNmUscTZlLFhOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6NmU9L14jKFswLTlhLWZdezMsOH0pJC8sRjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxCNmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLEg2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLFY2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLFU2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIikscTZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksWE50PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiROdCxmb3JtYXRIZXg6JE50LGZvcm1hdEhzbDpHNmUsZm9ybWF0UmdiOktOdCx0b1N0cmluZzpLTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Sk50LGZvcm1hdEhleDpKTnQsZm9ybWF0UmdiOlFOdCx0b1N0cmluZzpRTnR9KSk7aXcoZ2YsckR0LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBuRHQsaUR0LG9EdD1NKCgpPT57bkR0PU1hdGguUEkvMTgwLGlEdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFc2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obER0Km4rYUR0KnQtc0R0KnIpLyhsRHQrYUR0LXNEdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKmlEdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1c2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgY0R0LFR0dCxDdHQsTk8sZkMsYUR0LHNEdCxsRHQsdUR0PU0oKCk9PntidHQoKTtFdHQoKTtvRHQoKTtjRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsYUR0PWZDKk5PLHNEdD1mQypUdHQsbER0PVR0dCpDdHQtTk8qY0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbkR0LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrciooY0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO3VEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gaER0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgcER0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBkRHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBZNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBtRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGdEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1k2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/ZER0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIF9EdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsXzVuLHk1bix5RHQ9TSgoKT0+e3N3KCk7UHR0KCk7cER0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z0R0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO181bj1fRHQoaER0KSx5NW49X0R0KGZEdCl9KTtmdW5jdGlvbiB2RHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24geER0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgYkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciBTRHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBFRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gVER0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgQ0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gajZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBYNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBBRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/WDZlKGxbMF0ueCk6ajZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LFBEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOkFEdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP01EdDp4RHQodCk/dkR0OkFycmF5LmlzQXJyYXkodCk/d0R0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT9URHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO3lEdCgpO1NEdCgpO0VEdCgpO09PKCk7Q0R0KCk7UER0KCk7SXR0KCk7YkR0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIElEdD1NKCgpPT57fSk7ZnVuY3Rpb24gTER0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgJDZlLGN3LGtEdD1NKCgpPT57c3coKTtMdHQoKTskNmU9TER0KG1EdCksY3c9TER0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO0lEdCgpO2tEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gSzZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIFo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBKNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gUTZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UkR0LG49UkR0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/UTZlOko2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/SzZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP1o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBSRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UkR0PVswLDFdfSk7ZnVuY3Rpb24gTkR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIEREdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBGRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD10SWUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciB0SWUsenR0PU0oKCk9Pnt0SWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEJEdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgSER0PU0oKCk9Pnt9KTtmdW5jdGlvbiBWRHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBVRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LHFEdD1NKCgpPT57bUMoKTtCdHQoKTtVRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpORHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOlZEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBHRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6RER0KFdEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OnpEdChXRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9QkR0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/WUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1ZRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFdEdCxZRHQsWER0PU0oKCk9PntnQygpO09EdCgpO0ZEdCgpO3p0dCgpO0hEdCgpO3FEdCgpO0J0dCgpO0dEdCgpO1dEdD1BcnJheS5wcm90b3R5cGUubWFwLFlEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89akR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLCREdD1NKCgpPT57WER0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgS0R0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBaRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgSkR0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57JER0KCk7enR0KCk7S0R0KCk7WkR0KCk7SkR0KCl9KTtmdW5jdGlvbiBRRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciB0T3Q9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUUR0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO3RPdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIGVPdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBlSWUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBySWUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIG5JZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gck90KGUpe3JldHVybiBlPT09MTA/bkllOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIG5PdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gaU90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoZUllLHJJZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49bk90KDEwKSxpPXJPdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPW5PdChyKSxpPXJPdChyKSx0KClbMF08MCYmKG49aU90KG4pLGk9aU90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBvT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIGFPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgc090PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGxPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBjT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgdU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LGhPdCxmT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxoT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgcE90LF93LGRPdCxtT3Q9TSgoKT0+e0thKCk7eGYoKTtwT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1wT3QsZE90PXBPdC5yYW5nZX0pO3ZhciBnT3QsWnR0LGlJZSxfT3Q9TSgoKT0+e0thKCk7eGYoKTtnT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Z090LGlJZT1nT3QucmFuZ2V9KTt2YXIgeU90LEp0dCxvSWUsdk90PU0oKCk9PntLYSgpO3hmKCk7eU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD15T3Qsb0llPXlPdC5yYW5nZX0pO3ZhciB4T3QseXcsYUllLGJPdD1NKCgpPT57S2EoKTt4ZigpO3hPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9eE90LGFJZT14T3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3Ysdncsd090LFNPdCxrZyxNT3QsRU90LFRPdCxzSWUsbEllLGNJZSx1SWUsaEllLGZJZSxDT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx3T3Q9YXYoMiksU090PWF2KDMpLGtnPWF2KDQpLE1PdD1hdig1KSxFT3Q9YXYoNiksVE90PXN2LnJhbmdlLHNJZT12dy5yYW5nZSxsSWU9d090LnJhbmdlLGNJZT1TT3QucmFuZ2UsdUllPWtnLnJhbmdlLGhJZT1NT3QucmFuZ2UsZkllPUVPdC5yYW5nZX0pO3ZhciBBT3QsUXR0LHBJZSxQT3Q9TSgoKT0+e0thKCk7QU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1BT3QscEllPUFPdC5yYW5nZX0pO3ZhciB0ZXQsYWQsZEllLElPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsZEllPXRldC5yYW5nZX0pO3ZhciBMT3QsZWV0LG1JZSxrT3Q9TSgoKT0+e0thKCk7eGYoKTtMT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9TE90LG1JZT1MT3QucmFuZ2V9KTt2YXIgUk90LHJldCxnSWUsTk90PU0oKCk9PntLYSgpO3hmKCk7Uk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVJPdCxnSWU9Uk90LnJhbmdlfSk7dmFyIERPdCx4dyxfSWUsT090PU0oKCk9PntLYSgpO3hmKCk7RE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PURPdCxfSWU9RE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsek90LEZPdCxSZyxCT3QsSE90LFZPdCx5SWUsdkllLHhJZSxiSWUsd0llLFNJZSxVT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSx6T3Q9bHYoMiksRk90PWx2KDMpLFJnPWx2KDQpLEJPdD1sdig1KSxIT3Q9bHYoNiksVk90PWN2LnJhbmdlLHlJZT1idy5yYW5nZSx2SWU9ek90LnJhbmdlLHhJZT1GT3QucmFuZ2UsYkllPVJnLnJhbmdlLHdJZT1CT3QucmFuZ2UsU0llPUhPdC5yYW5nZX0pO3ZhciBxT3QsbmV0LE1JZSxHT3Q9TSgoKT0+e0thKCk7cU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1xT3QsTUllPXFPdC5yYW5nZX0pO3ZhciBpZXQsc2QsRUllLFdPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsRUllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57Zk90KCk7bU90KCk7X090KCk7dk90KCk7Yk90KCk7Q090KCk7UE90KCk7SU90KCk7a090KCk7Tk90KCk7T090KCk7VU90KCk7R090KCk7V090KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOlpPdCxlOlpPdCxmOlhJZSxnOmk5ZSxHOmE5ZSxIOldJZSxJOllJZSxqOmpJZSxMOnI3dCxtOiRJZSxNOktJZSxwOnN0LHE6U3QsUTp0N3QsczplN3QsUzpaSWUsdTpKSWUsVTpRSWUsVjp0OWUsdzplOWUsVzpyOWUseDpudWxsLFg6bnVsbCx5Om45ZSxZOm85ZSxaOnM5ZSwiJSI6UU90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOkpPdCxlOkpPdCxmOmg5ZSxnOmI5ZSxHOlM5ZSxIOmw5ZSxJOmM5ZSxqOnU5ZSxMOmk3dCxtOmY5ZSxNOnA5ZSxwOl90LHE6Y3QsUTp0N3QsczplN3QsUzpkOWUsdTptOWUsVTpnOWUsVjpfOWUsdzp5OWUsVzp2OWUseDpudWxsLFg6bnVsbCx5Ong5ZSxZOnc5ZSxaOk05ZSwiJSI6UU90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6JE90LGU6JE90LGY6VkllLGc6WE90LEc6ak90LEg6S090LEk6S090LGo6ekllLEw6SEllLG06T0llLE06RkllLHA6RCxxOkRJZSxROnFJZSxzOkdJZSxTOkJJZSx1OklJZSxVOkxJZSxWOmtJZSx3OlBJZSxXOlJJZSx4OnosWDpVLHk6WE90LFk6ak90LFo6TkllLCIlIjpVSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1ZT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gWU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQUllKGUpe3JldHVybiBlLnJlcGxhY2UoQ0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKEFJZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIFBJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGtJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gak90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFhPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICRPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6SWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS090KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBVSWUoZSx0LHIpe3ZhciBuPVRJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIHFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFdJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBZSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGpJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gcjd0KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBYSWUoZSx0KXtyZXR1cm4gcjd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gJEllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gS0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWkllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gSkllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBRSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG43dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIHQ5ZShlLHQpe3JldHVybiBlPW43dChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIGU5ZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiByOWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIG45ZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gaTllKGUsdCl7cmV0dXJuIGU9bjd0KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBvOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGE5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gczllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBKT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBsOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gYzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiB1OWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIGk3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gaDllKGUsdCl7cmV0dXJuIGk3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGY5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIHA5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGQ5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIG05ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZzllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBvN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBfOWUoZSx0KXtyZXR1cm4gZT1vN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiB5OWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gdjllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB4OWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGI5ZShlLHQpe3JldHVybiBlPW83dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBTOWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIE05ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gUU90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIHQ3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBlN3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgWU90LFRvLFRJZSxDSWUsYTd0PU0oKCk9PntKTygpO1lPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sVEllPS9eJS8sQ0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxzN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGw3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sczd0LHQ3LGw3dCxjN3Q9TSgoKT0+e2E3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57Yzd0KCl9KTtmdW5jdGlvbiBUOWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIEM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxFOWVdLFt0LDEsdTd0XSxbdCwzLDMqdTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxDOWUpKTpoKCkubWFwKFQ5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gaDd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLEU5ZSx1N3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxFOWU9TUMqNyx1N3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGY3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBwN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciBkN3QsbTd0PU0oKCk9PntTdygpO2Q3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZzd0LF83dD1NKCgpPT57U3coKTtnN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIHk3dCx2N3Q9TSgoKT0+e1N3KCk7eTd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciB4N3QsYjd0PU0oKCk9PntTdygpO3g3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgdzd0LFM3dD1NKCgpPT57c3coKTt1dygpO3c3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiBUN3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIE03dCxFN3QscjcsQzd0PU0oKCk9PntzdygpO3V3KCk7TTd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksRTd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIEE3dCxQN3QsSTd0LEw3dCxrN3Q9TSgoKT0+e1N3KCk7QTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksUDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksSTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksTDd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUjd0PU0oKCk9PntwdygpfSk7dmFyIE43dD1NKCgpPT57ak50KCk7ZU90KCk7cHcoKTtvT3QoKTt4dHQoKTtzT3QoKTtsT3QoKTtjT3QoKTt1T3QoKTtmZXQoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtiN3QoKTtTN3QoKTtDN3QoKTtrN3QoKTtSN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gQTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBQOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/UDllOkE5ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBJOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/STllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBEN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgTzd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBMOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9MOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6N3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBGN3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgSDd0LFR3LEI3dCx1NyxkZXQ9TSgoKT0+e0g3dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoQjd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixIN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEI3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PUg3dH0pO2Z1bmN0aW9uIFY3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIFU3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHE3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEc3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFc3dD1NKCgpPT57fSk7ZnVuY3Rpb24gazllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUjllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9WTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9WTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gajd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9SOWU6azllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rzd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFk3dCxYN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vzd0KCk7WTd0PSIkIn0pO2Z1bmN0aW9uICQ3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIEs3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIFo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dChlKXtlfHwoZT1OOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgcnp0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gbnp0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBpenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG96dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBhenQ9TSgoKT0+e30pO2Z1bmN0aW9uIHN6dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGZ6dD1NKCgpPT57fSk7ZnVuY3Rpb24gcHp0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBEOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIE85ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHo5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBCOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEg5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBtenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/TzllOkQ5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0g5ZTpCOWU6ci5sb2NhbD9GOWU6ejllKShyLHQpKX12YXIgZ3p0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gVjllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFU5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIHE5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBfenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1Y5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9xOWU6VTllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBHOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFc5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gWTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHl6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0c5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ZOWU6VzllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgdnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiB4enQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBienQoZSl9ZnVuY3Rpb24gYnp0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz14enQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB3enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gU3p0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGo5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt3enQodGhpcyxlKX19ZnVuY3Rpb24gWDllKGUpe3JldHVybiBmdW5jdGlvbigpe1N6dCh0aGlzLGUpfX1mdW5jdGlvbiAkOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/d3p0OlN6dCkodGhpcyxlKX19ZnVuY3Rpb24gTXp0KGUsdCl7dmFyIHI9eHp0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj8kOWU6dD9qOWU6WDllKShyLHQpKX12YXIgRXp0PU0oKCk9PntienQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gSzllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBaOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBKOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFR6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9LOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0o5ZTpaOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgQ3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB0TGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gZUxlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gQXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP1E5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZUxlOnRMZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSXp0KCl7cmV0dXJuIHRoaXMuZWFjaChyTGUpfXZhciBMenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG5MZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGt6dCgpe3JldHVybiB0aGlzLmVhY2gobkxlKX12YXIgUnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBOenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgRHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gaUxlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gT3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/aUxlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciB6enQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIG9MZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEZ6dCgpe3JldHVybiB0aGlzLmVhY2gob0xlKX12YXIgQnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gc0xlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEh6dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9zTGU6YUxlKX12YXIgVnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBxenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxMZShlLHQscil7cmV0dXJuIGU9WXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFl6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBjTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIHVMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBoTGUoZSx0LHIpe3ZhciBuPVd6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2xMZTpZenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24ganp0KGUsdCxyKXt2YXIgbj1jTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P2hMZTp1TGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWHp0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBXenQsUHUsR3p0LHA3PU0oKCk9PntXenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoR3p0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEd6dHx8KFd6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiAkenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGZMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkenQodGhpcyxlLHQpfX1mdW5jdGlvbiBwTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gJHp0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIEt6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3BMZTpmTGUpKGUsdCkpfXZhciBaenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBKenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQyxRenQsU2M9TSgoKT0+e083dCgpO0Y3dCgpO1U3dCgpO1g3dCgpO2dldCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO2R6dCgpO2d6dCgpO3lldCgpO3Z6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO1Z6dCgpO3F6dCgpO3A3KCk7Wnp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1KenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6RDd0LHNlbGVjdEFsbDp6N3QsZmlsdGVyOlY3dCxkYXRhOmo3dCxlbnRlcjpxN3QsZXhpdDokN3QsbWVyZ2U6Wjd0LG9yZGVyOlE3dCxzb3J0OmV6dCxjYWxsOm56dCxub2RlczpvenQsbm9kZTpzenQsc2l6ZTpjenQsZW1wdHk6aHp0LGVhY2g6cHp0LGF0dHI6bXp0LHN0eWxlOl96dCxwcm9wZXJ0eTp5enQsY2xhc3NlZDpNenQsdGV4dDpUenQsaHRtbDpBenQscmFpc2U6SXp0LGxvd2VyOmt6dCxhcHBlbmQ6Tnp0LGluc2VydDpPenQscmVtb3ZlOkZ6dCxjbG9uZTpIenQsZGF0dW06VXp0LG9uOmp6dCxkaXNwYXRjaDpLenR9O1F6dD1KenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gdEZ0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBlRnQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrZExlKS50b1N0cmluZygzNil9dmFyIGRMZSxyRnQ9TSgoKT0+e2RMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBuRnQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciBhRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBzRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgbEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBjRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciB1RnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBoRnQ9TSgoKT0+e2VGdCgpO1RDKCk7ckZ0KCk7ZGV0KCk7aUZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7YUZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2xGdCgpO3VGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGZGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LG1MZSxJdSxwRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LG1MZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1mRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+bUxlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1mRnR9KTt2YXIgUHc9TSgoKT0+e3BGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gbUZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLGRGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsZEZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGdMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBfTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gdkxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHhMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBiTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodihkRnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGdGdCgpe3ZhciBlPWdMZSx0PV9MZSxyPUdlKDApLG49bnVsbCxpPXlMZSxvPXZMZSxhPXhMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9iTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KG1GdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgX0Z0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIHlGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyB5RnQoZSl9dmFyIExDPU0oKCk9Pnt5RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiB2RnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIHhGdD1NKCgpPT57fSk7ZnVuY3Rpb24gYkZ0KGUpe3JldHVybiBlfXZhciB3RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNGdCgpe3ZhciBlPWJGdCx0PXZGdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIE1GdD1NKCgpPT57T2coKTt4RnQoKTt3RnQoKTtJdygpfSk7ZnVuY3Rpb24gRUZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEVGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO0VGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciBURnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24gd0xlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBTTGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD13TGUscj1TTGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIE1MZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEVMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIFRMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gQ0Z0KCl7cmV0dXJuIERldChNTGUpfWZ1bmN0aW9uIEFGdCgpe3JldHVybiBEZXQoRUxlKX1mdW5jdGlvbiBQRnQoKXt2YXIgZT1EZXQoVExlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBJRnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBMRnQsQ0xlLE03LEZldD1NKCgpPT57TEZ0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksQ0xlPUxGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIqTEZ0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgQUxlLGtGdCxQTGUsSUxlLEU3LEJldD1NKCgpPT57SXcoKTtBTGU9Ljg5MDgxMzA5MTUyOTI4NTIsa0Z0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxQTGU9TWF0aC5zaW4oTWMvMTApKmtGdCxJTGU9LU1hdGguY29zKE1jLzEwKSprRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpBTGUpLG49UExlKnIsaT1JTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsTExlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksTExlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvTExlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gTkZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBSRnQsREZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UkZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gT0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIHpGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRkZ0KGUpe3JldHVybiBuZXcgekZ0KGUpfXZhciBCRnQ9TSgoKT0+e05DKCk7T0MoKTt6RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIEhGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gVkZ0KGUpe3JldHVybiBuZXcgSEZ0KGUpfXZhciBVRnQ9TSgoKT0+e09DKCk7SEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gcUZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgR0Z0LFdGdD1NKCgpPT57T0MoKTtxRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgcUZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgWUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtZRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIGpGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtqRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIFhGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gJEZ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIEtGdCxrNz1NKCgpPT57SXcoKTt6QygpOyRGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07S0Z0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgJEZ0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBaRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgSkZ0LFFGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO1pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IFpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gdEJ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIGVCdCxyQnQ9TSgoKT0+e1lldCgpO2s3KCk7dEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O2VCdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHRCdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gbkJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBpQnQoZSl7cmV0dXJuIG5ldyBuQnQoZSl9dmFyIG9CdD1NKCgpPT57TkMoKTtuQnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIGFCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gc0J0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGFCdChvKSthQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBsQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIGNCdChlKXt0aGlzLl9jb250ZXh0PW5ldyB1QnQoZSl9ZnVuY3Rpb24gdUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBoQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBjQnQoZSl9dmFyIHBCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGxCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsbEJ0KHRoaXMscj1zQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9c0J0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KGNCdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07dUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gbUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBkQnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBtQnQoZSl9dmFyIF9CdD1NKCgpPT57bUJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPWRCdChlKSxpPWRCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24geUJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gdkJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiB4QnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBiQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIGtMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHdCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1rTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIFNCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiBNQnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIEVCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIFRCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBDQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFCdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBQQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBJQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBMQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24ga0J0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFJCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIE5CdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgREJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBPQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgekJ0PU0oKCk9PntCdygpfSk7dmFyIEZCdD1NKCgpPT57X0Z0KCk7QWV0KCk7eDcoKTtNRnQoKTtURnQoKTtMZXQoKTtSZXQoKTtJRnQoKTtERnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtCRnQoKTtVRnQoKTtPQygpO1dGdCgpO1dldCgpO1lldCgpO3pDKCk7UUZ0KCk7ckJ0KCk7azcoKTtvQnQoKTtMQygpO3BCdCgpO19CdCgpO2JCdCgpO1NCdCgpO0VCdCgpO0NCdCgpO0Z3KCk7UEJ0KCk7TEJ0KCk7TzcoKTtSQnQoKTtEQnQoKTtCdygpO3pCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxCQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIEhCdCxRZXQsdHJ0LFZCdD1NKCgpPT57ZmEoKTt3ZigpO0hCdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9SEJ0LHRydD1IQnQucmFuZ2V9KTt2YXIgVUJ0LHFCdCxHQnQsV0J0PU0oKCk9PntmYSgpO3dmKCk7VUJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO3ZhciBLQnQsWkJ0LEpCdCxRQnQ9TSgoKT0+e2ZhKCk7d2YoKTtLQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFpCdD1LQnQsSkJ0PUtCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsdEh0LGVIdCxySHQsbkh0LGlIdCxvSHQsYUh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLHRIdD1lcnQucmFuZ2UsZUh0PXJydC5yYW5nZSxySHQ9bnJ0LnJhbmdlLG5IdD1pcnQucmFuZ2UsaUh0PW9ydC5yYW5nZSxvSHQ9YXJ0LnJhbmdlfSk7dmFyIHNIdCxsSHQsY0h0LHVIdD1NKCgpPT57ZmEoKTtzSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksbEh0PXNIdCxjSHQ9c0h0LnJhbmdlfSk7dmFyIGxydCxoSHQsZkh0LHBIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtoSHQ9bHJ0LGZIdD1scnQucmFuZ2V9KTt2YXIgZEh0LG1IdCxnSHQsX0h0PU0oKCk9PntmYSgpO3dmKCk7ZEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksbUh0PWRIdCxnSHQ9ZEh0LnJhbmdlfSk7dmFyIHlIdCx2SHQseEh0LGJIdD1NKCgpPT57ZmEoKTt3ZigpO3lIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLHZIdD15SHQseEh0PXlIdC5yYW5nZX0pO3ZhciB3SHQsU0h0LE1IdCxFSHQ9TSgoKT0+e2ZhKCk7d2YoKTt3SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksU0h0PXdIdCxNSHQ9d0h0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LFRIdCxDSHQsQUh0LFBIdCxJSHQsTEh0LGtIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSxUSHQ9Y3J0LnJhbmdlLENIdD11cnQucmFuZ2UsQUh0PWhydC5yYW5nZSxQSHQ9ZnJ0LnJhbmdlLElIdD1wcnQucmFuZ2UsTEh0PWRydC5yYW5nZX0pO3ZhciBSSHQsTkh0LERIdCxPSHQ9TSgoKT0+e2ZhKCk7Ukh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLE5IdD1SSHQsREh0PVJIdC5yYW5nZX0pO3ZhciBncnQsekh0LEZIdCxCSHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07ekh0PWdydCxGSHQ9Z3J0LnJhbmdlfSk7dmFyIEhIdD1NKCgpPT57ZmEoKTtCQnQoKTtWQnQoKTtXQnQoKTskQnQoKTtRQnQoKTthSHQoKTt1SHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtFSHQoKTtrSHQoKTtPSHQoKTtCSHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgVkh0LFc3LFJMZSxVSHQ9TSgoKT0+e212KCk7SEMoKTtWSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PVZIdCxSTGU9Vkh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LHFIdCxHSHQsVncsV0h0LFlIdCxqSHQsTkxlLERMZSxPTGUsekxlLEZMZSxCTGUsWEh0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSkscUh0PWd2KDIpLEdIdD1ndigzKSxWdz1ndig0KSxXSHQ9Z3YoNSksWUh0PWd2KDYpLGpIdD1WQy5yYW5nZSxOTGU9SHcucmFuZ2UsRExlPXFIdC5yYW5nZSxPTGU9R0h0LnJhbmdlLHpMZT1Wdy5yYW5nZSxGTGU9V0h0LnJhbmdlLEJMZT1ZSHQucmFuZ2V9KTt2YXIgdnJ0LF92LEhMZSwkSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LEhMZT12cnQucmFuZ2V9KTt2YXIgS0h0LFk3LFZMZSxaSHQ9TSgoKT0+e212KCk7SEMoKTtLSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9S0h0LFZMZT1LSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxKSHQsUUh0LHF3LHRWdCxlVnQsclZ0LFVMZSxxTGUsR0xlLFdMZSxZTGUsakxlLG5WdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLEpIdD15digyKSxRSHQ9eXYoMykscXc9eXYoNCksdFZ0PXl2KDUpLGVWdD15dig2KSxyVnQ9VUMucmFuZ2UsVUxlPVV3LnJhbmdlLHFMZT1KSHQucmFuZ2UsR0xlPVFIdC5yYW5nZSxXTGU9cXcucmFuZ2UsWUxlPXRWdC5yYW5nZSxqTGU9ZVZ0LnJhbmdlfSk7dmFyIHhydCx2dixYTGUsaVZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxYTGU9eHJ0LnJhbmdlfSk7dmFyIG9WdD1NKCgpPT57VUh0KCk7WEh0KCk7JEh0KCk7Wkh0KCk7blZ0KCk7aVZ0KCl9KTtmdW5jdGlvbiAkTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmNWdCxlOmNWdCxmOnZrZSxIOmdrZSxJOl9rZSxqOnlrZSxMOmRWdCxtOnhrZSxNOmJrZSxwOnN0LFE6ZlZ0LHM6cFZ0LFM6d2tlLHU6U2tlLFU6TWtlLFY6RWtlLHc6VGtlLFc6Q2tlLHg6bnVsbCxYOm51bGwseTpBa2UsWTpQa2UsWjpJa2UsIiUiOmhWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDp1VnQsZTp1VnQsZjpOa2UsSDpMa2UsSTpra2UsajpSa2UsTDptVnQsbTpEa2UsTTpPa2UscDpLdCxROmZWdCxzOnBWdCxTOnprZSx1OkZrZSxVOkJrZSxWOkhrZSx3OlZrZSxXOlVrZSx4Om51bGwsWDpudWxsLHk6cWtlLFk6R2tlLFo6V2tlLCIlIjpoVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpzVnQsZTpzVnQsZjpma2UsSDpsVnQsSTpsVnQsajpsa2UsTDpoa2UsbTpza2UsTTpja2UscDpELFE6ZGtlLHM6bWtlLFM6dWtlLHU6dGtlLFU6ZWtlLFY6cmtlLHc6UUxlLFc6bmtlLHg6eixYOlUseTpva2UsWTppa2UsWjpha2UsIiUiOnBrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PWFWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiBhVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsJExlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBKTGUoZSl7cmV0dXJuIGUucmVwbGFjZShaTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoSkxlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gUUxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBla2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbGtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBja2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBma2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGtlKGUsdCxyKXt2YXIgbj1LTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBka2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBta2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZ2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIF9rZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24geWtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiBkVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHZrZShlLHQpe3JldHVybiBkVnQoZSx0KSsiMDAwIn1mdW5jdGlvbiB4a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBia2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB3a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBTa2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1rZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFRrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBBa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFBrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSWtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBMa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24ga2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBSa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIG1WdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gTmtlKGUsdCl7cmV0dXJuIG1WdChlLHQpKyIwMDAifWZ1bmN0aW9uIERrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIE9rZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHprZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIEZrZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gQmtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gVmtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIFVrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIHFrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gR2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBXa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIGhWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBmVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gcFZ0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIGFWdCxWbyxLTGUsWkxlLGJydD1NKCgpPT57b1Z0KCk7YVZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxLTGU9L14lLyxaTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFlrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQsamtlLGdWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO2prZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Za2U6akMoTXJ0KSxnVnQ9amtlfSk7ZnVuY3Rpb24gWGtlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyICRrZSxfVnQseVZ0PU0oKCk9PntFcnQoKTskNygpOyRrZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1hrZTpYQyhNcnQpLF9WdD0ka2V9KTt2YXIgdlZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO3lWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh3VnQoS2tlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gS2tlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIHhWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLEprZSgpLHh2PTB9fWZ1bmN0aW9uIFprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0PmJWdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIEprZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoeFZ0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoWmtlLGJWdCkpLFd3PTEsd1Z0KHhWdCkpfX12YXIgV3csS0MsJEMsYlZ0LEs3LFpDLFo3LHh2LEo3LEpDLHdWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsYlZ0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx3VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gU1Z0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgTVZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gRVZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciBUVnQ9TSgoKT0+e1E3KCl9KTt2YXIgQ1Z0PU0oKCk9PntRNygpO01WdCgpO1RWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiBRa2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD90OGU6UWtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gZThlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP2U4ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIFBWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gcjhlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/cjhlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgTFZ0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24ga1Z0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUlZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gTlZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gRFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuOGUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBpOGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD16VnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD16VnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBGVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P2k4ZTpuOGUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1EVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgelZ0LEJWdD1NKCgpPT57U2YoKTtEcnQoKTtPVnQoKTt6VnQ9IiQifSk7ZnVuY3Rpb24gSFZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gVVZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBxVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgV1Z0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gWVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoZSl7ZXx8KGU9bzhlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyICRWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIEtWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgWlZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgUVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0VXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBvVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHNVdD1NKCgpPT57fSk7ZnVuY3Rpb24gYThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBzOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBsOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBjOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gdThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBoOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gbFV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3M4ZTphOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9oOGU6dThlOnIubG9jYWw/YzhlOmw4ZSkocix0KSl9dmFyIGNVdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBmOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gcDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gZDhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIHVVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/ZjhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP2Q4ZTpwOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gbThlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBnOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIF84ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBoVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9tOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/XzhlOmc4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGZVdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFV0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgZFV0KGUpfWZ1bmN0aW9uIGRVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9cFV0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gbVV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGdVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiB5OGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7bVV0KHRoaXMsZSl9fWZ1bmN0aW9uIHY4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtnVXQodGhpcyxlKX19ZnVuY3Rpb24geDhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP21VdDpnVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIF9VdChlLHQpe3ZhciByPXBVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/eDhlOnQ/eThlOnY4ZSkocix0KSl9dmFyIHlVdD1NKCgpPT57ZFV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIGI4ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gdzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gUzhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB2VXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/YjhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9TOGU6dzhlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIHhVdD1NKCgpPT57fSk7ZnVuY3Rpb24gTThlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gRThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIFQ4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGJVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9NOGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1Q4ZTpFOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFNVdCgpe3JldHVybiB0aGlzLmVhY2goQzhlKX12YXIgTVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBBOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBFVXQoKXtyZXR1cm4gdGhpcy5lYWNoKEE4ZSl9dmFyIFRVdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIEFVdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBQOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBQVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9QOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIElVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIEk4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIExVdCgpe3JldHVybiB0aGlzLmVhY2goSThlKX12YXIga1V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGs4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUlV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP2s4ZTpMOGUpfXZhciBOVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIERVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIE9VdD1NKCgpPT57fSk7ZnVuY3Rpb24gUjhlKGUsdCxyKXtyZXR1cm4gZT1CVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gQlV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIE44ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gRDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIE84ZShlLHQscil7dmFyIG49RlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UjhlOkJVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBIVXQoZSx0LHIpe3ZhciBuPU44ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/TzhlOkQ4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgRlV0LEJydCx6VXQsVlV0PU0oKCk9PntGVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHpVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB6VXR8fChGVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gVVV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gVVV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gRjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFVVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBxVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9GOGU6ejhlKShlLHQpKX12YXIgR1V0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFdVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxCOGUpfXZhciBCOGUsY2QsU2Y9TSgoKT0+e1BWdCgpO0xWdCgpO1JWdCgpO0JWdCgpO0RydCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3NVdCgpO2NVdCgpO3pydCgpO2ZVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO05VdCgpO09VdCgpO1ZVdCgpO0dVdCgpO0I4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVdVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpBVnQsc2VsZWN0QWxsOklWdCxmaWx0ZXI6a1Z0LGRhdGE6RlZ0LGVudGVyOk5WdCxleGl0OkhWdCxqb2luOlVWdCxtZXJnZTpHVnQsb3JkZXI6WVZ0LHNvcnQ6WFZ0LGNhbGw6S1Z0LG5vZGVzOkpWdCxub2RlOnRVdCxzaXplOnJVdCxlbXB0eTppVXQsZWFjaDphVXQsYXR0cjpsVXQsc3R5bGU6dVV0LHByb3BlcnR5OmhVdCxjbGFzc2VkOl9VdCx0ZXh0OnZVdCxodG1sOmJVdCxyYWlzZTpTVXQsbG93ZXI6RVV0LGFwcGVuZDpDVXQsaW5zZXJ0OlBVdCxyZW1vdmU6TFV0LGNsb25lOlJVdCxkYXR1bTpEVXQsb246SFV0LGRpc3BhdGNoOnFVdH07Y2Q9V1V0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIGpVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiBWOGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBVOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBZVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPUg4ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIEg4ZSxIcnQsWFV0PU0oKCk9PntIOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPWpVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49VjhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9VThlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1ZVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1ZVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9alV0fSk7dmFyICRVdD1NKCgpPT57WFV0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KEpVdChxOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBxOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gUVV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBLVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5e1FVdCgpfWZpbmFsbHl7anc9MCxXOGUoKSxTdj0wfX1mdW5jdGlvbiBHOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5aVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBXOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KEtVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEc4ZSxaVXQpKSxqdz0xLEpVdChLVXQpKX19dmFyIGp3LG5BLHJBLFpVdCxzeixpQSxseixTdixjeixvQSxKVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxaVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEpVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgdHF0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO3RxdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtYOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlk4ZSx0d2VlbjpqOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6cnF0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+cnF0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBYOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1lcXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1lcXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBZOGUsajhlLHJxdCxmeixsQSxHcnQsZXF0LHB6LHNBLEFjPU0oKCk9PnskVXQoKTtxcnQoKTtZOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLGo4ZT1bXSxycXQ9MCxmej0xLGxBPTIsR3J0PTMsZXF0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gbnF0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIGlxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBvcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIHNxdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIHJSZSgpe3JldHVybiBwcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gbHF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9JDhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/Y3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1LOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PVo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SjhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PVE4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD10UmUuZXhlYyhlKSk/ZnF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9ZVJlLmV4ZWMoZSkpP2ZxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFxdC5oYXNPd25Qcm9wZXJ0eShlKT9jcXQoYXF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBjcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBuUmUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9uUmUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gdXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIGhxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gZnF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gcHF0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBkcXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLCQ4ZSxLOGUsWjhlLEo4ZSxROGUsdFJlLGVSZSxhcXQsbXF0PU0oKCk9PntvcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsJDhlPS9eIyhbMC05YS1mXXszLDh9KSQvLEs4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksWjhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxKOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSxROGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSx0UmU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLGVSZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLGFxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpzcXQsZm9ybWF0SGV4OnNxdCxmb3JtYXRIc2w6clJlLGZvcm1hdFJnYjpscXQsdG9TdHJpbmc6bHF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDp1cXQsZm9ybWF0SGV4OnVxdCxmb3JtYXRSZ2I6aHF0LHRvU3RyaW5nOmhxdH0pKTtteihFZixkcXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e21xdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZ3F0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgeXF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHZxdD1NKCgpPT57fSk7ZnVuY3Rpb24gaVJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gb1JlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24geHF0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/b1JlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/aVJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIGJxdD1NKCgpPT57dnF0KCl9KTtmdW5jdGlvbiB3cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosYVJlLHNSZSxTcXQ9TSgoKT0+eyRydCgpO1pydCgpO3lxdCgpO2JxdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9eHF0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2FSZT13cXQoZ3F0KSxzUmU9d3F0KF9xdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGxSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gY1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP2NSZShsWzBdLngpOmxSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCxNcXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqRXF0LHNrZXdYOk1hdGguYXRhbihsKSpFcXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBFcXQsYnosVHF0PU0oKCk9PntFcXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBBcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxDcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9Q3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIFBxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsQ3F0LHd6LElxdD1NKCgpPT57VHF0KCl9KTtmdW5jdGlvbiBMcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsa3F0PU0oKCk9Pnt4eigpO0lxdCgpO2ludD1McXQoQXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1McXQoUHF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7TXF0KCk7a3F0KCk7U3F0KCl9KTtmdW5jdGlvbiB1UmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFJxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3VSZTpoUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gZlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBwUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBkUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBtUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZ1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBfUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gTnF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP19SZTpnUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9wUmU6ZlJlKShyKTooci5sb2NhbD9tUmU6ZFJlKShyLG4sdCsiIikpfXZhciBEcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24geVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gdlJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBPcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/eVJlOnZSZSkobix0KSl9dmFyIHpxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBiUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eFJlOmJSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIEJxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBTUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gSHF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/d1JlOlNSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFZxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE1SZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gVXF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChNUmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgcXF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gR3F0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBXcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFlxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBqcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBFUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBUUmUoZSx0LHIpe3ZhciBuLGksbz1FUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gWHF0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goVFJlKHIsZSx0KSl9dmFyICRxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIENSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gS3F0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLENSZSh0aGlzLl9pZCkpfXZhciBacXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBRcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gdEd0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBlR3Q9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gckd0KCl7cmV0dXJuIG5ldyBBUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBBUmUsbkd0PU0oKCk9PntNZigpO0FSZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBQUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSVJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIExSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24ga1JlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gaUd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsUFJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLElSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/a1JlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkxSZShlLG4sdCsiIikscil9dmFyIG9HdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBSUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIGFHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBzR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIE5SZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIERSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBsR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0RSZShadyh0aGlzLCJ0ZXh0IixlKSk6TlJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBjR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiB1R3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgaEd0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisrT1JlfXZhciBPUmUsSncsdWQ9TSgoKT0+e01mKCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7Y0d0KCk7aEd0KCk7ZEEoKTtPUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OkpxdCxzZWxlY3RBbGw6dEd0LGZpbHRlcjpHcXQsbWVyZ2U6WXF0LHNlbGVjdGlvbjpyR3QsdHJhbnNpdGlvbjp1R3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOlhxdCxhdHRyOk5xdCxhdHRyVHdlZW46T3F0LHN0eWxlOmlHdCxzdHlsZVR3ZWVuOmFHdCx0ZXh0OmxHdCxyZW1vdmU6S3F0LHR3ZWVuOlJxdCxkZWxheTpGcXQsZHVyYXRpb246SHF0LGVhc2U6VXF0fX0pO2Z1bmN0aW9uIHpSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBmR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHx6UmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LHBHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgZEd0PU0oKCk9PntNZigpO2lxdCgpO3BHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9bnF0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWZHdH0pO2Z1bmN0aW9uIG1HdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxGUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIEZSZSxnR3Q9TSgoKT0+e3VkKCk7QWMoKTtGUmU9W251bGxdfSk7dmFyIF9HdD1NKCgpPT57ZEd0KCk7dWQoKTtnR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHlHdD1NKCgpPT57fSk7ZnVuY3Rpb24gdkd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIHhHdChlKXtyZXR1cm4gZVsxXX12YXIgYkd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gd0d0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT13R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz13R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBCUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIEhSZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiBTR3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFIUmUobz1Bb1tpXSxlLHQscixuKXx8IUJSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIE1HdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIFZSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gVVJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBFR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT1WUmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gVEd0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1VUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gcVJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1BR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1DR3QucG9wKCl8fG5ldyBxUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksQ0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIENHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtDR3Q9W119KTtmdW5jdGlvbiBHUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gUEd0KGUpe3ZhciB0PUlHdC5wb3AoKXx8bmV3IEdSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLElHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIExHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIGtHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1SR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtV1JlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9TUd0KGUpO3ZhciBsPVBHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPVBHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUkd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gV1JlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFJHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIElHdCxOR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO0lHdD1bXX0pO2Z1bmN0aW9uIFlSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24galJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KGpSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihrR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylMR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoRUd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07U0d0KGEscyxsLGMpLFRHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsQUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntOR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixBR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZZUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBER3QoKXt2YXIgZT12R3QsdD14R3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIE9HdD1NKCgpPT57eUd0KCk7Ykd0KCk7clMoKX0pO3ZhciB6R3Q9TSgoKT0+e09HdCgpfSk7ZnVuY3Rpb24gQkd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uICRSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEtSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEZHdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09WFJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgWFJlLHZBLEhHdD1NKCgpPT57WFJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1CR3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPSRSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUtSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Rkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Rkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9Qkd0fSk7dmFyIG1udD1NKCgpPT57SEd0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIFpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gSlJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP0pSZTpaUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiBRUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/UVJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgVUd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiB0TmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD90TmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBHR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBXR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBZR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBqR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBYR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciAkR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGVOZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHJOZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPUtHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPUtHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/ck5lOmVOZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVhHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBLR3QsSkd0PU0oKCk9PntPdSgpO3dudCgpOyRHdCgpO0tHdD0iJCJ9KTtmdW5jdGlvbiBRR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBlV3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIHJXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciBpV3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBvV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdChlKXtlfHwoZT1uTmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgbFd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gY1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB1V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGhXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBmV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHBXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIHlXdD1NKCgpPT57fSk7ZnVuY3Rpb24gdld0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgeFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBpTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIG9OZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIGFOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIHNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBsTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIGNOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBiV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/b05lOmlOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP2NOZTpsTmU6ci5sb2NhbD9zTmU6YU5lKShyLHQpKX12YXIgd1d0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBoTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBmTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gU1d0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD91TmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/Zk5lOmhOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBwTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIGROZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gbU5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIE1XdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3BOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9tTmU6ZE5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRVd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBUV3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBDV3QoZSl9ZnVuY3Rpb24gQ1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1UV3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBBV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gUFd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGdOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBV3QodGhpcyxlKX19ZnVuY3Rpb24gX05lKGUpe3JldHVybiBmdW5jdGlvbigpe1BXdCh0aGlzLGUpfX1mdW5jdGlvbiB5TmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/QVd0OlBXdCkodGhpcyxlKX19ZnVuY3Rpb24gSVd0KGUsdCl7dmFyIHI9VFd0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj95TmU6dD9nTmU6X05lKShyLHQpKX12YXIgTFd0PU0oKCk9PntDV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gdk5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB4TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBiTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGtXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD92TmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP2JOZTp4TmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBTTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gTU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTld0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3dOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/TU5lOlNOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gT1d0KCl7cmV0dXJuIHRoaXMuZWFjaChFTmUpfXZhciB6V3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFROZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEZXdCgpe3JldHVybiB0aGlzLmVhY2goVE5lKX12YXIgQld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgVld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIENOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFVXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP0NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgcVd0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gQU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gR1d0KCl7cmV0dXJuIHRoaXMuZWFjaChBTmUpfXZhciBXV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFBOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gSU5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBZV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/SU5lOlBOZSl9dmFyIGpXdD1NKCgpPT57fSk7ZnVuY3Rpb24gWFd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgJFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMTmUoZSx0LHIpe3JldHVybiBlPUpXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBKV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24ga05lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBSTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTk5lKGUsdCxyKXt2YXIgbj1aV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9MTmU6Sld0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFXdChlLHQscil7dmFyIG49a05lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9OTmU6Uk5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgWld0LFlyLEtXdCx6ej1NKCgpPT57Wld0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLV3R8fChaV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gdFl0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBETmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFl0KHRoaXMsZSx0KX19ZnVuY3Rpb24gT05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRZdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBlWXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PTmU6RE5lKShlLHQpKX12YXIgcll0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG5ZdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e1VHdCgpO0dHdCgpO1lHdCgpO0pHdCgpO3dudCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO3hXdCgpO3dXdCgpO01udCgpO0VXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO2pXdCgpOyRXdCgpO3p6KCk7cll0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9bll0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OlZHdCxzZWxlY3RBbGw6cUd0LGZpbHRlcjpXR3QsZGF0YTpaR3QsZW50ZXI6akd0LGV4aXQ6UUd0LGpvaW46ZVd0LG1lcmdlOm5XdCxvcmRlcjpvV3Qsc29ydDpzV3QsY2FsbDpjV3Qsbm9kZXM6aFd0LG5vZGU6cFd0LHNpemU6bVd0LGVtcHR5Ol9XdCxlYWNoOnZXdCxhdHRyOmJXdCxzdHlsZTpTV3QscHJvcGVydHk6TVd0LGNsYXNzZWQ6SVd0LHRleHQ6a1d0LGh0bWw6Tld0LHJhaXNlOk9XdCxsb3dlcjpGV3QsYXBwZW5kOkhXdCxpbnNlcnQ6VVd0LHJlbW92ZTpHV3QsY2xvbmU6WVd0LGRhdHVtOlhXdCxvbjpRV3QsZGlzcGF0Y2g6ZVl0fTtmZD1uWXR9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIGlZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgb1l0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIGFZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO29ZdCgpO2t6KCk7aVl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO2FZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHNZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGxZdD1NKCgpPT57SXMoKTtzWXQoKX0pO3ZhciBjWXQ9TSgoKT0+e2xZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgdVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBmWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBHTmUoKXtyZXR1cm4geVl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHBZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PXpOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2RZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Rk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1CTmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PUhOZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD1WTmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9VU5lLmV4ZWMoZSkpP19ZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXFOZS5leGVjKGUpKT9fWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpoWXQuaGFzT3duUHJvcGVydHkoZSk/ZFl0KGhZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZFl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gV05lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/V05lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG1ZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBnWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIF9ZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIHlZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gdll0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95WXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZix6TmUsRk5lLEJOZSxITmUsVk5lLFVOZSxxTmUsaFl0LHhZdD1NKCgpPT57dVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHpOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxGTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEJOZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksSE5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksVk5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksVU5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxxTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxoWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6Zll0LGZvcm1hdEhleDpmWXQsZm9ybWF0SHNsOkdOZSxmb3JtYXRSZ2I6cFl0LHRvU3RyaW5nOnBZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6bVl0LGZvcm1hdEhleDptWXQsZm9ybWF0UmdiOmdZdCx0b1N0cmluZzpnWXR9KSk7VXooQ2Ysdll0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9Pnt4WXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGJZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24gd1l0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIFNZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBNWXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGpOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIEVZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P2pOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1lOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciBUWXQ9TSgoKT0+e01ZdCgpfSk7ZnVuY3Rpb24gQ1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LFhOZSwkTmUsQVl0PU0oKCk9PntEbnQoKTt6bnQoKTtTWXQoKTtUWXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPUVZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtYTmU9Q1l0KGJZdCksJE5lPUNZdCh3WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBLTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9aTmUobFswXS54KTpLTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsUFl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKklZdCxza2V3WDpNYXRoLmF0YW4obCkqSVl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSVl0LFh6LExZdD1NKCgpPT57SVl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUll0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsa1l0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPWtZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBOWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LGtZdCwkeixEWXQ9TSgoKT0+e0xZdCgpfSk7ZnVuY3Rpb24gT1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LHpZdD1NKCgpPT57anooKTtEWXQoKTtHbnQ9T1l0KFJZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9T1l0KE5ZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gQll0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFFOZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB0RGUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8Sk5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0ZZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLUZZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1CWXQoXyksQz1pLyhZbnQqcCkqKFMqdERlKENBKmIrXyktUU5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0JZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LEZZdCxKTmUsSFl0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLEZZdD00LEpOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtQWXQoKTt6WXQoKTtIWXQoKTtBWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwocVl0KGVEZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIGVEZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBHWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIFZZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7R1l0KCl9ZmluYWxseXtzUz0wLG5EZSgpLEF2PTB9fWZ1bmN0aW9uIHJEZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PlVZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIG5EZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoVll0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwockRlLFVZdCkpLHNTPTEscVl0KFZZdCkpfX12YXIgc1MsSUEsUEEsVVl0LEt6LExBLFp6LEF2LEp6LGtBLHFZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLFVZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUscVl0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBXWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7V1l0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO2FEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246aURlLHR3ZWVuOm9EZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpqWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5qWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIGFEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1ZWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1ZWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIGlEZSxvRGUsall0LFpudCxyRixlRixZWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO2lEZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxvRGU9W10sall0PTAsWm50PTEsckY9MixlRj0zLFlZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gWFl0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyICRZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBzRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBsRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEtZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3NEZTpsRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gY0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB1RGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBoRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gZkRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBwRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBkRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIFpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD9kRGU6cERlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/dURlOmNEZSkocik6KHIubG9jYWw/ZkRlOmhEZSkocixuLHQpKX12YXIgSll0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIG1EZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZ0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gX0RlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZ0RlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5RGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZtRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIFFZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9fRGU6eURlKShuLHQpKX12YXIgdGp0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHhEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj92RGU6eERlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgcmp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gYkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBuanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9iRGU6d0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgaWp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gU0RlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBvanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFNEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciBhanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBzanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGxqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gY2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIHVqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIE1EZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIEVEZShlLHQscil7dmFyIG4saSxvPU1EZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBoanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChFRGUocixlLHQpKX12YXIgZmp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gVERlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBwanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsVERlKHRoaXMuX2lkKSl9dmFyIGRqdD1NKCgpPT57fSk7ZnVuY3Rpb24gbWp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGdqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBfanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIHlqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiB2anQoKXtyZXR1cm4gbmV3IENEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIENEZSx4anQ9TSgoKT0+e0lzKCk7Q0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIEFEZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBianQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gUERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gSURlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIExEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1ianQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB3anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxBRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsYmp0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxJRGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goTERlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxQRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBTanQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBrRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFJEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYma0RlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIE1qdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixSRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBFanQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5EZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIEREZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBUanQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0REZShjUyh0aGlzLCJ0ZXh0IixlKSk6TkRlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBDanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBPRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIHpEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZPRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBBanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LHpEZShlKSl9dmFyIFBqdD1NKCgpPT57fSk7ZnVuY3Rpb24gSWp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIExqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24ga2p0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFJqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrRkRlfXZhciBGRGUsdVMsZGQ9TSgoKT0+e0lzKCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7eWp0KCk7eGp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7UGp0KCk7TGp0KCk7T0EoKTtSanQoKTtGRGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDptanQsc2VsZWN0QWxsOl9qdCxmaWx0ZXI6c2p0LG1lcmdlOmNqdCxzZWxlY3Rpb246dmp0LHRyYW5zaXRpb246SWp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpoanQsYXR0cjpaWXQsYXR0clR3ZWVuOlFZdCxzdHlsZTp3anQsc3R5bGVUd2VlbjpNanQsdGV4dDpUanQsdGV4dFR3ZWVuOkFqdCxyZW1vdmU6cGp0LHR3ZWVuOktZdCxkZWxheTplanQsZHVyYXRpb246bmp0LGVhc2U6b2p0LGVuZDpranR9fSk7ZnVuY3Rpb24gQkRlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIE5qdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEJEZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsRGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBPanQ9TSgoKT0+e0lzKCk7JFl0KCk7RGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1YWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249Tmp0fSk7dmFyIHpqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIEZqdD1NKCgpPT57T2p0KCk7ZGQoKTt6anQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQmp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgSGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIFZqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEhEZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gVkRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIFVqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gVURlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gcURlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEdEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gcWp0KCl7dmFyIGU9SERlLHQ9VkRlLHI9R0RlLG49VURlLGk9cURlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsVWp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsVWp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEdqdD1NKCgpPT57bW50KCk7Y1l0KCk7QUEoKTtJcygpO0ZqdCgpO0JqdCgpO0hqdCgpO25pdCgpO1ZqdCgpfSk7dmFyIFdqdD1NKCgpPT57R2p0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+bUd0LGFyYzooKT0+Z0Z0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PlpNdCxheGlzTGVmdDooKT0+Sk10LGF4aXNSaWdodDooKT0+S010LGF4aXNUb3A6KCk9PiRNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9PnNNdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT55Q3QsYnJ1c2hTZWxlY3Rpb246KCk9Pm1DdCxicnVzaFg6KCk9PmdDdCxicnVzaFk6KCk9Pl9DdCxjaG9yZDooKT0+VUN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5HTHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+dEZ0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5jTXQsY3N2OigpPT5wTnQsY3N2Rm9ybWF0OigpPT55UHQsY3N2Rm9ybWF0Um93czooKT0+dlB0LGNzdlBhcnNlOigpPT5nUHQsY3N2UGFyc2VSb3dzOigpPT5fUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5PRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+RkZ0LGN1cnZlQmFzaXNPcGVuOigpPT5WRnQsY3VydmVCdW5kbGU6KCk9PkdGdCxjdXJ2ZUNhcmRpbmFsOigpPT5ZRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+akZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tOigpPT5LRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5KRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+ZUJ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+aUJ0LGN1cnZlTW9ub3RvbmVYOigpPT5oQnQsY3VydmVNb25vdG9uZVk6KCk9PmZCdCxjdXJ2ZU5hdHVyYWw6KCk9PmdCdCxjdXJ2ZVN0ZXA6KCk9PnlCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+eEJ0LGN1cnZlU3RlcEJlZm9yZTooKT0+dkJ0LGN1c3RvbUV2ZW50OigpPT5YenQsZGVzY2VuZGluZzooKT0+aE10LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PmtBdCxkcmFnOigpPT5oUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PkpQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+UVB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+JFB0LGVhc2VCb3VuY2VJbk91dDooKT0+S1B0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+WVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+alB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PmtQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5SUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PmU2dCxlYXNlRWxhc3RpY0luT3V0OigpPT5yNnQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+cVB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+R1B0LGVhc2VMaW5lYXI6KCk9PkNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+RFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5PUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PlBQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+SVB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+SFB0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+VlB0LGVudHJpZXM6KCk9PmhBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+bzZ0LGZvcmNlQ29sbGlkZTooKT0+RjZ0LGZvcmNlTGluazooKT0+ajZ0LGZvcmNlTWFueUJvZHk6KCk9PmxJdCxmb3JjZVJhZGlhbDooKT0+dUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+c0l0LGZvcmNlWDooKT0+Zkl0LGZvcmNlWTooKT0+ZEl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9PnZMdCxnZW9BcmVhOigpPT5VSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5iTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+U0x0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PktJdCxnZW9DZW50cm9pZDooKT0+bjl0LGdlb0NpcmNsZTooKT0+dTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlI5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+VEx0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PlBMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+Vjl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PkFMdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5MTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9Plc5dCxnZW9JZGVudGl0eTooKT0+Ukx0LGdlb0ludGVycG9sYXRlOigpPT5qOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+RUx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5ETHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT56THQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5mTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5CTHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PmRMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PlZMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PnhNdCxoc2w6KCk9PlpLLGh0bWw6KCk9Pm9OdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5FN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PnE4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnc3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkc4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5COHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5IOHQsaW50ZXJwb2xhdGVIc2w6KCk9Pk44dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9PkQ4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9Pkk3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+UDd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9Pkw3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlQ3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+bTh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pmc4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5fOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5UOHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PkM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9PkE3dCxpbnRlcnBvbGF0ZVdhcm06KCk9Pk03dCxpbnRlcnBvbGF0ZVpvb206KCk9Pkw4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5FVnQsaXNvRm9ybWF0OigpPT5nVnQsaXNvUGFyc2U6KCk9Pl9WdCxqc29uOigpPT5zTnQsa2V5czooKT0+c0F0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5DRnQsbGlua1JhZGlhbDooKT0+UEZ0LGxpbmtWZXJ0aWNhbDooKT0+QUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+VE10LG1lYW46KCk9PkFNdCxtZWRpYW46KCk9PklNdCxtZXJnZTooKT0+a010LG1pbjooKT0+bVIsbW91c2U6KCk9Pm5GdCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PnJBdCxub3c6KCk9Pll3LHBhY2s6KCk9PlRrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT53a3QscGFpcnM6KCk9PmxNdCxwYXJ0aXRpb246KCk9PkFrdCxwYXRoOigpPT5LOHQscGVybXV0ZTooKT0+Tk10LHBpZTooKT0+U0Z0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+UTh0LHBvbHlnb25DZW50cm9pZDooKT0+ZVJ0LHBvbHlnb25Db250YWluczooKT0+bFJ0LHBvbHlnb25IdWxsOigpPT5hUnQscG9seWdvbkxlbmd0aDooKT0+dVJ0LHByZWNpc2lvbkZpeGVkOigpPT5BSXQscHJlY2lzaW9uUHJlZml4OigpPT5JSXQscHJlY2lzaW9uUm91bmQ6KCk9PmtJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5ZOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PnROdCxyYW5kb21FeHBvbmVudGlhbDooKT0+ck50LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5KUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5LUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5LQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+WU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+YU90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9Pmg3dCxzY2FsZVV0YzooKT0+Zjd0LHNjYW46KCk9Pk9NdCxzY2hlbWVDYXRlZ29yeTEwOigpPT5kN3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+eDd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5nN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9Pnk3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+b0Z0LHNlbGVjdGlvbjooKT0+UXp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5vQXQsc2h1ZmZsZTooKT0+Rk10LHN0YWNrOigpPT53QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlRCdCxzdGFja09mZnNldEV4cGFuZDooKT0+TUJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5BQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PklCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+a0J0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9Pk5CdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9Pk9CdCxzdHJhdGlmeTooKT0+a2t0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5ITXQsc3ltYm9sOigpPT5ORnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5SRnQsdGV4dDooKT0+Y050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PndNdCx0aHJlc2hvbGRTY290dDooKT0+TU10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+dk10LHRpbWVEYXk6KCk9PlpCdCx0aW1lRGF5czooKT0+SkJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT5pSHQsdGltZUhvdXI6KCk9PmpCdCx0aW1lSG91cnM6KCk9PlhCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5xQnQsdGltZU1pbnV0ZXM6KCk9PkdCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PnRIdCx0aW1lTW9udGg6KCk9PmxIdCx0aW1lTW9udGhzOigpPT5jSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+b0h0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+bkh0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5lSHQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5ySHQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5oSHQsdGltZVllYXJzOigpPT5mSHQsdGltZW91dDooKT0+U1Z0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5zRnQsdG91Y2hlczooKT0+Y0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+Tmt0LHRyZWVtYXA6KCk9Pk9rdCx0cmVlbWFwQmluYXJ5OigpPT5Ga3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Va3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Ia3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9Pm1OdCx0c3ZGb3JtYXQ6KCk9PlNQdCx0c3ZGb3JtYXRSb3dzOigpPT5NUHQsdHN2UGFyc2U6KCk9PmJQdCx0c3ZQYXJzZVJvd3M6KCk9PndQdCx1dGNEYXk6KCk9PlNIdCx1dGNEYXlzOigpPT5NSHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5JSHQsdXRjSG91cjooKT0+dkh0LHV0Y0hvdXJzOigpPT54SHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9Pm1IdCx1dGNNaW51dGVzOigpPT5nSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+VEh0LHV0Y01vbnRoOigpPT5OSHQsdXRjTW9udGhzOigpPT5ESHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5MSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5QSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5DSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+QUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+ekh0LHV0Y1llYXJzOigpPT5GSHQsdmFsdWVzOigpPT5jQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PmlNdCx2b3Jvbm9pOigpPT5ER3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PmhOdCx6aXA6KCk9PlVNdCx6b29tOigpPT5xanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57b010KCk7R010KCk7dEV0KCk7eEN0KCk7SkN0KCk7cEF0KCk7UEF0KCk7TkF0KCk7cFB0KCk7VFB0KCk7aTZ0KCk7Z0l0KCk7Tkl0KCk7cUx0KCk7R2t0KCk7WDh0KCk7Sjh0KCk7ZlJ0KCk7R1J0KCk7JFJ0KCk7aU50KCk7X050KCk7Tjd0KCk7aEZ0KCk7RkJ0KCk7SEh0KCk7dlZ0KCk7Q1Z0KCk7X0d0KCk7ekd0KCk7V2p0KCl9KTt2YXIgJGp0PUgoWGp0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZanQ9KEVyKCksVXQoTXIpKSxXZz1ZanQsamp0PVlqdDtmdW5jdGlvbiBXRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBZRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBqRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1dEZTpZRGUpKHRoaXMsZSl9ZnVuY3Rpb24gWERlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiAkRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIEtEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9YRGU6JERlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBaRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gSkRlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIFFEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/WkRlOkpEZSkodGhpcyxlKX1mdW5jdGlvbiB0T2UoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIGVPZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIHJPZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/dE9lOmVPZSkodGhpcyxlKX1mdW5jdGlvbiBuT2UoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gaU9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBvT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/bk9lOmlPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1qRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9S0RlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz1RRGU7amp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPXJPZTtqanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPW9PZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS2p0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gYU9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLEtqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gS2p0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9YU9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIHNPZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09c09lfSk7dmFyIEpqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KEJ2dCkpLGxPZT1ZZygpLGNPZT1JZigpLFpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPWNPZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgdU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWxPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPVpqdFt0XTtyZXR1cm4gcj09bnVsbD9aanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz11T2V9KTt2YXIgUWp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9WWcoKSxmT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1oT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWZPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHRYdD0oZGUoKSxVdChwZSkpO3RYdC5fX2V4cG9ydFN0YXIoSmp0KCksY0YpO3RYdC5fX2V4cG9ydFN0YXIoUWp0KCksY0YpfSk7dmFyIGVYdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcE9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1wT2V9KTt2YXIgclh0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz1kT2V9KTt2YXIgblh0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPW1PZX0pO3ZhciBpWHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWdPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihlWHQoKSk7aEYoclh0KCkpO2hGKG5YdCgpKTtoRihpWHQoKSl9KTt2YXIgYVh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBvWHQ9cFMoKSxfT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPW9YdC5NZXRob2RzLmRlZmF1bHRzKHt9LF9PZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9b1h0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5T2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3lPZShhWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PXZPZX0pO3ZhciBjWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4T2U9RkEoKSxzWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBzWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoc1h0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgbFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qeE9lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7bFh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1sWHR9KTt2YXIgdVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiT2U9RkEoKSx3T2U9IiM0NDQiLFNPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXdPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpiT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD1TT2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQoY1h0KCkpO2RpdCh1WHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtoWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1oWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIE1PZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksRU9lPWZ1bmN0aW9uKGUpe01PZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPUVPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVE9lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ09lPV9pdCgpLEFPZT1mdW5jdGlvbihlKXtUT2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KENPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9eWl0KCksa09lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBJT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShMT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9a09lfSk7dmFyIGZYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBST2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOT2U9cFMoKSxET2U9X0YoKSxPT2U9dml0KCksek9lPWZ1bmN0aW9uKGUpe1JPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IE5PZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9RE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShPT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj16T2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShmWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksRk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Rk9lfSk7dmFyIGRYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBCT2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBIT2U9d2l0KCkscFh0PWZ1bmN0aW9uKGUpe0JPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShIT2UuV3JhcHBlcik7cFh0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPXBYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO21YdChkWHQoKSk7bVh0KHdpdCgpKX0pO3ZhciBnWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSxWT2U9eGl0KCksVU9lPVNpdCgpLHFPZT1GQSgpLEdPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgVk9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IFVPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBxT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9R09lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZ1h0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBfWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBXT2U9KEVyKCksVXQoTXIpKSxZT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIGpPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9ak9lO2Z1bmN0aW9uIFhPZShlKXt2YXIgdD1XT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9WE9lO2Z1bmN0aW9uICRPZShlKXtyZXR1cm4gWU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj0kT2U7ZnVuY3Rpb24gS09lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PUtPZX0pO3ZhciB4WHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2WHQ9KEVyKCksVXQoTXIpKSxaT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gSk9lKGUsdCl7dmFyIHI9eVh0KGUpKy4wNSxuPXlYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PUpPZTtmdW5jdGlvbiBRT2UoZSx0KXt2YXIgcj12WHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9UU9lO2Z1bmN0aW9uIHQ3ZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PXQ3ZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ9dlh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOlpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBlN2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPWU3ZTtmdW5jdGlvbiB3WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9d1h0O2Z1bmN0aW9uIHI3ZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4gd1h0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9cjdlO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBuN2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9bjdlO2Z1bmN0aW9uIGk3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPWk3ZTtmdW5jdGlvbiBvN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PW83ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLFNYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIsYTdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK1NYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxzN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxsN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86IitTWHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gYzdlKGUpe3ZhciB0PWE3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1jN2U7ZnVuY3Rpb24gdTdlKGUpe3ZhciB0PXM3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9dTdlO2Z1bmN0aW9uIGg3ZShlKXt2YXIgdD1sN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1oN2U7ZnVuY3Rpb24gZjdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9ZjdlO2Z1bmN0aW9uIHA3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PXA3ZTtmdW5jdGlvbiBkN2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPWQ3ZTtmdW5jdGlvbiBtN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPWJYdChlKSxvPWJYdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9bTdlO2Z1bmN0aW9uIGJYdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZzdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1nN2U7ZnVuY3Rpb24gXzdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIHg3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPV83ZTt2YXIgeTdlPS9ebWF0cml4XCgoW14pXSspXCkkLyx2N2U9L1ssIF0rLztmdW5jdGlvbiB4N2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKHk3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KHY3ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSxNWHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsYjdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gdzdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9dzdlO2Z1bmN0aW9uIFM3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9TTdlO2Z1bmN0aW9uIEU3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPVQ3ZTtmdW5jdGlvbiBDN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1DN2U7ZnVuY3Rpb24gQTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPUE3ZTtmdW5jdGlvbiBQN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPVA3ZTtmdW5jdGlvbiBJN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1JN2U7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49TDdlO2Z1bmN0aW9uIGs3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1rN2U7ZnVuY3Rpb24gUjdlKGUpe2Zvcih2YXIgdD1NWHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1iN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz1NWHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1FWHQocixUWHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVI3ZTtmdW5jdGlvbiBFWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1FWHQ7ZnVuY3Rpb24gTjdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9TjdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gVFh0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD1UWHQ7ZnVuY3Rpb24gRDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUQ3ZX0pO3ZhciBDWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9TzdlO3ZhciB6N2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj16N2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRjdlPUNYdCgpLEI3ZT01LEg3ZT1uZXcgRjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIFY3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1CN2UpLHI9PT12b2lkIDAmJihyPUg3ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPVY3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBJWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBWHQ9KEVyKCksVXQoTXIpKSxVN2U9T2UoKSxYZz1GZSgpLHE3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPXE3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgUFh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEc3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1BWHQubWFwKCksbz1BWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1HN2U7ZnVuY3Rpb24gVzdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1XN2U7ZnVuY3Rpb24gWTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW1BYdC5taW4obywwKSxQWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9WTdlO19kLm5vcm1hbGl6ZUtleT1VN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPSRBKCk7ZnVuY3Rpb24gTFh0KGUpeyFqN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49TFh0O2Z1bmN0aW9uIGtYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9a1h0O2Z1bmN0aW9uIFg3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1rWHQobyxlKX19Z1MuZGVib3VuY2U9WDdlO2Z1bmN0aW9uICQ3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLExYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9JDdlfSk7dmFyIFJYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSzdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9SzdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWjdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9WjdlfSk7dmFyIE5YdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSjdlPShkZSgpLFV0KHBlKSksUTdlPVJpdCgpLHR6ZT1mdW5jdGlvbihlKXtKN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oUTdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PXR6ZX0pO3ZhciBEWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLGV6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1lemV9KTt2YXIgT1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByemU9QWl0KCksbnplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihyemUuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9bnplfSk7dmFyIHpYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBpemUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPWl6ZX0pO3ZhciBIWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxGWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIG96ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbRlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IEJYdCh0KSx0W0ZYdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPW96ZTt2YXIgQlh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPUJYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSksYXplPV9YdCgpO3FvLkFycmF5PWF6ZTt2YXIgc3plPXhYdCgpO3FvLkNvbG9yPXN6ZTt2YXIgbHplPUNpdCgpO3FvLkRPTT1semU7dmFyIGN6ZT1BaXQoKTtxby5NYXRoPWN6ZTt2YXIgdXplPUlpdCgpO3FvLlJUcmVlPXV6ZTt2YXIgaHplPUlYdCgpO3FvLlN0YWNraW5nPWh6ZTt2YXIgZnplPUFGKCk7cW8uV2luZG93PWZ6ZTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihOWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihEWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoelh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKEhYdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWWHQ9RmUoKSxCaXQ9SUYoKSxwemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9cHplO3ZhciBkemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtWWHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9ZHplO3ZhciBtemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9Vlh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9bXplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxnemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9Z3plLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gX3plKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9X3plO2Z1bmN0aW9uIHl6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxxWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPXl6ZTtmdW5jdGlvbiBVWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSkscVh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9VVh0O2Z1bmN0aW9uIHZ6ZShlKXtVWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9dnplO2Z1bmN0aW9uIHFYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIHh6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPXh6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEdYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxiemU9T2UoKSxXWHQ9WWcoKSxZWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVlYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVlYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgd3plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9V1h0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8YnplLmlzRWxlbWVudCh0KT9yPUdYdC5zZWxlY3QodCk6cj1XWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXd6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksU3plPSExO2Z1bmN0aW9uIE16ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT1NemU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gRXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1FemU7ZnVuY3Rpb24gVHplKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PVR6ZTtmdW5jdGlvbiBDemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1DemU7ZnVuY3Rpb24gQXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PUF6ZTtmdW5jdGlvbiBQemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1QemU7ZnVuY3Rpb24gSXplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9SXplO2Z1bmN0aW9uIEx6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD1TemUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1MemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGt6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUnplPWtjKCksalh0PUJ1KCkseFM9RmUoKSxOemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249TnplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBEemU9ZnVuY3Rpb24oZSl7a3plLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihqWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1qWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUnplLkNvbXBvbmVudCk7REYuQXhpcz1EemV9KTt2YXIgJFh0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPemU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLHp6ZT1rYygpLFhYdD1GZSgpLFlpdD10NCgpLEZ6ZT1mdW5jdGlvbihlKXtPemUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4genplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpYWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/WFh0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1GemV9KTt2YXIgS1h0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLEh6ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSxWemU9ZnVuY3Rpb24oZSl7QnplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihIemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9VnplfSk7dmFyIFpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFV6ZT1GZSgpO2Z1bmN0aW9uIHF6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9VXplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9cXplO2Z1bmN0aW9uIEd6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9R3plfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFd6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1KWHQoZSx0LG4saSksUVh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVd6ZTtmdW5jdGlvbiBKWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1KWHQ7ZnVuY3Rpb24gUVh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz10JHQoZSksYT1qemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPVFYdDtmdW5jdGlvbiBZemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz10JHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249WXplO2Z1bmN0aW9uIHQkdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBqemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlJHQ9RmUoKSxYemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgZSR0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBlJHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9WHplfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxLemU9ZTQoKSxyJHQ9RmUoKSxaemU9THYoKSxRaXQ9WzAsMV0sSnplPWZ1bmN0aW9uKGUpeyR6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiByJHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiByJHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KEt6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oWnplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9SnplfSk7dmFyIG4kdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLHRGZT1MdigpLGVGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxyRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgZUZlO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0odEZlLlNjYWxlKTtyb3QuQ29sb3I9ckZlfSk7dmFyIG8kdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkZlPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSxpJHQ9RmUoKSxpRmU9THYoKSxvRmU9ZnVuY3Rpb24oZSl7bkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFtpJHQuTWF0aC5taW4ociwwKSxpJHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0oaUZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9b0ZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhRmU9KGRlKCksVXQocGUpKSxzRmU9KEVyKCksVXQoTXIpKSxsRmU9ZTQoKSxFUz1GZSgpLGNGZT1MdigpLHVGZT1mdW5jdGlvbihlKXthRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49c0ZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChsRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KGNGZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPXVGZX0pO3ZhciBhJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1mRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPWRGZX0pO3ZhciBzJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLGdGZT0oRXIoKSxVdChNcikpLF9GZT12ZCgpLHlGZT1mdW5jdGlvbihlKXttRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWdGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0oX0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPXlGZX0pO3ZhciBsJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZGZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSx4RmU9dmQoKSxiRmU9ZnVuY3Rpb24oZSl7dkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oeEZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9YkZlfSk7dmFyIGMkdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd0ZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLFNGZT12ZCgpLE1GZT1mdW5jdGlvbihlKXt3RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fShTRmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPU1GZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksRUZlPVpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPUVGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKG8kdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIoYSR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihzJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGwkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIoYyR0KCksSHUpO3ZhciBURmU9ZW90KCksQ0ZlPXZkKCk7ZnVuY3Rpb24gQUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQ0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2YgVEZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1BRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBQRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLHUkdD1fbCgpLGgkdD1CdSgpLElGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgTEZlPWZ1bmN0aW9uKGUpe1BGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihoJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9SUZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgdSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyB1JHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBoJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9TEZlO3ZhciB4ZH0pO3ZhciBmJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKCRYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEtYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrRmU9RmUoKSxSRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcga0ZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UkZlfSk7dmFyIHAkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkZlPShkZSgpLFV0KHBlKSksREZlPW80KCksT0ZlPWZ1bmN0aW9uKGUpe05GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShERmUuRGlzcGF0Y2hlcik7cG90LktleT1PRmV9KTt2YXIgbSR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6RmU9KGRlKCksVXQocGUpKSxkJHQ9RmUoKSxGRmU9bzQoKSxCRmU9ZnVuY3Rpb24oZSl7ekZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9ZCR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGQkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KEZGZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9QkZlfSk7dmFyIF8kdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZyR0PUZlKCksVkZlPW80KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1nJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZyR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KFZGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9VUZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihtJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihfJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249cUZlfSk7dmFyIHgkdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgR0ZlPShkZSgpLFV0KHBlKSkseSR0PU52KCksdiR0PUZlKCksV0ZlPUR2KCksWUZlPWZ1bmN0aW9uKGUpe0dGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyB2JHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgdiR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj15JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eSR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oV0ZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9WUZlfSk7dmFyIHckdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgakZlPShkZSgpLFV0KHBlKSksYiR0PU52KCksczQ9RmUoKSxYRmU9RHYoKSwkRmU9ZnVuY3Rpb24oZSl7akZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9YiR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9YiR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KFhGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9JEZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS0ZlPShkZSgpLFV0KHBlKSksUyR0PU52KCkseG90PUZlKCksWkZlPUR2KCksSkZlPWZ1bmN0aW9uKGUpe0tGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9UyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPVMkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oWkZlLkludGVyYWN0aW9uKTtib3QuS2V5PUpGZX0pO3ZhciBDJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFGZT0oZGUoKSxVdChwZSkpLHRCZT0oRXIoKSxVdChNcikpLE0kdD1OdigpLEUkdD1rcygpLHlsPUZlKCksZUJlPWw0KCksckJlPUR2KCksVCR0PWU0KCksbkJlPWZ1bmN0aW9uKGUpe1FGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZUJlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz10QmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1NJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIFQkdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gVCR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgRSR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIEUkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KHJCZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209bkJlfSk7dmFyIFAkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaUJlPShkZSgpLFV0KHBlKSksQSR0PU52KCksTW90PUZlKCksb0JlPUR2KCksYUJlPWZ1bmN0aW9uKGUpe2lCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9QSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9QSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0ob0JlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1hQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3Rhcih4JHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHckdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihDJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKFAkdCgpLFpnKTt2YXIgc0JlPWU0KCk7Wmcuem9vbU91dD1zQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLGNCZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciB1QmU9ZnVuY3Rpb24oZSl7bEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KGNCZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPXVCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaEJlPShkZSgpLFV0KHBlKSksZkJlPWw0KCksQ290PUZlKCkscEJlPVlnKCksVUY9UG90KCksZEJlPVRvdCgpLG1CZT1mdW5jdGlvbihlKXtoQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgZkJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1wQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0oZEJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPW1CZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1GZSgpLHlCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgdkJlPWZ1bmN0aW9uKGUpe2dCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFfQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oeUJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPXZCZX0pO3ZhciBJJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHhCZT0oZGUoKSxVdChwZSkpLGJCZT1Mb3QoKSx3QmU9bDQoKSxrb3Q9RmUoKSxTQmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB3QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oYkJlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj1TQmV9KTt2YXIgTCR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNQmU9KGRlKCksVXQocGUpKSxFQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciBUQmU9ZnVuY3Rpb24oZSl7TUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KEVCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9VEJlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBQmU9WWcoKSxQQmU9a2MoKSxJQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9QUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oUEJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1JQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMQmU9KGRlKCksVXQocGUpKSxrJHQ9RmUoKSxrQmU9V0YoKSxSQmU9ZnVuY3Rpb24oZSl7TEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDprJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OmskdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KGtCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1SQmV9KTt2YXIgUiR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLERCZT0kQSgpLE9CZT1CdSgpLHpCZT1GZSgpLEZCZT1rYygpLEJCZT1mdW5jdGlvbihlKXtOQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9T0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj16QmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksREJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oRkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPUJCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLEhCZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShIQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIFZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD1WQmU7dmFyIFVCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPVVCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gcUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1xQmU7ZnVuY3Rpb24gR0JlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUdCZTtmdW5jdGlvbiBXQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1XQmU7ZnVuY3Rpb24gWUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVlCZTtmdW5jdGlvbiBqQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPWpCZTt2YXIgWEJlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uICRCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKFhCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPSRCZTt2YXIgS0JlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIFpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoS0JlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPVpCZX0pO3ZhciBOJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEpCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSxRQmU9JEEoKSx0SGU9QnUoKSxlSGU9WEYoKSxKZz1GZSgpLHJIZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksbkhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSxpSGU9ZnVuY3Rpb24oZSl7SkJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPXRIZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZUhlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsUUJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgbkhlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0ockhlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD1pSGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgb0hlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKG9IZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgTyR0PUgoKGVHbixEJHQpPT57InVzZSBzdHJpY3QiO0QkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgQiR0PUgoKHJHbixGJHQpPT57InVzZSBzdHJpY3QiO3ZhciBhSGU9TyR0KCk7ZnVuY3Rpb24geiR0KGUpe3JldHVybiBhSGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9RiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKHokdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUseiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0hlPUZlKCksSCR0PTAsbEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBzSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9SCR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9bEhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLGNIZT1CJHQoKSx1SGU9WW90KCksaEhlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIGhIZS5TY2FsZT9WJHQoZSk6ZSBpbnN0YW5jZW9mIHVIZS5EYXRhc2V0P1UkdChlKTpjSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9xJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24gViR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT1WJHQ7ZnVuY3Rpb24gVSR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9VSR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgVyR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gcSR0KGUpe3JldHVybiBuZXcgRyR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PXEkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgWSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBHJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9RyR0O3ZhciBXJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVckdDt2YXIgWSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9WSR0fSk7dmFyIGokdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPSRvdCgpO2Z1bmN0aW9uIHBIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWZIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9cEhlfSk7dmFyIEskdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksWCR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uICQkdChlKXt2YXIgdD1kSGUubWVtb2l6ZShlLFgkdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IFgkdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9JCR0O2Z1bmN0aW9uIG1IZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPSQkdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9bUhlfSk7dmFyIFokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ0hlPUNTKCk7ZnVuY3Rpb24gX0hlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9Z0hlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPV9IZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoSyR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWiR0KCksQVMpO3ZhciB5SGU9JG90KCk7QVMuc2lnbj15SGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEokdD0oRXIoKSxVdChNcikpLHZIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9dkhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB4SGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiBRJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPXhIZTtmdW5jdGlvbiBRJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz1RJHQ7ZnVuY3Rpb24gYkhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24gd0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiB0S3QoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9dEt0O2Z1bmN0aW9uIGVLdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PWVLdDtmdW5jdGlvbiBTSGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT1TSGU7ZnVuY3Rpb24gTUhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9TUhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD10S3QodCk7dmFyIHI9SiR0LmNvbG9yKHQuc3Ryb2tlKSxuPWVLdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9YkhlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1KJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXdIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9RUhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUSGU9KEVyKCksVXQoTXIpKSxyS3Q9RmUoKSxDSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD1USGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtyS3QuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyByS3QuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPUNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG5LdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLEFIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IG5LdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IG5LdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9QUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUEhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksaUt0PUdvdCgpLG9hdD1DUygpLElIZT1rYygpLExIZT1GdigpLGtIZT1VdSgpLFJIZT1EZigpLE5IZT1ZZygpLERIZT1JZigpLE9IZT1pYXQoKTtRRi5SZW5kZXJlcj1ESGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIHpIZT1mdW5jdGlvbihlKXtQSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IoaUt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcihpS3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2UoT0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9TkhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IGtIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUkhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IExIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gb0t0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBvS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShJSGUuQ29tcG9uZW50KTtRRi5QbG90PXpIZTtmdW5jdGlvbiBvS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIGFLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRkhlPShkZSgpLFV0KHBlKSksQkhlPXJzKCksSEhlPUZlKCksVkhlPXpvdCgpLFVIZT1mdW5jdGlvbihlKXtGSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1ISGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIEJIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oVkhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPVVIZX0pO3ZhciBzS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHFIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxHSGU9V0YoKSxXSGU9ZnVuY3Rpb24oZSl7cUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oR0hlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVdIZX0pO3ZhciBsS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlIZT0oZGUoKSxVdChwZSkpLGpIZT1Wb3QoKSxYSGU9MiwkSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPVhIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KGpIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD0kSGV9KTt2YXIgY0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLSGU9KGRlKCksVXQocGUpKSxaSGU9cUYoKSxKSGU9ZnVuY3Rpb24oZSl7S0hlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShaSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1KSGV9KTt2YXIgdUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBRSGU9KGRlKCksVXQocGUpKSx0VmU9cUYoKSxlVmU9ZnVuY3Rpb24oZSl7UUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KHRWZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPWVWZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihMJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihSJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTiR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihhS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoc0t0KCksX2EpO05zLl9fZXhwb3J0U3RhcihsS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKGNLdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIodUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgclZlPShkZSgpLFV0KHBlKSksblZlPURmKCksaVZlPWZ1bmN0aW9uKGUpe3JWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShuVmUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPWlWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG9WZT0oZGUoKSxVdChwZSkpLGFWZT1EZigpLHNWZT1mdW5jdGlvbihlKXtvVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KGFWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPXNWZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBsVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLGNWZT1EZigpLHVWZT1mdW5jdGlvbihlKXtsVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oY1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj11VmU7dmFyIGhWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sZlZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIHBWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxoVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxmVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9cFZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZFZlPShkZSgpLFV0KHBlKSksaEt0PUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2RWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0obVZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiB5VmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1oS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixfVmUsclswXSwwKTtoS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPXlWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksdlZlPURmKCkseFZlPWZ1bmN0aW9uKGUpe2ZLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KHZWZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj14VmU7dmFyIGJWZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixiVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB3VmU9ZnVuY3Rpb24oZSl7Zkt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj13VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTVmU9KGRlKCksVXQocGUpKSxNVmU9RGYoKSxFVmU9ZnVuY3Rpb24oZSl7U1ZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oTVZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9RVZlfSk7dmFyIHBLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj1UVmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxBVmU9cEt0KCksUFZlPURmKCksSVZlPWZ1bmN0aW9uKGUpe0NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KFBWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1JVmU7dmFyIExWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBrVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IEFWZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLExWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFSVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPU5WZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1rVmU7ZnVuY3Rpb24gUlZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBOVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEVmU9KGRlKCksVXQocGUpKSxkS3Q9a3MoKSx4YXQ9RmUoKSxPVmU9aWF0KCksZzQ9cnMoKSx6VmU9ZnVuY3Rpb24oZSl7RFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IE9WZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiBkS3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgZEt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9elZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZWZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksQlZlPUxmKCksSFZlPUJ2KCksVlZlPVV1KCksbUt0PW5CKCksVVZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLHFWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksR1ZlPUh2KCksZ0t0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9cVZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBXVmU9ZnVuY3Rpb24oZSl7RlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBCVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBVVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFZWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbUt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgSFZlLkNhbnZhc0RyYXdlcihpLG1LdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1nS3Rbcl07cmV0dXJuIG49PW51bGw/Z0t0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oR1ZlLlhZUGxvdCk7bEIuTGluZT1XVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLGpWZT1rcygpLF80PUZlKCksTWF0PUJ2KCksX0t0PW1hdCgpLFhWZT1VdSgpLHlLdD1uQigpLHVCPUlTKCksJFZlPVNhdCgpLERzPXJzKCksS1ZlPWZ1bmN0aW9uKGUpe1lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IGpWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHlLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSx5S3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IFhWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgX0t0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLF9LdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fSgkVmUuTGluZSk7RWF0LkFyZWE9S1ZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWlZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksSlZlPUxmKCksUVZlPUJ1KCksdFVlPUJ2KCksZVVlPVV1KCksclVlPW9CKCksblVlPUNTKCksUGF0PWtzKCksdkt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSx4S3Q9SVMoKSxoQj1ycygpLGlVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7WlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPVFWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9blVlLm1lbW9pemUob1VlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBKVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgclVlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgdFVlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2Ygdkt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIHZLdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoeEt0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih4S3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KGlVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gb1VlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgd0t0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhVWU9KGRlKCksVXQocGUpKSxzVWU9a3MoKSxsVWU9RmUoKSxiS3Q9eTQoKSxjVWU9cnMoKSx1VWU9ZnVuY3Rpb24oZSl7YVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBsVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBzVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49Y1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihiS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oYkt0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj11VWV9KTt2YXIgU0t0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGZVZT1MZigpLHBVZT1CdSgpLGRVZT1rcygpLFZ2PUZlKCksbVVlPWZhdCgpLGdVZT1kYXQoKSxfVWU9VXUoKSx5VWU9QUYoKSxNZD1ycygpLHZVZT1mdW5jdGlvbihlKXtoVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1wVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgZFVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZ1VlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IF9VZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgbVVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4geVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGZVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9dlVlfSk7dmFyIE1LdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeFVlPShkZSgpLFV0KHBlKSksYlVlPShFcigpLFV0KE1yKSksRGF0PV9sKCksd1VlPUxmKCksU1VlPUJ2KCksTVVlPVV1KCksRVVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksVFVlPUh2KCksQ1VlPWZ1bmN0aW9uKGUpe3hVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHdVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgTVVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IFNVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9YlVlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0oVFVlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1DVWV9KTt2YXIgVEt0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxQVWU9QnUoKSxJVWU9WEYoKSxMVWU9VXUoKSxFS3Q9dmF0KCksa1VlPUxmKCksUlVlPUJ2KCksTlVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxEVWU9SHYoKSxPVWU9ZnVuY3Rpb24oZSl7QVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9UFVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcga1VlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBOVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9SVVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBMVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUlVlLkNhbnZhc0RyYXdlcihpLEVLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oRFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9T1VlfSk7dmFyIENLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgelVlPShkZSgpLFV0KHBlKSksRlVlPUxmKCksQlVlPVV1KCksSFVlPV9hdCgpLFZVZT1rcygpLFVVZT1BRigpLExTPXJzKCkscVVlPUh2KCksR1VlPWZ1bmN0aW9uKGUpe3pVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IFZVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQlVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gVVVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBGVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KHFVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUdVZX0pO3ZhciBJS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdVZT0oZGUoKSxVdChwZSkpLEFLdD0oRXIoKSxVdChNcikpLFlVZT1MZigpLFBLdD1DUygpLHQwPUZlKCksalVlPVRhdCgpLFhVZT1ycygpLCRVZT1mdW5jdGlvbihlKXtXVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9UEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PVBLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBZVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBBS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1BS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPVhVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KGpVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9JFVlfSk7dmFyIGtLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS1VlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksWlVlPUJ1KCksTEt0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxKVWU9cnMoKSxRVWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9WlVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9TEt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUxLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1KVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj1RVWV9KTt2YXIgUkt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0cWU9KGRlKCksVXQocGUpKSxlcWU9RmUoKSxycWU9eTQoKSxucWU9cnMoKSxpcWU9ZnVuY3Rpb24oZSl7dHFlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJmVxZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89bnFlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0ocnFlLkJhcik7WWF0LldhdGVyZmFsbD1pcWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHdLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKE1LdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoVEt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihDS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKElLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoa0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihSS3QoKSxPcyl9KTt2YXIgTkt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpOyRqdCgpO3ZhciBvcWU9TGYoKTtsbi5BbmltYXRvcnM9b3FlO3ZhciBhcWU9ZiR0KCk7bG4uQXhlcz1hcWU7dmFyIHNxZT1Qb3QoKTtsbi5Db21wb25lbnRzPXNxZTt2YXIgbHFlPSRBKCk7bG4uQ29uZmlncz1scWU7dmFyIGNxZT1CdSgpO2xuLkZvcm1hdHRlcnM9Y3FlO3ZhciB1cWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPXVxZTt2YXIgaHFlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPWhxZTt2YXIgZnFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWZxZTt2YXIgcHFlPU52KCk7bG4uRGlzcGF0Y2hlcnM9cHFlO3ZhciBkcWU9QnYoKTtsbi5EcmF3ZXJzPWRxZTt2YXIgbXFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPW1xZTt2YXIgZ3FlPUlTKCk7bG4uUGxvdHM9Z3FlO3ZhciBfcWU9a3MoKTtsbi5TY2FsZXM9X3FlO3ZhciB5cWU9RmUoKTtsbi5VdGlscz15cWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciB2cWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9dnFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIHhxZT1OS3QoKTtsbi52ZXJzaW9uPXhxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyIFFLdD1IKChzWG4sSkt0KT0+e2Z1bmN0aW9uIEJxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9Skt0LmV4cG9ydHM9QnFlfSk7dmFyIFl2PUgoKGxYbix0WnQpPT57ZnVuY3Rpb24gSHFlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9dFp0LmV4cG9ydHM9SHFlfSk7dmFyIE00PUgoKGNYbixlWnQpPT57dmFyIFZxZT1ZdigpO2Z1bmN0aW9uIFVxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKFZxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfWVadC5leHBvcnRzPVVxZX0pO3ZhciBuWnQ9SCgodVhuLHJadCk9Pnt2YXIgcXFlPU00KCksR3FlPUFycmF5LnByb3RvdHlwZSxXcWU9R3FlLnNwbGljZTtmdW5jdGlvbiBZcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXFxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6V3FlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfXJadC5leHBvcnRzPVlxZX0pO3ZhciBvWnQ9SCgoaFhuLGladCk9Pnt2YXIganFlPU00KCk7ZnVuY3Rpb24gWHFlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1qcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfWladC5leHBvcnRzPVhxZX0pO3ZhciBzWnQ9SCgoZlhuLGFadCk9Pnt2YXIgJHFlPU00KCk7ZnVuY3Rpb24gS3FlKGUpe3JldHVybiAkcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1hWnQuZXhwb3J0cz1LcWV9KTt2YXIgY1p0PUgoKHBYbixsWnQpPT57dmFyIFpxZT1NNCgpO2Z1bmN0aW9uIEpxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1acWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31sWnQuZXhwb3J0cz1KcWV9KTt2YXIgRTQ9SCgoZFhuLHVadCk9Pnt2YXIgUXFlPVFLdCgpLHRHZT1uWnQoKSxlR2U9b1p0KCksckdlPXNadCgpLG5HZT1jWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9UXFlO3pTLnByb3RvdHlwZS5kZWxldGU9dEdlO3pTLnByb3RvdHlwZS5nZXQ9ZUdlO3pTLnByb3RvdHlwZS5oYXM9ckdlO3pTLnByb3RvdHlwZS5zZXQ9bkdlO3VadC5leHBvcnRzPXpTfSk7dmFyIGZadD1IKChtWG4saFp0KT0+e3ZhciBpR2U9RTQoKTtmdW5jdGlvbiBvR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyBpR2UsdGhpcy5zaXplPTB9aFp0LmV4cG9ydHM9b0dlfSk7dmFyIGRadD1IKChnWG4scFp0KT0+e2Z1bmN0aW9uIGFHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1wWnQuZXhwb3J0cz1hR2V9KTt2YXIgZ1p0PUgoKF9YbixtWnQpPT57ZnVuY3Rpb24gc0dlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1tWnQuZXhwb3J0cz1zR2V9KTt2YXIgeVp0PUgoKHlYbixfWnQpPT57ZnVuY3Rpb24gbEdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1fWnQuZXhwb3J0cz1sR2V9KTt2YXIgY3N0PUgoKHZYbix2WnQpPT57dmFyIGNHZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dlp0LmV4cG9ydHM9Y0dlfSk7dmFyIEhjPUgoKHhYbix4WnQpPT57dmFyIHVHZT1jc3QoKSxoR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmR2U9dUdlfHxoR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7eFp0LmV4cG9ydHM9ZkdlfSk7dmFyIGp2PUgoKGJYbixiWnQpPT57dmFyIHBHZT1IYygpLGRHZT1wR2UuU3ltYm9sO2JadC5leHBvcnRzPWRHZX0pO3ZhciBFWnQ9SCgod1huLE1adCk9Pnt2YXIgd1p0PWp2KCksU1p0PU9iamVjdC5wcm90b3R5cGUsbUdlPVNadC5oYXNPd25Qcm9wZXJ0eSxnR2U9U1p0LnRvU3RyaW5nLFQ0PXdadD93WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIF9HZShlKXt2YXIgdD1tR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWdHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX1NWnQuZXhwb3J0cz1fR2V9KTt2YXIgQ1p0PUgoKFNYbixUWnQpPT57dmFyIHlHZT1PYmplY3QucHJvdG90eXBlLHZHZT15R2UudG9TdHJpbmc7ZnVuY3Rpb24geEdlKGUpe3JldHVybiB2R2UuY2FsbChlKX1UWnQuZXhwb3J0cz14R2V9KTt2YXIgczA9SCgoTVhuLEladCk9Pnt2YXIgQVp0PWp2KCksYkdlPUVadCgpLHdHZT1DWnQoKSxTR2U9IltvYmplY3QgTnVsbF0iLE1HZT0iW29iamVjdCBVbmRlZmluZWRdIixQWnQ9QVp0P0FadC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gRUdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/TUdlOlNHZTpQWnQmJlBadCBpbiBPYmplY3QoZSk/YkdlKGUpOndHZShlKX1JWnQuZXhwb3J0cz1FR2V9KTt2YXIgTWw9SCgoRVhuLExadCk9PntmdW5jdGlvbiBUR2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9TFp0LmV4cG9ydHM9VEdlfSk7dmFyIEZTPUgoKFRYbixrWnQpPT57dmFyIENHZT1zMCgpLEFHZT1NbCgpLFBHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsSUdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsTEdlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsa0dlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUkdlKGUpe2lmKCFBR2UoZSkpcmV0dXJuITE7dmFyIHQ9Q0dlKGUpO3JldHVybiB0PT1JR2V8fHQ9PUxHZXx8dD09UEdlfHx0PT1rR2V9a1p0LmV4cG9ydHM9UkdlfSk7dmFyIE5adD1IKChDWG4sUlp0KT0+e3ZhciBOR2U9SGMoKSxER2U9TkdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtSWnQuZXhwb3J0cz1ER2V9KTt2YXIgelp0PUgoKEFYbixPWnQpPT57dmFyIHVzdD1OWnQoKSxEWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIE9HZShlKXtyZXR1cm4hIURadCYmRFp0IGluIGV9T1p0LmV4cG9ydHM9T0dlfSk7dmFyIGhzdD1IKChQWG4sRlp0KT0+e3ZhciB6R2U9RnVuY3Rpb24ucHJvdG90eXBlLEZHZT16R2UudG9TdHJpbmc7ZnVuY3Rpb24gQkdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gRkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifUZadC5leHBvcnRzPUJHZX0pO3ZhciBIWnQ9SCgoSVhuLEJadCk9Pnt2YXIgSEdlPUZTKCksVkdlPXpadCgpLFVHZT1NbCgpLHFHZT1oc3QoKSxHR2U9L1tcXF4kLiorPygpW1xde318XS9nLFdHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxZR2U9RnVuY3Rpb24ucHJvdG90eXBlLGpHZT1PYmplY3QucHJvdG90eXBlLFhHZT1ZR2UudG9TdHJpbmcsJEdlPWpHZS5oYXNPd25Qcm9wZXJ0eSxLR2U9UmVnRXhwKCJeIitYR2UuY2FsbCgkR2UpLnJlcGxhY2UoR0dlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIFpHZShlKXtpZighVUdlKGUpfHxWR2UoZSkpcmV0dXJuITE7dmFyIHQ9SEdlKGUpP0tHZTpXR2U7cmV0dXJuIHQudGVzdChxR2UoZSkpfUJadC5leHBvcnRzPVpHZX0pO3ZhciBVWnQ9SCgoTFhuLFZadCk9PntmdW5jdGlvbiBKR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX1WWnQuZXhwb3J0cz1KR2V9KTt2YXIgbDA9SCgoa1huLHFadCk9Pnt2YXIgUUdlPUhadCgpLHRXZT1VWnQoKTtmdW5jdGlvbiBlV2UoZSx0KXt2YXIgcj10V2UoZSx0KTtyZXR1cm4gUUdlKHIpP3I6dm9pZCAwfXFadC5leHBvcnRzPWVXZX0pO3ZhciB6Qj1IKChSWG4sR1p0KT0+e3ZhciByV2U9bDAoKSxuV2U9SGMoKSxpV2U9cldlKG5XZSwiTWFwIik7R1p0LmV4cG9ydHM9aVdlfSk7dmFyIEM0PUgoKE5YbixXWnQpPT57dmFyIG9XZT1sMCgpLGFXZT1vV2UoT2JqZWN0LCJjcmVhdGUiKTtXWnQuZXhwb3J0cz1hV2V9KTt2YXIgWFp0PUgoKERYbixqWnQpPT57dmFyIFladD1DNCgpO2Z1bmN0aW9uIHNXZSgpe3RoaXMuX19kYXRhX189WVp0P1ladChudWxsKTp7fSx0aGlzLnNpemU9MH1qWnQuZXhwb3J0cz1zV2V9KTt2YXIgS1p0PUgoKE9YbiwkWnQpPT57ZnVuY3Rpb24gbFdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSRadC5leHBvcnRzPWxXZX0pO3ZhciBKWnQ9SCgoelhuLFpadCk9Pnt2YXIgY1dlPUM0KCksdVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixoV2U9T2JqZWN0LnByb3RvdHlwZSxmV2U9aFdlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHBXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKGNXZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PXVXZT92b2lkIDA6cn1yZXR1cm4gZldlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1aWnQuZXhwb3J0cz1wV2V9KTt2YXIgdEp0PUgoKEZYbixRWnQpPT57dmFyIGRXZT1DNCgpLG1XZT1PYmplY3QucHJvdG90eXBlLGdXZT1tV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gX1dlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIGRXZT90W2VdIT09dm9pZCAwOmdXZS5jYWxsKHQsZSl9UVp0LmV4cG9ydHM9X1dlfSk7dmFyIHJKdD1IKChCWG4sZUp0KT0+e3ZhciB5V2U9QzQoKSx2V2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIHhXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09eVdlJiZ0PT09dm9pZCAwP3ZXZTp0LHRoaXN9ZUp0LmV4cG9ydHM9eFdlfSk7dmFyIGlKdD1IKChIWG4sbkp0KT0+e3ZhciBiV2U9WFp0KCksd1dlPUtadCgpLFNXZT1KWnQoKSxNV2U9dEp0KCksRVdlPXJKdCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1iV2U7QlMucHJvdG90eXBlLmRlbGV0ZT13V2U7QlMucHJvdG90eXBlLmdldD1TV2U7QlMucHJvdG90eXBlLmhhcz1NV2U7QlMucHJvdG90eXBlLnNldD1FV2U7bkp0LmV4cG9ydHM9QlN9KTt2YXIgc0p0PUgoKFZYbixhSnQpPT57dmFyIG9KdD1pSnQoKSxUV2U9RTQoKSxDV2U9ekIoKTtmdW5jdGlvbiBBV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBvSnQsbWFwOm5ldyhDV2V8fFRXZSksc3RyaW5nOm5ldyBvSnR9fWFKdC5leHBvcnRzPUFXZX0pO3ZhciBjSnQ9SCgoVVhuLGxKdCk9PntmdW5jdGlvbiBQV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9bEp0LmV4cG9ydHM9UFdlfSk7dmFyIEE0PUgoKHFYbix1SnQpPT57dmFyIElXZT1jSnQoKTtmdW5jdGlvbiBMV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBJV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH11SnQuZXhwb3J0cz1MV2V9KTt2YXIgZkp0PUgoKEdYbixoSnQpPT57dmFyIGtXZT1BNCgpO2Z1bmN0aW9uIFJXZShlKXt2YXIgdD1rV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1oSnQuZXhwb3J0cz1SV2V9KTt2YXIgZEp0PUgoKFdYbixwSnQpPT57dmFyIE5XZT1BNCgpO2Z1bmN0aW9uIERXZShlKXtyZXR1cm4gTldlKHRoaXMsZSkuZ2V0KGUpfXBKdC5leHBvcnRzPURXZX0pO3ZhciBnSnQ9SCgoWVhuLG1KdCk9Pnt2YXIgT1dlPUE0KCk7ZnVuY3Rpb24geldlKGUpe3JldHVybiBPV2UodGhpcyxlKS5oYXMoZSl9bUp0LmV4cG9ydHM9eldlfSk7dmFyIHlKdD1IKChqWG4sX0p0KT0+e3ZhciBGV2U9QTQoKTtmdW5jdGlvbiBCV2UoZSx0KXt2YXIgcj1GV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31fSnQuZXhwb3J0cz1CV2V9KTt2YXIgRkI9SCgoWFhuLHZKdCk9Pnt2YXIgSFdlPXNKdCgpLFZXZT1mSnQoKSxVV2U9ZEp0KCkscVdlPWdKdCgpLEdXZT15SnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9SFdlO0hTLnByb3RvdHlwZS5kZWxldGU9VldlO0hTLnByb3RvdHlwZS5nZXQ9VVdlO0hTLnByb3RvdHlwZS5oYXM9cVdlO0hTLnByb3RvdHlwZS5zZXQ9R1dlO3ZKdC5leHBvcnRzPUhTfSk7dmFyIGJKdD1IKCgkWG4seEp0KT0+e3ZhciBXV2U9RTQoKSxZV2U9ekIoKSxqV2U9RkIoKSxYV2U9MjAwO2Z1bmN0aW9uICRXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFdXZSl7dmFyIG49ci5fX2RhdGFfXztpZighWVdlfHxuLmxlbmd0aDxYV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IGpXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9eEp0LmV4cG9ydHM9JFdlfSk7dmFyIFA0PUgoKEtYbix3SnQpPT57dmFyIEtXZT1FNCgpLFpXZT1mWnQoKSxKV2U9ZFp0KCksUVdlPWdadCgpLHRZZT15WnQoKSxlWWU9Ykp0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgS1dlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPVpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPUpXZTtWUy5wcm90b3R5cGUuZ2V0PVFXZTtWUy5wcm90b3R5cGUuaGFzPXRZZTtWUy5wcm90b3R5cGUuc2V0PWVZZTt3SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChaWG4sU0p0KT0+e2Z1bmN0aW9uIHJZZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfVNKdC5leHBvcnRzPXJZZX0pO3ZhciBmc3Q9SCgoSlhuLE1KdCk9Pnt2YXIgblllPWwwKCksaVllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ZZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTtNSnQuZXhwb3J0cz1pWWV9KTt2YXIgSTQ9SCgoUVhuLFRKdCk9Pnt2YXIgRUp0PWZzdCgpO2Z1bmN0aW9uIG9ZZShlLHQscil7dD09Il9fcHJvdG9fXyImJkVKdD9FSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfVRKdC5leHBvcnRzPW9ZZX0pO3ZhciBMND1IKCh0JG4sQ0p0KT0+e3ZhciBhWWU9STQoKSxzWWU9WXYoKSxsWWU9T2JqZWN0LnByb3RvdHlwZSxjWWU9bFllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHVZZShlLHQscil7dmFyIG49ZVt0XTsoIShjWWUuY2FsbChlLHQpJiZzWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJmFZZShlLHQscil9Q0p0LmV4cG9ydHM9dVllfSk7dmFyIFVTPUgoKGUkbixBSnQpPT57dmFyIGhZZT1MNCgpLGZZZT1JNCgpO2Z1bmN0aW9uIHBZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/ZlllKHIscyxsKTpoWWUocixzLGwpfXJldHVybiByfUFKdC5leHBvcnRzPXBZZX0pO3ZhciBJSnQ9SCgociRuLFBKdCk9PntmdW5jdGlvbiBkWWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufVBKdC5leHBvcnRzPWRZZX0pO3ZhciBZdT1IKChuJG4sTEp0KT0+e2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUxKdC5leHBvcnRzPW1ZZX0pO3ZhciBSSnQ9SCgoaSRuLGtKdCk9Pnt2YXIgZ1llPXMwKCksX1llPVl1KCkseVllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIHZZZShlKXtyZXR1cm4gX1llKGUpJiZnWWUoZSk9PXlZZX1rSnQuZXhwb3J0cz12WWV9KTt2YXIgcVM9SCgobyRuLE9KdCk9Pnt2YXIgTkp0PVJKdCgpLHhZZT1ZdSgpLERKdD1PYmplY3QucHJvdG90eXBlLGJZZT1ESnQuaGFzT3duUHJvcGVydHksd1llPURKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxTWWU9Tkp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/Tkp0OmZ1bmN0aW9uKGUpe3JldHVybiB4WWUoZSkmJmJZZS5jYWxsKGUsImNhbGxlZSIpJiYhd1llLmNhbGwoZSwiY2FsbGVlIil9O09KdC5leHBvcnRzPVNZZX0pO3ZhciBUaT1IKChhJG4sekp0KT0+e3ZhciBNWWU9QXJyYXkuaXNBcnJheTt6SnQuZXhwb3J0cz1NWWV9KTt2YXIgQkp0PUgoKHMkbixGSnQpPT57ZnVuY3Rpb24gRVllKCl7cmV0dXJuITF9Rkp0LmV4cG9ydHM9RVllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciBUWWU9SGMoKSxDWWU9Qkp0KCksVUp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LEhKdD1VSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLEFZZT1ISnQmJkhKdC5leHBvcnRzPT09VUp0LFZKdD1BWWU/VFllLkJ1ZmZlcjp2b2lkIDAsUFllPVZKdD9WSnQuaXNCdWZmZXI6dm9pZCAwLElZZT1QWWV8fENZZTtHUy5leHBvcnRzPUlZZX0pO3ZhciBSND1IKChsJG4scUp0KT0+e3ZhciBMWWU9OTAwNzE5OTI1NDc0MDk5MSxrWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFJZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/TFllOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZrWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fXFKdC5leHBvcnRzPVJZZX0pO3ZhciBIQj1IKChjJG4sR0p0KT0+e3ZhciBOWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBEWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1OWWV9R0p0LmV4cG9ydHM9RFllfSk7dmFyIFlKdD1IKCh1JG4sV0p0KT0+e3ZhciBPWWU9czAoKSx6WWU9SEIoKSxGWWU9WXUoKSxCWWU9IltvYmplY3QgQXJndW1lbnRzXSIsSFllPSJbb2JqZWN0IEFycmF5XSIsVlllPSJbb2JqZWN0IEJvb2xlYW5dIixVWWU9IltvYmplY3QgRGF0ZV0iLHFZZT0iW29iamVjdCBFcnJvcl0iLEdZZT0iW29iamVjdCBGdW5jdGlvbl0iLFdZZT0iW29iamVjdCBNYXBdIixZWWU9IltvYmplY3QgTnVtYmVyXSIsalllPSJbb2JqZWN0IE9iamVjdF0iLFhZZT0iW29iamVjdCBSZWdFeHBdIiwkWWU9IltvYmplY3QgU2V0XSIsS1llPSJbb2JqZWN0IFN0cmluZ10iLFpZZT0iW29iamVjdCBXZWFrTWFwXSIsSlllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsUVllPSJbb2JqZWN0IERhdGFWaWV3XSIsdGplPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGVqZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixyamU9IltvYmplY3QgSW50OEFycmF5XSIsbmplPSJbb2JqZWN0IEludDE2QXJyYXldIixpamU9IltvYmplY3QgSW50MzJBcnJheV0iLG9qZT0iW29iamVjdCBVaW50OEFycmF5XSIsYWplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsc2plPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsbGplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bdGplXT1WbltlamVdPVZuW3JqZV09Vm5bbmplXT1WbltpamVdPVZuW29qZV09Vm5bYWplXT1WbltzamVdPVZuW2xqZV09ITA7Vm5bQlllXT1WbltIWWVdPVZuW0pZZV09Vm5bVlllXT1WbltRWWVdPVZuW1VZZV09Vm5bcVllXT1WbltHWWVdPVZuW1dZZV09Vm5bWVllXT1WbltqWWVdPVZuW1hZZV09Vm5bJFllXT1WbltLWWVdPVZuW1pZZV09ITE7ZnVuY3Rpb24gY2plKGUpe3JldHVybiBGWWUoZSkmJnpZZShlLmxlbmd0aCkmJiEhVm5bT1llKGUpXX1XSnQuZXhwb3J0cz1jamV9KTt2YXIgTjQ9SCgoaCRuLGpKdCk9PntmdW5jdGlvbiB1amUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1qSnQuZXhwb3J0cz11amV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIGhqZT1jc3QoKSxYSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9WEp0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxmamU9TzQmJk80LmV4cG9ydHM9PT1YSnQscHN0PWZqZSYmaGplLnByb2Nlc3MscGplPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPXBqZX0pO3ZhciBZUz1IKChmJG4sWkp0KT0+e3ZhciBkamU9WUp0KCksbWplPU40KCksJEp0PVZCKCksS0p0PSRKdCYmJEp0LmlzVHlwZWRBcnJheSxnamU9S0p0P21qZShLSnQpOmRqZTtaSnQuZXhwb3J0cz1namV9KTt2YXIgZHN0PUgoKHAkbixKSnQpPT57dmFyIF9qZT1JSnQoKSx5amU9cVMoKSx2amU9VGkoKSx4amU9WHYoKSxiamU9UjQoKSx3amU9WVMoKSxTamU9T2JqZWN0LnByb3RvdHlwZSxNamU9U2plLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIEVqZShlLHQpe3ZhciByPXZqZShlKSxuPSFyJiZ5amUoZSksaT0hciYmIW4mJnhqZShlKSxvPSFyJiYhbiYmIWkmJndqZShlKSxhPXJ8fG58fGl8fG8scz1hP19qZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fE1qZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxiamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9Skp0LmV4cG9ydHM9RWplfSk7dmFyIHo0PUgoKGQkbixRSnQpPT57dmFyIFRqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIENqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHxUamU7cmV0dXJuIGU9PT1yfVFKdC5leHBvcnRzPUNqZX0pO3ZhciBtc3Q9SCgobSRuLHRRdCk9PntmdW5jdGlvbiBBamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fXRRdC5leHBvcnRzPUFqZX0pO3ZhciByUXQ9SCgoZyRuLGVRdCk9Pnt2YXIgUGplPW1zdCgpLElqZT1QamUoT2JqZWN0LmtleXMsT2JqZWN0KTtlUXQuZXhwb3J0cz1JamV9KTt2YXIgVUI9SCgoXyRuLG5RdCk9Pnt2YXIgTGplPXo0KCksa2plPXJRdCgpLFJqZT1PYmplY3QucHJvdG90eXBlLE5qZT1SamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gRGplKGUpe2lmKCFMamUoZSkpcmV0dXJuIGtqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKU5qZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1uUXQuZXhwb3J0cz1EamV9KTt2YXIgQmY9SCgoeSRuLGlRdCk9Pnt2YXIgT2plPUZTKCksemplPUhCKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiBlIT1udWxsJiZ6amUoZS5sZW5ndGgpJiYhT2plKGUpfWlRdC5leHBvcnRzPUZqZX0pO3ZhciBBZD1IKCh2JG4sb1F0KT0+e3ZhciBCamU9ZHN0KCksSGplPVVCKCksVmplPUJmKCk7ZnVuY3Rpb24gVWplKGUpe3JldHVybiBWamUoZSk/QmplKGUpOkhqZShlKX1vUXQuZXhwb3J0cz1VamV9KTt2YXIgc1F0PUgoKHgkbixhUXQpPT57dmFyIHFqZT1VUygpLEdqZT1BZCgpO2Z1bmN0aW9uIFdqZShlLHQpe3JldHVybiBlJiZxamUodCxHamUodCksZSl9YVF0LmV4cG9ydHM9V2plfSk7dmFyIGNRdD1IKChiJG4sbFF0KT0+e2Z1bmN0aW9uIFlqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWxRdC5leHBvcnRzPVlqZX0pO3ZhciBoUXQ9SCgodyRuLHVRdCk9Pnt2YXIgamplPU1sKCksWGplPXo0KCksJGplPWNRdCgpLEtqZT1PYmplY3QucHJvdG90eXBlLFpqZT1LamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gSmplKGUpe2lmKCFqamUoZSkpcmV0dXJuICRqZShlKTt2YXIgdD1YamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IVpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9dVF0LmV4cG9ydHM9SmplfSk7dmFyIGMwPUgoKFMkbixmUXQpPT57dmFyIFFqZT1kc3QoKSx0WGU9aFF0KCksZVhlPUJmKCk7ZnVuY3Rpb24gclhlKGUpe3JldHVybiBlWGUoZSk/UWplKGUsITApOnRYZShlKX1mUXQuZXhwb3J0cz1yWGV9KTt2YXIgZFF0PUgoKE0kbixwUXQpPT57dmFyIG5YZT1VUygpLGlYZT1jMCgpO2Z1bmN0aW9uIG9YZShlLHQpe3JldHVybiBlJiZuWGUodCxpWGUodCksZSl9cFF0LmV4cG9ydHM9b1hlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgYVhlPUhjKCkseVF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LG1RdD15UXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLHNYZT1tUXQmJm1RdC5leHBvcnRzPT09eVF0LGdRdD1zWGU/YVhlLkJ1ZmZlcjp2b2lkIDAsX1F0PWdRdD9nUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGxYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPV9RdD9fUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9bFhlfSk7dmFyIF9zdD1IKChFJG4sdlF0KT0+e2Z1bmN0aW9uIGNYZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fXZRdC5leHBvcnRzPWNYZX0pO3ZhciB5c3Q9SCgoVCRuLHhRdCk9PntmdW5jdGlvbiB1WGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfXhRdC5leHBvcnRzPXVYZX0pO3ZhciB2c3Q9SCgoQyRuLGJRdCk9PntmdW5jdGlvbiBoWGUoKXtyZXR1cm5bXX1iUXQuZXhwb3J0cz1oWGV9KTt2YXIgcUI9SCgoQSRuLFNRdCk9Pnt2YXIgZlhlPXlzdCgpLHBYZT12c3QoKSxkWGU9T2JqZWN0LnByb3RvdHlwZSxtWGU9ZFhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHdRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGdYZT13UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGZYZSh3UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIG1YZS5jYWxsKGUsdCl9KSl9OnBYZTtTUXQuZXhwb3J0cz1nWGV9KTt2YXIgRVF0PUgoKFAkbixNUXQpPT57dmFyIF9YZT1VUygpLHlYZT1xQigpO2Z1bmN0aW9uIHZYZShlLHQpe3JldHVybiBfWGUoZSx5WGUoZSksdCl9TVF0LmV4cG9ydHM9dlhlfSk7dmFyIEdCPUgoKEkkbixUUXQpPT57ZnVuY3Rpb24geFhlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9VFF0LmV4cG9ydHM9eFhlfSk7dmFyIEI0PUgoKEwkbixDUXQpPT57dmFyIGJYZT1tc3QoKSx3WGU9YlhlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO0NRdC5leHBvcnRzPXdYZX0pO3ZhciB4c3Q9SCgoayRuLEFRdCk9Pnt2YXIgU1hlPUdCKCksTVhlPUI0KCksRVhlPXFCKCksVFhlPXZzdCgpLENYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEFYZT1DWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KVNYZSh0LEVYZShlKSksZT1NWGUoZSk7cmV0dXJuIHR9OlRYZTtBUXQuZXhwb3J0cz1BWGV9KTt2YXIgSVF0PUgoKFIkbixQUXQpPT57dmFyIFBYZT1VUygpLElYZT14c3QoKTtmdW5jdGlvbiBMWGUoZSx0KXtyZXR1cm4gUFhlKGUsSVhlKGUpLHQpfVBRdC5leHBvcnRzPUxYZX0pO3ZhciBic3Q9SCgoTiRuLExRdCk9Pnt2YXIga1hlPUdCKCksUlhlPVRpKCk7ZnVuY3Rpb24gTlhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBSWGUoZSk/bjprWGUobixyKGUpKX1MUXQuZXhwb3J0cz1OWGV9KTt2YXIgd3N0PUgoKEQkbixrUXQpPT57dmFyIERYZT1ic3QoKSxPWGU9cUIoKSx6WGU9QWQoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfWtRdC5leHBvcnRzPUZYZX0pO3ZhciBOUXQ9SCgoTyRuLFJRdCk9Pnt2YXIgQlhlPWJzdCgpLEhYZT14c3QoKSxWWGU9YzAoKTtmdW5jdGlvbiBVWGUoZSl7cmV0dXJuIEJYZShlLFZYZSxIWGUpfVJRdC5leHBvcnRzPVVYZX0pO3ZhciBPUXQ9SCgoeiRuLERRdCk9Pnt2YXIgcVhlPWwwKCksR1hlPUhjKCksV1hlPXFYZShHWGUsIkRhdGFWaWV3Iik7RFF0LmV4cG9ydHM9V1hlfSk7dmFyIEZRdD1IKChGJG4selF0KT0+e3ZhciBZWGU9bDAoKSxqWGU9SGMoKSxYWGU9WVhlKGpYZSwiUHJvbWlzZSIpO3pRdC5leHBvcnRzPVhYZX0pO3ZhciBTc3Q9SCgoQiRuLEJRdCk9Pnt2YXIgJFhlPWwwKCksS1hlPUhjKCksWlhlPSRYZShLWGUsIlNldCIpO0JRdC5leHBvcnRzPVpYZX0pO3ZhciBWUXQ9SCgoSCRuLEhRdCk9Pnt2YXIgSlhlPWwwKCksUVhlPUhjKCksdCRlPUpYZShRWGUsIldlYWtNYXAiKTtIUXQuZXhwb3J0cz10JGV9KTt2YXIgS3Y9SCgoViRuLFhRdCk9Pnt2YXIgTXN0PU9RdCgpLEVzdD16QigpLFRzdD1GUXQoKSxDc3Q9U3N0KCksQXN0PVZRdCgpLGpRdD1zMCgpLFhTPWhzdCgpLFVRdD0iW29iamVjdCBNYXBdIixlJGU9IltvYmplY3QgT2JqZWN0XSIscVF0PSJbb2JqZWN0IFByb21pc2VdIixHUXQ9IltvYmplY3QgU2V0XSIsV1F0PSJbb2JqZWN0IFdlYWtNYXBdIixZUXQ9IltvYmplY3QgRGF0YVZpZXddIixyJGU9WFMoTXN0KSxuJGU9WFMoRXN0KSxpJGU9WFMoVHN0KSxvJGU9WFMoQ3N0KSxhJGU9WFMoQXN0KSwkdj1qUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9WVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1VUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPXFRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9R1F0fHxBc3QmJiR2KG5ldyBBc3QpIT1XUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9alF0KGUpLHI9dD09ZSRlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIHIkZTpyZXR1cm4gWVF0O2Nhc2UgbiRlOnJldHVybiBVUXQ7Y2FzZSBpJGU6cmV0dXJuIHFRdDtjYXNlIG8kZTpyZXR1cm4gR1F0O2Nhc2UgYSRlOnJldHVybiBXUXR9cmV0dXJuIHR9KTtYUXQuZXhwb3J0cz0kdn0pO3ZhciBLUXQ9SCgoVSRuLCRRdCk9Pnt2YXIgcyRlPU9iamVjdC5wcm90b3R5cGUsbCRlPXMkZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBjJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZsJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn0kUXQuZXhwb3J0cz1jJGV9KTt2YXIgUHN0PUgoKHEkbixaUXQpPT57dmFyIHUkZT1IYygpLGgkZT11JGUuVWludDhBcnJheTtaUXQuZXhwb3J0cz1oJGV9KTt2YXIgV0I9SCgoRyRuLFFRdCk9Pnt2YXIgSlF0PVBzdCgpO2Z1bmN0aW9uIGYkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgSlF0KHQpLnNldChuZXcgSlF0KGUpKSx0fVFRdC5leHBvcnRzPWYkZX0pO3ZhciBldGU9SCgoVyRuLHR0ZSk9Pnt2YXIgcCRlPVdCKCk7ZnVuY3Rpb24gZCRlKGUsdCl7dmFyIHI9dD9wJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfXR0ZS5leHBvcnRzPWQkZX0pO3ZhciBudGU9SCgoWSRuLHJ0ZSk9Pnt2YXIgbSRlPS9cdyokLztmdW5jdGlvbiBnJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsbSRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fXJ0ZS5leHBvcnRzPWckZX0pO3ZhciBsdGU9SCgoaiRuLHN0ZSk9Pnt2YXIgaXRlPWp2KCksb3RlPWl0ZT9pdGUucHJvdG90eXBlOnZvaWQgMCxhdGU9b3RlP290ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBfJGUoZSl7cmV0dXJuIGF0ZT9PYmplY3QoYXRlLmNhbGwoZSkpOnt9fXN0ZS5leHBvcnRzPV8kZX0pO3ZhciBJc3Q9SCgoWCRuLGN0ZSk9Pnt2YXIgeSRlPVdCKCk7ZnVuY3Rpb24gdiRlKGUsdCl7dmFyIHI9dD95JGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9Y3RlLmV4cG9ydHM9diRlfSk7dmFyIGh0ZT1IKCgkJG4sdXRlKT0+e3ZhciB4JGU9V0IoKSxiJGU9ZXRlKCksdyRlPW50ZSgpLFMkZT1sdGUoKSxNJGU9SXN0KCksRSRlPSJbb2JqZWN0IEJvb2xlYW5dIixUJGU9IltvYmplY3QgRGF0ZV0iLEMkZT0iW29iamVjdCBNYXBdIixBJGU9IltvYmplY3QgTnVtYmVyXSIsUCRlPSJbb2JqZWN0IFJlZ0V4cF0iLEkkZT0iW29iamVjdCBTZXRdIixMJGU9IltvYmplY3QgU3RyaW5nXSIsayRlPSJbb2JqZWN0IFN5bWJvbF0iLFIkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLE4kZT0iW29iamVjdCBEYXRhVmlld10iLEQkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixPJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIseiRlPSJbb2JqZWN0IEludDhBcnJheV0iLEYkZT0iW29iamVjdCBJbnQxNkFycmF5XSIsQiRlPSJbb2JqZWN0IEludDMyQXJyYXldIixIJGU9IltvYmplY3QgVWludDhBcnJheV0iLFYkZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLFUkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLHEkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEckZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBSJGU6cmV0dXJuIHgkZShlKTtjYXNlIEUkZTpjYXNlIFQkZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgTiRlOnJldHVybiBiJGUoZSxyKTtjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpjYXNlIEgkZTpjYXNlIFYkZTpjYXNlIFUkZTpjYXNlIHEkZTpyZXR1cm4gTSRlKGUscik7Y2FzZSBDJGU6cmV0dXJuIG5ldyBuO2Nhc2UgQSRlOmNhc2UgTCRlOnJldHVybiBuZXcgbihlKTtjYXNlIFAkZTpyZXR1cm4gdyRlKGUpO2Nhc2UgSSRlOnJldHVybiBuZXcgbjtjYXNlIGskZTpyZXR1cm4gUyRlKGUpfX11dGUuZXhwb3J0cz1HJGV9KTt2YXIgTHN0PUgoKEskbixwdGUpPT57dmFyIFckZT1NbCgpLGZ0ZT1PYmplY3QuY3JlYXRlLFkkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFXJGUodCkpcmV0dXJue307aWYoZnRlKXJldHVybiBmdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO3B0ZS5leHBvcnRzPVkkZX0pO3ZhciBrc3Q9SCgoWiRuLGR0ZSk9Pnt2YXIgaiRlPUxzdCgpLFgkZT1CNCgpLCQkZT16NCgpO2Z1bmN0aW9uIEskZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiEkJGUoZSk/aiRlKFgkZShlKSk6e319ZHRlLmV4cG9ydHM9SyRlfSk7dmFyIGd0ZT1IKChKJG4sbXRlKT0+e3ZhciBaJGU9S3YoKSxKJGU9WXUoKSxRJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gdEtlKGUpe3JldHVybiBKJGUoZSkmJlokZShlKT09USRlfW10ZS5leHBvcnRzPXRLZX0pO3ZhciB4dGU9SCgoUSRuLHZ0ZSk9Pnt2YXIgZUtlPWd0ZSgpLHJLZT1ONCgpLF90ZT1WQigpLHl0ZT1fdGUmJl90ZS5pc01hcCxuS2U9eXRlP3JLZSh5dGUpOmVLZTt2dGUuZXhwb3J0cz1uS2V9KTt2YXIgd3RlPUgoKHRLbixidGUpPT57dmFyIGlLZT1LdigpLG9LZT1ZdSgpLGFLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBzS2UoZSl7cmV0dXJuIG9LZShlKSYmaUtlKGUpPT1hS2V9YnRlLmV4cG9ydHM9c0tlfSk7dmFyIFR0ZT1IKChlS24sRXRlKT0+e3ZhciBsS2U9d3RlKCksY0tlPU40KCksU3RlPVZCKCksTXRlPVN0ZSYmU3RlLmlzU2V0LHVLZT1NdGU/Y0tlKE10ZSk6bEtlO0V0ZS5leHBvcnRzPXVLZX0pO3ZhciBSc3Q9SCgocktuLEl0ZSk9Pnt2YXIgaEtlPVA0KCksZktlPUJCKCkscEtlPUw0KCksZEtlPXNRdCgpLG1LZT1kUXQoKSxnS2U9Z3N0KCksX0tlPV9zdCgpLHlLZT1FUXQoKSx2S2U9SVF0KCkseEtlPXdzdCgpLGJLZT1OUXQoKSx3S2U9S3YoKSxTS2U9S1F0KCksTUtlPWh0ZSgpLEVLZT1rc3QoKSxUS2U9VGkoKSxDS2U9WHYoKSxBS2U9eHRlKCksUEtlPU1sKCksSUtlPVR0ZSgpLExLZT1BZCgpLGtLZT1jMCgpLFJLZT0xLE5LZT0yLERLZT00LEN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixPS2U9IltvYmplY3QgQXJyYXldIix6S2U9IltvYmplY3QgQm9vbGVhbl0iLEZLZT0iW29iamVjdCBEYXRlXSIsQktlPSJbb2JqZWN0IEVycm9yXSIsQXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsSEtlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVktlPSJbb2JqZWN0IE1hcF0iLFVLZT0iW29iamVjdCBOdW1iZXJdIixQdGU9IltvYmplY3QgT2JqZWN0XSIscUtlPSJbb2JqZWN0IFJlZ0V4cF0iLEdLZT0iW29iamVjdCBTZXRdIixXS2U9IltvYmplY3QgU3RyaW5nXSIsWUtlPSJbb2JqZWN0IFN5bWJvbF0iLGpLZT0iW29iamVjdCBXZWFrTWFwXSIsWEtlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJEtlPSJbb2JqZWN0IERhdGFWaWV3XSIsS0tlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKS2U9IltvYmplY3QgSW50OEFycmF5XSIsUUtlPSJbb2JqZWN0IEludDE2QXJyYXldIix0WmU9IltvYmplY3QgSW50MzJBcnJheV0iLGVaZT0iW29iamVjdCBVaW50OEFycmF5XSIsclplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsblplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaVplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bQ3RlXT1DbltPS2VdPUNuW1hLZV09Q25bJEtlXT1Dblt6S2VdPUNuW0ZLZV09Q25bS0tlXT1DbltaS2VdPUNuW0pLZV09Q25bUUtlXT1Dblt0WmVdPUNuW1ZLZV09Q25bVUtlXT1DbltQdGVdPUNuW3FLZV09Q25bR0tlXT1DbltXS2VdPUNuW1lLZV09Q25bZVplXT1DbltyWmVdPUNuW25aZV09Q25baVplXT0hMDtDbltCS2VdPUNuW0F0ZV09Q25baktlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlJLZSxsPXQmTktlLGM9dCZES2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIVBLZShlKSlyZXR1cm4gZTt2YXIgdT1US2UoZSk7aWYodSl7aWYoYT1TS2UoZSksIXMpcmV0dXJuIF9LZShlLGEpfWVsc2V7dmFyIGg9d0tlKGUpLGY9aD09QXRlfHxoPT1IS2U7aWYoQ0tlKGUpKXJldHVybiBnS2UoZSxzKTtpZihoPT1QdGV8fGg9PUN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpFS2UoZSksIXMpcmV0dXJuIGw/dktlKGUsbUtlKGEsZSkpOnlLZShlLGRLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9TUtlKGUsaCxzKX19b3x8KG89bmV3IGhLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLElLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOkFLZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP2JLZTp4S2U6bD9rS2U6TEtlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gZktlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSkscEtlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1JdGUuZXhwb3J0cz1ZQn0pO3ZhciBrdGU9SCgobktuLEx0ZSk9Pnt2YXIgb1plPVJzdCgpLGFaZT00O2Z1bmN0aW9uIHNaZShlKXtyZXR1cm4gb1plKGUsYVplKX1MdGUuZXhwb3J0cz1zWmV9KTt2YXIgakI9SCgoaUtuLFJ0ZSk9PntmdW5jdGlvbiBsWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVJ0ZS5leHBvcnRzPWxaZX0pO3ZhciBEdGU9SCgob0tuLE50ZSk9PntmdW5jdGlvbiBjWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1OdGUuZXhwb3J0cz1jWmV9KTt2YXIgWEI9SCgoYUtuLE90ZSk9Pnt2YXIgdVplPUR0ZSgpLGhaZT11WmUoKTtPdGUuZXhwb3J0cz1oWmV9KTt2YXIgJEI9SCgoc0tuLHp0ZSk9Pnt2YXIgZlplPVhCKCkscFplPUFkKCk7ZnVuY3Rpb24gZFplKGUsdCl7cmV0dXJuIGUmJmZaZShlLHQscFplKX16dGUuZXhwb3J0cz1kWmV9KTt2YXIgQnRlPUgoKGxLbixGdGUpPT57dmFyIG1aZT1CZigpO2Z1bmN0aW9uIGdaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIW1aZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fUZ0ZS5leHBvcnRzPWdaZX0pO3ZhciBIND1IKChjS24sSHRlKT0+e3ZhciBfWmU9JEIoKSx5WmU9QnRlKCksdlplPXlaZShfWmUpO0h0ZS5leHBvcnRzPXZaZX0pO3ZhciB1MD1IKCh1S24sVnRlKT0+e2Z1bmN0aW9uIHhaZShlKXtyZXR1cm4gZX1WdGUuZXhwb3J0cz14WmV9KTt2YXIgTnN0PUgoKGhLbixVdGUpPT57dmFyIGJaZT11MCgpO2Z1bmN0aW9uIHdaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpiWmV9VXRlLmV4cG9ydHM9d1plfSk7dmFyIERzdD1IKChmS24scXRlKT0+e3ZhciBTWmU9QkIoKSxNWmU9SDQoKSxFWmU9TnN0KCksVFplPVRpKCk7ZnVuY3Rpb24gQ1plKGUsdCl7dmFyIHI9VFplKGUpP1NaZTpNWmU7cmV0dXJuIHIoZSxFWmUodCkpfXF0ZS5leHBvcnRzPUNaZX0pO3ZhciBPc3Q9SCgocEtuLEd0ZSk9PntHdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBZdGU9SCgoZEtuLFd0ZSk9Pnt2YXIgQVplPUg0KCk7ZnVuY3Rpb24gUFplKGUsdCl7dmFyIHI9W107cmV0dXJuIEFaZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1XdGUuZXhwb3J0cz1QWmV9KTt2YXIgWHRlPUgoKG1LbixqdGUpPT57dmFyIElaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gTFplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLElaZSksdGhpc31qdGUuZXhwb3J0cz1MWmV9KTt2YXIgS3RlPUgoKGdLbiwkdGUpPT57ZnVuY3Rpb24ga1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0kdGUuZXhwb3J0cz1rWmV9KTt2YXIgenN0PUgoKF9LbixadGUpPT57dmFyIFJaZT1GQigpLE5aZT1YdGUoKSxEWmU9S3RlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFJaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1OWmU7S0IucHJvdG90eXBlLmhhcz1EWmU7WnRlLmV4cG9ydHM9S0J9KTt2YXIgUXRlPUgoKHlLbixKdGUpPT57ZnVuY3Rpb24gT1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1KdGUuZXhwb3J0cz1PWmV9KTt2YXIgRnN0PUgoKHZLbix0ZWUpPT57ZnVuY3Rpb24gelplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfXRlZS5leHBvcnRzPXpaZX0pO3ZhciBCc3Q9SCgoeEtuLGVlZSk9Pnt2YXIgRlplPXpzdCgpLEJaZT1RdGUoKSxIWmU9RnN0KCksVlplPTEsVVplPTI7ZnVuY3Rpb24gcVplKGUsdCxyLG4saSxvKXt2YXIgYT1yJlZaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZVWmU/bmV3IEZaZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIUJaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIUhaZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfWVlZS5leHBvcnRzPXFaZX0pO3ZhciBuZWU9SCgoYktuLHJlZSk9PntmdW5jdGlvbiBHWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfXJlZS5leHBvcnRzPUdaZX0pO3ZhciBaQj1IKCh3S24saWVlKT0+e2Z1bmN0aW9uIFdaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9aWVlLmV4cG9ydHM9V1plfSk7dmFyIGNlZT1IKChTS24sbGVlKT0+e3ZhciBvZWU9anYoKSxhZWU9UHN0KCksWVplPVl2KCksalplPUJzdCgpLFhaZT1uZWUoKSwkWmU9WkIoKSxLWmU9MSxaWmU9MixKWmU9IltvYmplY3QgQm9vbGVhbl0iLFFaZT0iW29iamVjdCBEYXRlXSIsdEplPSJbb2JqZWN0IEVycm9yXSIsZUplPSJbb2JqZWN0IE1hcF0iLHJKZT0iW29iamVjdCBOdW1iZXJdIixuSmU9IltvYmplY3QgUmVnRXhwXSIsaUplPSJbb2JqZWN0IFNldF0iLG9KZT0iW29iamVjdCBTdHJpbmddIixhSmU9IltvYmplY3QgU3ltYm9sXSIsc0plPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsbEplPSJbb2JqZWN0IERhdGFWaWV3XSIsc2VlPW9lZT9vZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9c2VlP3NlZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBjSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgbEplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBzSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IGFlZShlKSxuZXcgYWVlKHQpKSk7Y2FzZSBKWmU6Y2FzZSBRWmU6Y2FzZSBySmU6cmV0dXJuIFlaZSgrZSwrdCk7Y2FzZSB0SmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIG5KZTpjYXNlIG9KZTpyZXR1cm4gZT09dCsiIjtjYXNlIGVKZTp2YXIgcz1YWmU7Y2FzZSBpSmU6dmFyIGw9biZLWmU7aWYoc3x8KHM9JFplKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1aWmUsYS5zZXQoZSx0KTt2YXIgdT1qWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgYUplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWxlZS5leHBvcnRzPWNKZX0pO3ZhciBmZWU9SCgoTUtuLGhlZSk9Pnt2YXIgdWVlPXdzdCgpLHVKZT0xLGhKZT1PYmplY3QucHJvdG90eXBlLGZKZT1oSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcEplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnVKZSxzPXVlZShlKSxsPXMubGVuZ3RoLGM9dWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmZKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9aGVlLmV4cG9ydHM9cEplfSk7dmFyIHhlZT1IKChFS24sdmVlKT0+e3ZhciBWc3Q9UDQoKSxkSmU9QnN0KCksbUplPWNlZSgpLGdKZT1mZWUoKSxwZWU9S3YoKSxkZWU9VGkoKSxtZWU9WHYoKSxfSmU9WVMoKSx5SmU9MSxnZWU9IltvYmplY3QgQXJndW1lbnRzXSIsX2VlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsdkplPU9iamVjdC5wcm90b3R5cGUseWVlPXZKZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4SmUoZSx0LHIsbixpLG8pe3ZhciBhPWRlZShlKSxzPWRlZSh0KSxsPWE/X2VlOnBlZShlKSxjPXM/X2VlOnBlZSh0KTtsPWw9PWdlZT9KQjpsLGM9Yz09Z2VlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmbWVlKGUpKXtpZighbWVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8X0plKGUpP2RKZShlLHQscixuLGksbyk6bUplKGUsdCxsLHIsbixpLG8pO2lmKCEociZ5SmUpKXt2YXIgcD11JiZ5ZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmeWVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZ0plKGUsdCxyLG4saSxvKSk6ITF9dmVlLmV4cG9ydHM9eEplfSk7dmFyIFVzdD1IKChUS24sU2VlKT0+e3ZhciBiSmU9eGVlKCksYmVlPVl1KCk7ZnVuY3Rpb24gd2VlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFiZWUoZSkmJiFiZWUodCk/ZSE9PWUmJnQhPT10OmJKZShlLHQscixuLHdlZSxpKX1TZWUuZXhwb3J0cz13ZWV9KTt2YXIgRWVlPUgoKENLbixNZWUpPT57dmFyIHdKZT1QNCgpLFNKZT1Vc3QoKSxNSmU9MSxFSmU9MjtmdW5jdGlvbiBUSmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB3SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/U0plKHUsYyxNSmV8RUplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfU1lZS5leHBvcnRzPVRKZX0pO3ZhciBxc3Q9SCgoQUtuLFRlZSk9Pnt2YXIgQ0plPU1sKCk7ZnVuY3Rpb24gQUplKGUpe3JldHVybiBlPT09ZSYmIUNKZShlKX1UZWUuZXhwb3J0cz1BSmV9KTt2YXIgQWVlPUgoKFBLbixDZWUpPT57dmFyIFBKZT1xc3QoKSxJSmU9QWQoKTtmdW5jdGlvbiBMSmUoZSl7Zm9yKHZhciB0PUlKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxQSmUoaSldfXJldHVybiB0fUNlZS5leHBvcnRzPUxKZX0pO3ZhciBHc3Q9SCgoSUtuLFBlZSk9PntmdW5jdGlvbiBrSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fVBlZS5leHBvcnRzPWtKZX0pO3ZhciBMZWU9SCgoTEtuLEllZSk9Pnt2YXIgUkplPUVlZSgpLE5KZT1BZWUoKSxESmU9R3N0KCk7ZnVuY3Rpb24gT0plKGUpe3ZhciB0PU5KZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/REplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxSSmUocixlLHQpfX1JZWUuZXhwb3J0cz1PSmV9KTt2YXIgWnY9SCgoa0tuLGtlZSk9Pnt2YXIgekplPXMwKCksRkplPVl1KCksQkplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIEhKZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxGSmUoZSkmJnpKZShlKT09QkplfWtlZS5leHBvcnRzPUhKZX0pO3ZhciBRQj1IKChSS24sUmVlKT0+e3ZhciBWSmU9VGkoKSxVSmU9WnYoKSxxSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sR0plPS9eXHcqJC87ZnVuY3Rpb24gV0plKGUsdCl7aWYoVkplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8VUplKGUpPyEwOkdKZS50ZXN0KGUpfHwhcUplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoTktuLERlZSk9Pnt2YXIgTmVlPUZCKCksWUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihZSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fE5lZSkscn1Xc3QuQ2FjaGU9TmVlO0RlZS5leHBvcnRzPVdzdH0pO3ZhciBGZWU9SCgoREtuLHplZSk9Pnt2YXIgakplPU9lZSgpLFhKZT01MDA7ZnVuY3Rpb24gJEplKGUpe3ZhciB0PWpKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1YSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fXplZS5leHBvcnRzPSRKZX0pO3ZhciBIZWU9SCgoT0tuLEJlZSk9Pnt2YXIgS0plPUZlZSgpLFpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxKSmU9L1xcKFxcKT8vZyxRSmU9S0plKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoWkplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShKSmUsIiQxIik6bnx8cil9KSx0fSk7QmVlLmV4cG9ydHM9UUplfSk7dmFyIFY0PUgoKHpLbixWZWUpPT57ZnVuY3Rpb24gdFFlKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9VmVlLmV4cG9ydHM9dFFlfSk7dmFyIGplZT1IKChGS24sWWVlKT0+e3ZhciBVZWU9anYoKSxlUWU9VjQoKSxyUWU9VGkoKSxuUWU9WnYoKSxpUWU9MS8wLHFlZT1VZWU/VWVlLnByb3RvdHlwZTp2b2lkIDAsR2VlPXFlZT9xZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFdlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoclFlKGUpKXJldHVybiBlUWUoZSxXZWUpKyIiO2lmKG5RZShlKSlyZXR1cm4gR2VlP0dlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0taVFlPyItMCI6dH1ZZWUuZXhwb3J0cz1XZWV9KTt2YXIgWXN0PUgoKEJLbixYZWUpPT57dmFyIG9RZT1qZWUoKTtmdW5jdGlvbiBhUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6b1FlKGUpfVhlZS5leHBvcnRzPWFRZX0pO3ZhciBVND1IKChIS24sJGVlKT0+e3ZhciBzUWU9VGkoKSxsUWU9UUIoKSxjUWU9SGVlKCksdVFlPVlzdCgpO2Z1bmN0aW9uIGhRZShlLHQpe3JldHVybiBzUWUoZSk/ZTpsUWUoZSx0KT9bZV06Y1FlKHVRZShlKSl9JGVlLmV4cG9ydHM9aFFlfSk7dmFyICRTPUgoKFZLbixLZWUpPT57dmFyIGZRZT1adigpLHBRZT0xLzA7ZnVuY3Rpb24gZFFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8ZlFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tcFFlPyItMCI6dH1LZWUuZXhwb3J0cz1kUWV9KTt2YXIgcTQ9SCgoVUtuLFplZSk9Pnt2YXIgbVFlPVU0KCksZ1FlPSRTKCk7ZnVuY3Rpb24gX1FlKGUsdCl7dD1tUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2dRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1aZWUuZXhwb3J0cz1fUWV9KTt2YXIgUWVlPUgoKHFLbixKZWUpPT57dmFyIHlRZT1xNCgpO2Z1bmN0aW9uIHZRZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6eVFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufUplZS5leHBvcnRzPXZRZX0pO3ZhciBlcmU9SCgoR0tuLHRyZSk9PntmdW5jdGlvbiB4UWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9dHJlLmV4cG9ydHM9eFFlfSk7dmFyIGpzdD1IKChXS24scnJlKT0+e3ZhciBiUWU9VTQoKSx3UWU9cVMoKSxTUWU9VGkoKSxNUWU9UjQoKSxFUWU9SEIoKSxUUWU9JFMoKTtmdW5jdGlvbiBDUWUoZSx0LHIpe3Q9YlFlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPVRRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJkVRZShpKSYmTVFlKGEsaSkmJihTUWUoZSl8fHdRZShlKSkpfXJyZS5leHBvcnRzPUNRZX0pO3ZhciBYc3Q9SCgoWUtuLG5yZSk9Pnt2YXIgQVFlPWVyZSgpLFBRZT1qc3QoKTtmdW5jdGlvbiBJUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmUFFlKGUsdCxBUWUpfW5yZS5leHBvcnRzPUlRZX0pO3ZhciBvcmU9SCgoaktuLGlyZSk9Pnt2YXIgTFFlPVVzdCgpLGtRZT1RZWUoKSxSUWU9WHN0KCksTlFlPVFCKCksRFFlPXFzdCgpLE9RZT1Hc3QoKSx6UWU9JFMoKSxGUWU9MSxCUWU9MjtmdW5jdGlvbiBIUWUoZSx0KXtyZXR1cm4gTlFlKGUpJiZEUWUodCk/T1FlKHpRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1rUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UlFlKHIsZSk6TFFlKHQsbixGUWV8QlFlKX19aXJlLmV4cG9ydHM9SFFlfSk7dmFyICRzdD1IKChYS24sYXJlKT0+e2Z1bmN0aW9uIFZRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fWFyZS5leHBvcnRzPVZRZX0pO3ZhciBscmU9SCgoJEtuLHNyZSk9Pnt2YXIgVVFlPXE0KCk7ZnVuY3Rpb24gcVFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gVVFlKHQsZSl9fXNyZS5leHBvcnRzPXFRZX0pO3ZhciB1cmU9SCgoS0tuLGNyZSk9Pnt2YXIgR1FlPSRzdCgpLFdRZT1scmUoKSxZUWU9UUIoKSxqUWU9JFMoKTtmdW5jdGlvbiBYUWUoZSl7cmV0dXJuIFlRZShlKT9HUWUoalFlKGUpKTpXUWUoZSl9Y3JlLmV4cG9ydHM9WFFlfSk7dmFyIEhmPUgoKFpLbixocmUpPT57dmFyICRRZT1MZWUoKSxLUWU9b3JlKCksWlFlPXUwKCksSlFlPVRpKCksUVFlPXVyZSgpO2Z1bmN0aW9uIHR0cihlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP1pRZTp0eXBlb2YgZT09Im9iamVjdCI/SlFlKGUpP0tRZShlWzBdLGVbMV0pOiRRZShlKTpRUWUoZSl9aHJlLmV4cG9ydHM9dHRyfSk7dmFyIEtzdD1IKChKS24sZnJlKT0+e3ZhciBldHI9eXN0KCkscnRyPVl0ZSgpLG50cj1IZigpLGl0cj1UaSgpO2Z1bmN0aW9uIG90cihlLHQpe3ZhciByPWl0cihlKT9ldHI6cnRyO3JldHVybiByKGUsbnRyKHQsMykpfWZyZS5leHBvcnRzPW90cn0pO3ZhciBkcmU9SCgoUUtuLHByZSk9Pnt2YXIgYXRyPU9iamVjdC5wcm90b3R5cGUsc3RyPWF0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBsdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmc3RyLmNhbGwoZSx0KX1wcmUuZXhwb3J0cz1sdHJ9KTt2YXIgWnN0PUgoKHRabixtcmUpPT57dmFyIGN0cj1kcmUoKSx1dHI9anN0KCk7ZnVuY3Rpb24gaHRyKGUsdCl7cmV0dXJuIGUhPW51bGwmJnV0cihlLHQsY3RyKX1tcmUuZXhwb3J0cz1odHJ9KTt2YXIgX3JlPUgoKGVabixncmUpPT57dmFyIGZ0cj1VQigpLHB0cj1LdigpLGR0cj1xUygpLG10cj1UaSgpLGd0cj1CZigpLF90cj1YdigpLHl0cj16NCgpLHZ0cj1ZUygpLHh0cj0iW29iamVjdCBNYXBdIixidHI9IltvYmplY3QgU2V0XSIsd3RyPU9iamVjdC5wcm90b3R5cGUsU3RyPXd0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBNdHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihndHIoZSkmJihtdHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxfdHIoZSl8fHZ0cihlKXx8ZHRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9cHRyKGUpO2lmKHQ9PXh0cnx8dD09YnRyKXJldHVybiFlLnNpemU7aWYoeXRyKGUpKXJldHVybiFmdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKFN0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9Z3JlLmV4cG9ydHM9TXRyfSk7dmFyIEpzdD1IKChyWm4seXJlKT0+e2Z1bmN0aW9uIEV0cihlKXtyZXR1cm4gZT09PXZvaWQgMH15cmUuZXhwb3J0cz1FdHJ9KTt2YXIgUXN0PUgoKG5abix2cmUpPT57dmFyIFR0cj1INCgpLEN0cj1CZigpO2Z1bmN0aW9uIEF0cihlLHQpe3ZhciByPS0xLG49Q3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gVHRyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59dnJlLmV4cG9ydHM9QXRyfSk7dmFyIHRsdD1IKChpWm4seHJlKT0+e3ZhciBQdHI9VjQoKSxJdHI9SGYoKSxMdHI9UXN0KCksa3RyPVRpKCk7ZnVuY3Rpb24gUnRyKGUsdCl7dmFyIHI9a3RyKGUpP1B0cjpMdHI7cmV0dXJuIHIoZSxJdHIodCwzKSl9eHJlLmV4cG9ydHM9UnRyfSk7dmFyIHdyZT1IKChvWm4sYnJlKT0+e2Z1bmN0aW9uIE50cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfWJyZS5leHBvcnRzPU50cn0pO3ZhciBNcmU9SCgoYVpuLFNyZSk9PntmdW5jdGlvbiBEdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9U3JlLmV4cG9ydHM9RHRyfSk7dmFyIGVsdD1IKChzWm4sRXJlKT0+e3ZhciBPdHI9d3JlKCksenRyPUg0KCksRnRyPUhmKCksQnRyPU1yZSgpLEh0cj1UaSgpO2Z1bmN0aW9uIFZ0cihlLHQscil7dmFyIG49SHRyKGUpP090cjpCdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxGdHIodCw0KSxyLGksenRyKX1FcmUuZXhwb3J0cz1WdHJ9KTt2YXIgQ3JlPUgoKGxabixUcmUpPT57dmFyIFV0cj1zMCgpLHF0cj1UaSgpLEd0cj1ZdSgpLFd0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBZdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IXF0cihlKSYmR3RyKGUpJiZVdHIoZSk9PVd0cn1UcmUuZXhwb3J0cz1ZdHJ9KTt2YXIgUHJlPUgoKGNabixBcmUpPT57dmFyIGp0cj0kc3QoKSxYdHI9anRyKCJsZW5ndGgiKTtBcmUuZXhwb3J0cz1YdHJ9KTt2YXIgTHJlPUgoKHVabixJcmUpPT57dmFyICR0cj0iXFx1ZDgwMC1cXHVkZmZmIixLdHI9IlxcdTAzMDAtXFx1MDM2ZiIsWnRyPSJcXHVmZTIwLVxcdWZlMmYiLEp0cj0iXFx1MjBkMC1cXHUyMGZmIixRdHI9S3RyK1p0citKdHIsdGVyPSJcXHVmZTBlXFx1ZmUwZiIsZWVyPSJcXHUyMDBkIixyZXI9UmVnRXhwKCJbIitlZXIrJHRyK1F0cit0ZXIrIl0iKTtmdW5jdGlvbiBuZXIoZSl7cmV0dXJuIHJlci50ZXN0KGUpfUlyZS5leHBvcnRzPW5lcn0pO3ZhciBIcmU9SCgoaFpuLEJyZSk9Pnt2YXIgUnJlPSJcXHVkODAwLVxcdWRmZmYiLGllcj0iXFx1MDMwMC1cXHUwMzZmIixvZXI9IlxcdWZlMjAtXFx1ZmUyZiIsYWVyPSJcXHUyMGQwLVxcdTIwZmYiLHNlcj1pZXIrb2VyK2FlcixsZXI9IlxcdWZlMGVcXHVmZTBmIixjZXI9IlsiK1JyZSsiXSIscmx0PSJbIitzZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix1ZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLE5yZT0iW14iK1JyZSsiXSIsRHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixPcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGhlcj0iXFx1MjAwZCIsenJlPXVlcisiPyIsRnJlPSJbIitsZXIrIl0/IixmZXI9Iig/OiIraGVyKyIoPzoiK1tOcmUsRHJlLE9yZV0uam9pbigifCIpKyIpIitGcmUrenJlKyIpKiIscGVyPUZyZSt6cmUrZmVyLGRlcj0iKD86IitbTnJlK3JsdCsiPyIscmx0LERyZSxPcmUsY2VyXS5qb2luKCJ8IikrIikiLGtyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK2RlcitwZXIsImciKTtmdW5jdGlvbiBtZXIoZSl7Zm9yKHZhciB0PWtyZS5sYXN0SW5kZXg9MDtrcmUudGVzdChlKTspKyt0O3JldHVybiB0fUJyZS5leHBvcnRzPW1lcn0pO3ZhciBVcmU9SCgoZlpuLFZyZSk9Pnt2YXIgZ2VyPVByZSgpLF9lcj1McmUoKSx5ZXI9SHJlKCk7ZnVuY3Rpb24gdmVyKGUpe3JldHVybiBfZXIoZSk/eWVyKGUpOmdlcihlKX1WcmUuZXhwb3J0cz12ZXJ9KTt2YXIgR3JlPUgoKHBabixxcmUpPT57dmFyIHhlcj1VQigpLGJlcj1LdigpLHdlcj1CZigpLFNlcj1DcmUoKSxNZXI9VXJlKCksRWVyPSJbb2JqZWN0IE1hcF0iLFRlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBDZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih3ZXIoZSkpcmV0dXJuIFNlcihlKT9NZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9YmVyKGUpO3JldHVybiB0PT1FZXJ8fHQ9PVRlcj9lLnNpemU6eGVyKGUpLmxlbmd0aH1xcmUuZXhwb3J0cz1DZXJ9KTt2YXIgWXJlPUgoKGRabixXcmUpPT57dmFyIEFlcj1CQigpLFBlcj1Mc3QoKSxJZXI9JEIoKSxMZXI9SGYoKSxrZXI9QjQoKSxSZXI9VGkoKSxOZXI9WHYoKSxEZXI9RlMoKSxPZXI9TWwoKSx6ZXI9WVMoKTtmdW5jdGlvbiBGZXIoZSx0LHIpe3ZhciBuPVJlcihlKSxpPW58fE5lcihlKXx8emVyKGUpO2lmKHQ9TGVyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTpPZXIoZSk/cj1EZXIobyk/UGVyKGtlcihlKSk6e306cj17fX1yZXR1cm4oaT9BZXI6SWVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9V3JlLmV4cG9ydHM9RmVyfSk7dmFyIEtyZT1IKChtWm4sJHJlKT0+e3ZhciBqcmU9anYoKSxCZXI9cVMoKSxIZXI9VGkoKSxYcmU9anJlP2pyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIFZlcihlKXtyZXR1cm4gSGVyKGUpfHxCZXIoZSl8fCEhKFhyZSYmZSYmZVtYcmVdKX0kcmUuZXhwb3J0cz1WZXJ9KTt2YXIgdEg9SCgoZ1puLEpyZSk9Pnt2YXIgVWVyPUdCKCkscWVyPUtyZSgpO2Z1bmN0aW9uIFpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPXFlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP1pyZShzLHQtMSxyLG4saSk6VWVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfUpyZS5leHBvcnRzPVpyZX0pO3ZhciB0bmU9SCgoX1puLFFyZSk9PntmdW5jdGlvbiBHZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX1RcmUuZXhwb3J0cz1HZXJ9KTt2YXIgaWx0PUgoKHlabixybmUpPT57dmFyIFdlcj10bmUoKSxlbmU9TWF0aC5tYXg7ZnVuY3Rpb24gWWVyKGUsdCxyKXtyZXR1cm4gdD1lbmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1lbmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxXZXIoZSx0aGlzLHMpfX1ybmUuZXhwb3J0cz1ZZXJ9KTt2YXIgb25lPUgoKHZabixpbmUpPT57dmFyIGplcj1qQigpLG5uZT1mc3QoKSxYZXI9dTAoKSwkZXI9bm5lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIG5uZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmplcih0KSx3cml0YWJsZTohMH0pfTpYZXI7aW5lLmV4cG9ydHM9JGVyfSk7dmFyIHNuZT1IKCh4Wm4sYW5lKT0+e3ZhciBLZXI9ODAwLFplcj0xNixKZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gUWVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPUplcigpLGk9WmVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49S2VyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWFuZS5leHBvcnRzPVFlcn0pO3ZhciBvbHQ9SCgoYlpuLGxuZSk9Pnt2YXIgdHJyPW9uZSgpLGVycj1zbmUoKSxycnI9ZXJyKHRycik7bG5lLmV4cG9ydHM9cnJyfSk7dmFyIEc0PUgoKHdabixjbmUpPT57dmFyIG5ycj11MCgpLGlycj1pbHQoKSxvcnI9b2x0KCk7ZnVuY3Rpb24gYXJyKGUsdCl7cmV0dXJuIG9ycihpcnIoZSx0LG5yciksZSsiIil9Y25lLmV4cG9ydHM9YXJyfSk7dmFyIGFsdD1IKChTWm4sdW5lKT0+e2Z1bmN0aW9uIHNycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX11bmUuZXhwb3J0cz1zcnJ9KTt2YXIgZm5lPUgoKE1abixobmUpPT57ZnVuY3Rpb24gbHJyKGUpe3JldHVybiBlIT09ZX1obmUuZXhwb3J0cz1scnJ9KTt2YXIgZG5lPUgoKEVabixwbmUpPT57ZnVuY3Rpb24gY3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfXBuZS5leHBvcnRzPWNycn0pO3ZhciBnbmU9SCgoVFpuLG1uZSk9Pnt2YXIgdXJyPWFsdCgpLGhycj1mbmUoKSxmcnI9ZG5lKCk7ZnVuY3Rpb24gcHJyKGUsdCxyKXtyZXR1cm4gdD09PXQ/ZnJyKGUsdCxyKTp1cnIoZSxocnIscil9bW5lLmV4cG9ydHM9cHJyfSk7dmFyIHluZT1IKChDWm4sX25lKT0+e3ZhciBkcnI9Z25lKCk7ZnVuY3Rpb24gbXJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmZHJyKGUsdCwwKT4tMX1fbmUuZXhwb3J0cz1tcnJ9KTt2YXIgeG5lPUgoKEFabix2bmUpPT57ZnVuY3Rpb24gZ3JyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX12bmUuZXhwb3J0cz1ncnJ9KTt2YXIgd25lPUgoKFBabixibmUpPT57ZnVuY3Rpb24gX3JyKCl7fWJuZS5leHBvcnRzPV9ycn0pO3ZhciBNbmU9SCgoSVpuLFNuZSk9Pnt2YXIgc2x0PVNzdCgpLHlycj13bmUoKSx2cnI9WkIoKSx4cnI9MS8wLGJycj1zbHQmJjEvdnJyKG5ldyBzbHQoWywtMF0pKVsxXT09eHJyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTp5cnI7U25lLmV4cG9ydHM9YnJyfSk7dmFyIFRuZT1IKChMWm4sRW5lKT0+e3ZhciB3cnI9enN0KCksU3JyPXluZSgpLE1ycj14bmUoKSxFcnI9RnN0KCksVHJyPU1uZSgpLENycj1aQigpLEFycj0yMDA7ZnVuY3Rpb24gUHJyKGUsdCxyKXt2YXIgbj0tMSxpPVNycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9TXJyO2Vsc2UgaWYobz49QXJyKXt2YXIgYz10P251bGw6VHJyKGUpO2lmKGMpcmV0dXJuIENycihjKTthPSExLGk9RXJyLGw9bmV3IHdycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9RW5lLmV4cG9ydHM9UHJyfSk7dmFyIGxsdD1IKChrWm4sQ25lKT0+e3ZhciBJcnI9QmYoKSxMcnI9WXUoKTtmdW5jdGlvbiBrcnIoZSl7cmV0dXJuIExycihlKSYmSXJyKGUpfUNuZS5leHBvcnRzPWtycn0pO3ZhciBQbmU9SCgoUlpuLEFuZSk9Pnt2YXIgUnJyPXRIKCksTnJyPUc0KCksRHJyPVRuZSgpLE9ycj1sbHQoKSx6cnI9TnJyKGZ1bmN0aW9uKGUpe3JldHVybiBEcnIoUnJyKGUsMSxPcnIsITApKX0pO0FuZS5leHBvcnRzPXpycn0pO3ZhciBMbmU9SCgoTlpuLEluZSk9Pnt2YXIgRnJyPVY0KCk7ZnVuY3Rpb24gQnJyKGUsdCl7cmV0dXJuIEZycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9SW5lLmV4cG9ydHM9QnJyfSk7dmFyIGNsdD1IKChEWm4sa25lKT0+e3ZhciBIcnI9TG5lKCksVnJyPUFkKCk7ZnVuY3Rpb24gVXJyKGUpe3JldHVybiBlPT1udWxsP1tdOkhycihlLFZycihlKSl9a25lLmV4cG9ydHM9VXJyfSk7dmFyIEVsPUgoKE9abixSbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOmt0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5Ol9yZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkdyZSgpLHRyYW5zZm9ybTpZcmUoKSx1bmlvbjpQbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtSbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChGWm4sem5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTt6bmUuZXhwb3J0cz1jcjt2YXIgcXJyPSJcMCIsSnY9IlwwIixObmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUdycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLERuZSh0aGlzLl9wcmVkc1t0XSxlKSxEbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sT25lKHRoaXMuX3ByZWRzW3RdLGUpLE9uZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBEbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24gT25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrTm5lK28rTm5lKyhqZS5pc1VuZGVmaW5lZChuKT9xcnI6bil9ZnVuY3Rpb24gR3JyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIEJuZT1IKChCWm4sRm5lKT0+e0ZuZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgVm5lPUgoKEhabixIbmUpPT57SG5lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpCbmUoKX19KTt2YXIgcW5lPUgoKFZabixVbmUpPT57dmFyIFZmPUVsKCksV3JyPXJIKCk7VW5lLmV4cG9ydHM9e3dyaXRlOllycixyZWFkOiRycn07ZnVuY3Rpb24gWXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOmpycihlKSxlZGdlczpYcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIGpycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gWHJyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uICRycihlKXt2YXIgdD1uZXcgV3JyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgV25lPUgoKFVabixHbmUpPT57dmFyIG5IPUVsKCk7R25lLmV4cG9ydHM9S3JyO2Z1bmN0aW9uIEtycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChxWm4sam5lKT0+e3ZhciBZbmU9RWwoKTtqbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFluZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFZbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoR1puLFhuZSk9Pnt2YXIgWnJyPUVsKCksSnJyPWhsdCgpO1huZS5leHBvcnRzPXRucjt2YXIgUXJyPVpyci5jb25zdGFudCgxKTtmdW5jdGlvbiB0bnIoZSx0LHIsbil7cmV0dXJuIGVucihlLFN0cmluZyh0KSxyfHxRcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBlbnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgSnJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgS25lPUgoKFdabiwkbmUpPT57dmFyIHJucj1mbHQoKSxubnI9RWwoKTskbmUuZXhwb3J0cz1pbnI7ZnVuY3Rpb24gaW5yKGUsdCxyKXtyZXR1cm4gbm5yLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPXJucihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoWVpuLEpuZSk9Pnt2YXIgWm5lPUVsKCk7Sm5lLmV4cG9ydHM9b25yO2Z1bmN0aW9uIG9ucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7Wm5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtabmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciB0aWU9SCgoalpuLFFuZSk9Pnt2YXIgYW5yPUVsKCksc25yPXBsdCgpO1FuZS5leHBvcnRzPWxucjtmdW5jdGlvbiBsbnIoZSl7cmV0dXJuIGFuci5maWx0ZXIoc25yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIHJpZT1IKChYWm4sZWllKT0+e3ZhciBjbnI9RWwoKTtlaWUuZXhwb3J0cz1obnI7dmFyIHVucj1jbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gaG5yKGUsdCxyKXtyZXR1cm4gZm5yKGUsdHx8dW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gZm5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKCgkWm4saWllKT0+e3ZhciBZND1FbCgpO2lpZS5leHBvcnRzPW5pZTtuaWUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gbmllKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgc2llPUgoKEtabixhaWUpPT57dmFyIG9pZT1kbHQoKTthaWUuZXhwb3J0cz1wbnI7ZnVuY3Rpb24gcG5yKGUpe3RyeXtvaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIG9pZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoWlpuLGNpZSk9Pnt2YXIgb0g9RWwoKTtjaWUuZXhwb3J0cz1kbnI7ZnVuY3Rpb24gZG5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtsaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBsaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2xpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBoaWU9SCgoSlpuLHVpZSk9Pnt2YXIgbW5yPW1sdCgpO3VpZS5leHBvcnRzPWducjtmdW5jdGlvbiBnbnIoZSx0KXtyZXR1cm4gbW5yKGUsdCwicG9zdCIpfX0pO3ZhciBwaWU9SCgoUVpuLGZpZSk9Pnt2YXIgX25yPW1sdCgpO2ZpZS5leHBvcnRzPXlucjtmdW5jdGlvbiB5bnIoZSx0KXtyZXR1cm4gX25yKGUsdCwicHJlIil9fSk7dmFyIGdpZT1IKCh0Sm4sbWllKT0+e3ZhciBkaWU9RWwoKSx2bnI9ckgoKSx4bnI9aGx0KCk7bWllLmV4cG9ydHM9Ym5yO2Z1bmN0aW9uIGJucihlLHQpe3ZhciByPW5ldyB2bnIsbj17fSxpPW5ldyB4bnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7ZGllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSxkaWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIHlpZT1IKChlSm4sX2llKT0+e19pZS5leHBvcnRzPXtjb21wb25lbnRzOlduZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOktuZSgpLGZpbmRDeWNsZXM6dGllKCksZmxveWRXYXJzaGFsbDpyaWUoKSxpc0FjeWNsaWM6c2llKCkscG9zdG9yZGVyOmhpZSgpLHByZW9yZGVyOnBpZSgpLHByaW06Z2llKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIGJpZT1IKChySm4seGllKT0+e3ZhciB2aWU9Vm5lKCk7eGllLmV4cG9ydHM9e0dyYXBoOnZpZS5HcmFwaCxqc29uOnFuZSgpLGFsZzp5aWUoKSx2ZXJzaW9uOnZpZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChuSm4sd2llKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPWJpZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7d2llLmV4cG9ydHM9YUh9KTt2YXIgTWllPUgoKG9KbixTaWUpPT57dmFyIHducj1Sc3QoKSxTbnI9MSxNbnI9NDtmdW5jdGlvbiBFbnIoZSl7cmV0dXJuIHducihlLFNucnxNbnIpfVNpZS5leHBvcnRzPUVucn0pO3ZhciBqND1IKChhSm4sRWllKT0+e3ZhciBUbnI9WXYoKSxDbnI9QmYoKSxBbnI9UjQoKSxQbnI9TWwoKTtmdW5jdGlvbiBJbnIoZSx0LHIpe2lmKCFQbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP0NucihyKSYmQW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP1RucihyW3RdLGUpOiExfUVpZS5leHBvcnRzPUlucn0pO3ZhciBBaWU9SCgoc0puLENpZSk9Pnt2YXIgTG5yPUc0KCksa25yPVl2KCksUm5yPWo0KCksTm5yPWMwKCksVGllPU9iamVjdC5wcm90b3R5cGUsRG5yPVRpZS5oYXNPd25Qcm9wZXJ0eSxPbnI9TG5yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUm5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9Tm5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxrbnIodSxUaWVbY10pJiYhRG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7Q2llLmV4cG9ydHM9T25yfSk7dmFyIElpZT1IKChsSm4sUGllKT0+e3ZhciB6bnI9SGYoKSxGbnI9QmYoKSxCbnI9QWQoKTtmdW5jdGlvbiBIbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIUZucih0KSl7dmFyIG89em5yKHIsMyk7dD1CbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19UGllLmV4cG9ydHM9SG5yfSk7dmFyIGtpZT1IKChjSm4sTGllKT0+e3ZhciBWbnI9L1xzLztmdW5jdGlvbiBVbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmVm5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9TGllLmV4cG9ydHM9VW5yfSk7dmFyIE5pZT1IKCh1Sm4sUmllKT0+e3ZhciBxbnI9a2llKCksR25yPS9eXHMrLztmdW5jdGlvbiBXbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxxbnIoZSkrMSkucmVwbGFjZShHbnIsIiIpfVJpZS5leHBvcnRzPVducn0pO3ZhciBGaWU9SCgoaEpuLHppZSk9Pnt2YXIgWW5yPU5pZSgpLERpZT1NbCgpLGpucj1adigpLE9pZT0wLzAsWG5yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLCRucj0vXjBiWzAxXSskL2ksS25yPS9eMG9bMC03XSskL2ksWm5yPXBhcnNlSW50O2Z1bmN0aW9uIEpucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYoam5yKGUpKXJldHVybiBPaWU7aWYoRGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1EaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVlucihlKTt2YXIgcj0kbnIudGVzdChlKTtyZXR1cm4gcnx8S25yLnRlc3QoZSk/Wm5yKGUuc2xpY2UoMikscj8yOjgpOlhuci50ZXN0KGUpP09pZTorZX16aWUuZXhwb3J0cz1KbnJ9KTt2YXIgZ2x0PUgoKGZKbixIaWUpPT57dmFyIFFucj1GaWUoKSxCaWU9MS8wLHRpcj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gZWlyKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT1RbnIoZSksZT09PUJpZXx8ZT09PS1CaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0KnRpcn1yZXR1cm4gZT09PWU/ZTowfUhpZS5leHBvcnRzPWVpcn0pO3ZhciBVaWU9SCgocEpuLFZpZSk9Pnt2YXIgcmlyPWdsdCgpO2Z1bmN0aW9uIG5pcihlKXt2YXIgdD1yaXIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH1WaWUuZXhwb3J0cz1uaXJ9KTt2YXIgR2llPUgoKGRKbixxaWUpPT57dmFyIGlpcj1hbHQoKSxvaXI9SGYoKSxhaXI9VWllKCksc2lyPU1hdGgubWF4O2Z1bmN0aW9uIGxpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDphaXIocik7cmV0dXJuIGk8MCYmKGk9c2lyKG4raSwwKSksaWlyKGUsb2lyKHQsMyksaSl9cWllLmV4cG9ydHM9bGlyfSk7dmFyIFlpZT1IKChtSm4sV2llKT0+e3ZhciBjaXI9SWllKCksdWlyPUdpZSgpLGhpcj1jaXIodWlyKTtXaWUuZXhwb3J0cz1oaXJ9KTt2YXIgX2x0PUgoKGdKbixqaWUpPT57dmFyIGZpcj10SCgpO2Z1bmN0aW9uIHBpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZmlyKGUsMSk6W119amllLmV4cG9ydHM9cGlyfSk7dmFyICRpZT1IKChfSm4sWGllKT0+e3ZhciBkaXI9WEIoKSxtaXI9TnN0KCksZ2lyPWMwKCk7ZnVuY3Rpb24gX2lyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTpkaXIoZSxtaXIodCksZ2lyKX1YaWUuZXhwb3J0cz1faXJ9KTt2YXIgWmllPUgoKHlKbixLaWUpPT57ZnVuY3Rpb24geWlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfUtpZS5leHBvcnRzPXlpcn0pO3ZhciBRaWU9SCgodkpuLEppZSk9Pnt2YXIgdmlyPUk0KCkseGlyPSRCKCksYmlyPUhmKCk7ZnVuY3Rpb24gd2lyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9YmlyKHQsMykseGlyKGUsZnVuY3Rpb24obixpLG8pe3ZpcihyLGksdChuLGksbykpfSkscn1KaWUuZXhwb3J0cz13aXJ9KTt2YXIgc0g9SCgoeEpuLHRvZSk9Pnt2YXIgU2lyPVp2KCk7ZnVuY3Rpb24gTWlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhU2lyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9dG9lLmV4cG9ydHM9TWlyfSk7dmFyIHJvZT1IKChiSm4sZW9lKT0+e2Z1bmN0aW9uIEVpcihlLHQpe3JldHVybiBlPnR9ZW9lLmV4cG9ydHM9RWlyfSk7dmFyIGlvZT1IKCh3Sm4sbm9lKT0+e3ZhciBUaXI9c0goKSxDaXI9cm9lKCksQWlyPXUwKCk7ZnVuY3Rpb24gUGlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD9UaXIoZSxBaXIsQ2lyKTp2b2lkIDB9bm9lLmV4cG9ydHM9UGlyfSk7dmFyIHlsdD1IKChTSm4sb29lKT0+e3ZhciBJaXI9STQoKSxMaXI9WXYoKTtmdW5jdGlvbiBraXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhTGlyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJklpcihlLHQscil9b29lLmV4cG9ydHM9a2lyfSk7dmFyIGxvZT1IKChNSm4sc29lKT0+e3ZhciBSaXI9czAoKSxOaXI9QjQoKSxEaXI9WXUoKSxPaXI9IltvYmplY3QgT2JqZWN0XSIsemlyPUZ1bmN0aW9uLnByb3RvdHlwZSxGaXI9T2JqZWN0LnByb3RvdHlwZSxhb2U9emlyLnRvU3RyaW5nLEJpcj1GaXIuaGFzT3duUHJvcGVydHksSGlyPWFvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gVmlyKGUpe2lmKCFEaXIoZSl8fFJpcihlKSE9T2lyKXJldHVybiExO3ZhciB0PU5pcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1CaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJmFvZS5jYWxsKHIpPT1IaXJ9c29lLmV4cG9ydHM9VmlyfSk7dmFyIHZsdD1IKChFSm4sY29lKT0+e2Z1bmN0aW9uIFVpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19Y29lLmV4cG9ydHM9VWlyfSk7dmFyIGhvZT1IKChUSm4sdW9lKT0+e3ZhciBxaXI9VVMoKSxHaXI9YzAoKTtmdW5jdGlvbiBXaXIoZSl7cmV0dXJuIHFpcihlLEdpcihlKSl9dW9lLmV4cG9ydHM9V2lyfSk7dmFyIF9vZT1IKChDSm4sZ29lKT0+e3ZhciBmb2U9eWx0KCksWWlyPWdzdCgpLGppcj1Jc3QoKSxYaXI9X3N0KCksJGlyPWtzdCgpLHBvZT1xUygpLGRvZT1UaSgpLEtpcj1sbHQoKSxaaXI9WHYoKSxKaXI9RlMoKSxRaXI9TWwoKSx0b3I9bG9lKCksZW9yPVlTKCksbW9lPXZsdCgpLHJvcj1ob2UoKTtmdW5jdGlvbiBub3IoZSx0LHIsbixpLG8sYSl7dmFyIHM9bW9lKGUsciksbD1tb2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2ZvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj1kb2UobCkscD0hZiYmWmlyKGwpLGQ9IWYmJiFwJiZlb3IobCk7dT1sLGZ8fHB8fGQ/ZG9lKHMpP3U9czpLaXIocyk/dT1YaXIocyk6cD8oaD0hMSx1PVlpcihsLCEwKSk6ZD8oaD0hMSx1PWppcihsLCEwKSk6dT1bXTp0b3IobCl8fHBvZShsKT8odT1zLHBvZShzKT91PXJvcihzKTooIVFpcihzKXx8SmlyKHMpKSYmKHU9JGlyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGZvZShlLHIsdSl9Z29lLmV4cG9ydHM9bm9yfSk7dmFyIHhvZT1IKChBSm4sdm9lKT0+e3ZhciBpb3I9UDQoKSxvb3I9eWx0KCksYW9yPVhCKCksc29yPV9vZSgpLGxvcj1NbCgpLGNvcj1jMCgpLHVvcj12bHQoKTtmdW5jdGlvbiB5b2UoZSx0LHIsbixpKXtlIT09dCYmYW9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgaW9yKSxsb3Iobykpc29yKGUsdCxhLHIseW9lLG4saSk7ZWxzZXt2YXIgcz1uP24odW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksb29yKGUsYSxzKX19LGNvcil9dm9lLmV4cG9ydHM9eW9lfSk7dmFyIHdvZT1IKChQSm4sYm9lKT0+e3ZhciBob3I9RzQoKSxwb3I9ajQoKTtmdW5jdGlvbiBkb3IoZSl7cmV0dXJuIGhvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZwb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfWJvZS5leHBvcnRzPWRvcn0pO3ZhciBNb2U9SCgoSUpuLFNvZSk9Pnt2YXIgbW9yPXhvZSgpLGdvcj13b2UoKSxfb3I9Z29yKGZ1bmN0aW9uKGUsdCxyKXttb3IoZSx0LHIpfSk7U29lLmV4cG9ydHM9X29yfSk7dmFyIHhsdD1IKChMSm4sRW9lKT0+e2Z1bmN0aW9uIHlvcihlLHQpe3JldHVybiBlPHR9RW9lLmV4cG9ydHM9eW9yfSk7dmFyIENvZT1IKChrSm4sVG9lKT0+e3ZhciB2b3I9c0goKSx4b3I9eGx0KCksYm9yPXUwKCk7ZnVuY3Rpb24gd29yKGUpe3JldHVybiBlJiZlLmxlbmd0aD92b3IoZSxib3IseG9yKTp2b2lkIDB9VG9lLmV4cG9ydHM9d29yfSk7dmFyIFBvZT1IKChSSm4sQW9lKT0+e3ZhciBTb3I9c0goKSxNb3I9SGYoKSxFb3I9eGx0KCk7ZnVuY3Rpb24gVG9yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP1NvcihlLE1vcih0LDIpLEVvcik6dm9pZCAwfUFvZS5leHBvcnRzPVRvcn0pO3ZhciBMb2U9SCgoTkpuLElvZSk9Pnt2YXIgQ29yPUhjKCksQW9yPWZ1bmN0aW9uKCl7cmV0dXJuIENvci5EYXRlLm5vdygpfTtJb2UuZXhwb3J0cz1Bb3J9KTt2YXIgTm9lPUgoKERKbixSb2UpPT57dmFyIFBvcj1MNCgpLElvcj1VNCgpLExvcj1SNCgpLGtvZT1NbCgpLGtvcj0kUygpO2Z1bmN0aW9uIFJvcihlLHQscixuKXtpZigha29lKGUpKXJldHVybiBlO3Q9SW9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9a29yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPWtvZSh1KT91Okxvcih0W2krMV0pP1tdOnt9KX1Qb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Sb2UuZXhwb3J0cz1Sb3J9KTt2YXIgT29lPUgoKE9KbixEb2UpPT57dmFyIE5vcj1xNCgpLERvcj1Ob2UoKSxPb3I9VTQoKTtmdW5jdGlvbiB6b3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9Tm9yKGUsYSk7cihzLGEpJiZEb3IobyxPb3IoYSxlKSxzKX1yZXR1cm4gb31Eb2UuZXhwb3J0cz16b3J9KTt2YXIgRm9lPUgoKHpKbix6b2UpPT57dmFyIEZvcj1Pb2UoKSxCb3I9WHN0KCk7ZnVuY3Rpb24gSG9yKGUsdCl7cmV0dXJuIEZvcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gQm9yKGUsbil9KX16b2UuZXhwb3J0cz1Ib3J9KTt2YXIgSG9lPUgoKEZKbixCb2UpPT57dmFyIFZvcj1fbHQoKSxVb3I9aWx0KCkscW9yPW9sdCgpO2Z1bmN0aW9uIEdvcihlKXtyZXR1cm4gcW9yKFVvcihlLHZvaWQgMCxWb3IpLGUrIiIpfUJvZS5leHBvcnRzPUdvcn0pO3ZhciBVb2U9SCgoQkpuLFZvZSk9Pnt2YXIgV29yPUZvZSgpLFlvcj1Ib2UoKSxqb3I9WW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306V29yKGUsdCl9KTtWb2UuZXhwb3J0cz1qb3J9KTt2YXIgR29lPUgoKEhKbixxb2UpPT57dmFyIFhvcj1NYXRoLmNlaWwsJG9yPU1hdGgubWF4O2Z1bmN0aW9uIEtvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz0kb3IoWG9yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfXFvZS5leHBvcnRzPUtvcn0pO3ZhciBZb2U9SCgoVkpuLFdvZSk9Pnt2YXIgWm9yPUdvZSgpLEpvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiBRb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZKb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxab3IodCxyLG4sZSl9fVdvZS5leHBvcnRzPVFvcn0pO3ZhciBYb2U9SCgoVUpuLGpvZSk9Pnt2YXIgdGFyPVlvZSgpLGVhcj10YXIoKTtqb2UuZXhwb3J0cz1lYXJ9KTt2YXIgS29lPUgoKHFKbiwkb2UpPT57ZnVuY3Rpb24gcmFyKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX0kb2UuZXhwb3J0cz1yYXJ9KTt2YXIgUW9lPUgoKEdKbixKb2UpPT57dmFyIFpvZT1adigpO2Z1bmN0aW9uIG5hcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPVpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9Wm9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Kb2UuZXhwb3J0cz1uYXJ9KTt2YXIgZWFlPUgoKFdKbix0YWUpPT57dmFyIGlhcj1Rb2UoKTtmdW5jdGlvbiBvYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPWlhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fXRhZS5leHBvcnRzPW9hcn0pO3ZhciBuYWU9SCgoWUpuLHJhZSk9Pnt2YXIgd2x0PVY0KCksYWFyPXE0KCksc2FyPUhmKCksbGFyPVFzdCgpLGNhcj1Lb2UoKSx1YXI9TjQoKSxoYXI9ZWFlKCksZmFyPXUwKCkscGFyPVRpKCk7ZnVuY3Rpb24gZGFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBwYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIGFhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bZmFyXTt2YXIgbj0tMTt0PXdsdCh0LHVhcihzYXIpKTt2YXIgaT1sYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gY2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gaGFyKG8sYSxyKX0pfXJhZS5leHBvcnRzPWRhcn0pO3ZhciBhYWU9SCgoakpuLG9hZSk9Pnt2YXIgbWFyPXRIKCksZ2FyPW5hZSgpLF9hcj1HNCgpLGlhZT1qNCgpLHlhcj1fYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJmlhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJmlhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZ2FyKGUsbWFyKHQsMSksW10pfSk7b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChYSm4sc2FlKT0+e3ZhciB4YXI9WXN0KCksYmFyPTA7ZnVuY3Rpb24gd2FyKGUpe3ZhciB0PSsrYmFyO3JldHVybiB4YXIoZSkrdH1zYWUuZXhwb3J0cz13YXJ9KTt2YXIgdWFlPUgoKCRKbixjYWUpPT57ZnVuY3Rpb24gU2FyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9Y2FlLmV4cG9ydHM9U2FyfSk7dmFyIGZhZT1IKChLSm4saGFlKT0+e3ZhciBNYXI9TDQoKSxFYXI9dWFlKCk7ZnVuY3Rpb24gVGFyKGUsdCl7cmV0dXJuIEVhcihlfHxbXSx0fHxbXSxNYXIpfWhhZS5leHBvcnRzPVRhcn0pO3ZhciBVbj1IKChaSm4scGFlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6TWllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpBaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOllpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjokaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpaaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOlFpZSgpLG1heDppb2UoKSxtZXJnZTpNb2UoKSxtaW46Q29lKCksbWluQnk6UG9lKCksbm93OkxvZSgpLHBpY2s6VW9lKCkscmFuZ2U6WG9lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTphYWUoKSx1bmlxdWVJZDpsYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmZhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7cGFlLmV4cG9ydHM9bEh9KTt2YXIgZ2FlPUgoKFFKbixtYWUpPT57bWFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiBkYWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmZGFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixDYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIGRhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIENhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgeWFlPUgoKHRRbixfYWUpPT57dmFyIFBkPVVuKCksQWFyPVVjKCkuR3JhcGgsUGFyPWdhZSgpO19hZS5leHBvcnRzPUxhcjt2YXIgSWFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIExhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UmFyKGUsdHx8SWFyKSxuPWthcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIGthcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUmFyKGUsdCl7dmFyIHI9bmV3IEFhcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgUGFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciB4YWU9SCgoZVFuLHZhZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksTmFyPXlhZSgpO3ZhZS5leHBvcnRzPXtydW46RGFyLHVuZG86emFyfTtmdW5jdGlvbiBEYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP05hcihlLHIoZSkpOk9hcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gemFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChyUW4sTWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxiYWU9VWMoKS5HcmFwaDtNYWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOndhZSxzaW1wbGlmeTpGYXIsYXNOb25Db21wb3VuZEdyYXBoOkJhcixzdWNjZXNzb3JXZWlnaHRzOkhhcixwcmVkZWNlc3NvcldlaWdodHM6VmFyLGludGVyc2VjdFJlY3Q6VWFyLGJ1aWxkTGF5ZXJNYXRyaXg6cWFyLG5vcm1hbGl6ZVJhbmtzOkdhcixyZW1vdmVFbXB0eVJhbmtzOldhcixhZGRCb3JkZXJOb2RlOllhcixtYXhSYW5rOlNhZSxwYXJ0aXRpb246amFyLHRpbWU6WGFyLG5vdGltZTokYXJ9O2Z1bmN0aW9uIHdhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIEZhcihlKXt2YXIgdD1uZXcgYmFlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gQmFyKGUpe3ZhciB0PW5ldyBiYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gVWFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIHFhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UoU2FlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gR2FyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBXYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBZYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx3YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIFNhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIGphcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gJGFyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgQ2FlPUgoKG5RbixUYWUpPT57InVzZSBzdHJpY3QiO3ZhciBFYWU9VW4oKSxLYXI9bnMoKTtUYWUuZXhwb3J0cz17cnVuOlphcix1bmRvOlFhcn07ZnVuY3Rpb24gWmFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxFYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7SmFyKGUsdCl9KX1mdW5jdGlvbiBKYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9S2FyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uIFFhcihlKXtFYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKGlRbixBYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO0FhZS5leHBvcnRzPXtsb25nZXN0UGF0aDp0c3Isc2xhY2s6ZXNyfTtmdW5jdGlvbiB0c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBlc3IoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChvUW4sUGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxyc3I9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO1BhZS5leHBvcnRzPW5zcjtmdW5jdGlvbiBuc3IoZSl7dmFyIHQ9bmV3IHJzcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO2lzcih0LGUpPG47KWk9b3NyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLGFzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gaXNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gb3NyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gYXNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciB6YWU9SCgoYVFuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksc3NyPUVsdCgpLGxzcj1YNCgpLnNsYWNrLGNzcj1YNCgpLmxvbmdlc3RQYXRoLHVzcj1VYygpLmFsZy5wcmVvcmRlcixoc3I9VWMoKS5hbGcucG9zdG9yZGVyLGZzcj1ucygpLnNpbXBsaWZ5O09hZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1MYWU7dDEubGVhdmVFZGdlPVJhZTt0MS5lbnRlckVkZ2U9TmFlO3QxLmV4Y2hhbmdlRWRnZXM9RGFlO2Z1bmN0aW9uIHQxKGUpe2U9ZnNyKGUpLGNzcihlKTt2YXIgdD1zc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UmFlKHQpOyluPU5hZSh0LGUsciksRGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPWhzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe3BzcihlLHQsbil9KX1mdW5jdGlvbiBwc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUxhZShlLHQscil9ZnVuY3Rpb24gTGFlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixtc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLGthZShlLHt9LDEsdCl9ZnVuY3Rpb24ga2FlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1rYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUmFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBOYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PUlhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09SWFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gbHNyKHQsdSl9KX1mdW5jdGlvbiBEYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksZHNyKGUsdCl9ZnVuY3Rpb24gZHNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPXVzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIG1zcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIElhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciBWYWU9SCgoc1FuLEhhZSk9PnsidXNlIHN0cmljdCI7dmFyIGdzcj1YNCgpLEJhZT1nc3IubG9uZ2VzdFBhdGgsX3NyPUVsdCgpLHlzcj16YWUoKTtIYWUuZXhwb3J0cz12c3I7ZnVuY3Rpb24gdnNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6RmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6YnNyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjp4c3IoZSk7YnJlYWs7ZGVmYXVsdDpGYWUoZSl9fXZhciB4c3I9QmFlO2Z1bmN0aW9uIGJzcihlKXtCYWUoZSksX3NyKGUpfWZ1bmN0aW9uIEZhZShlKXt5c3IoZSl9fSk7dmFyIHFhZT1IKChsUW4sVWFlKT0+e3ZhciBBbHQ9VW4oKTtVYWUuZXhwb3J0cz13c3I7ZnVuY3Rpb24gd3NyKGUpe3ZhciB0PU1zcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPVNzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiBTc3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24gTXNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFlhZT1IKChjUW4sV2FlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1dhZS5leHBvcnRzPXtydW46RXNyLGNsZWFudXA6QXNyfTtmdW5jdGlvbiBFc3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPVRzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89Q3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7R2FlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gR2FlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtHYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiBUc3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBDc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBBc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyICRhZT1IKCh1UW4sWGFlKT0+e3ZhciBJbHQ9VW4oKSxQc3I9bnMoKTtYYWUuZXhwb3J0cz1Jc3I7ZnVuY3Rpb24gSXNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pamFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxqYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIGphZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Qc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciBRYWU9SCgoaFFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7SmFlLmV4cG9ydHM9e2FkanVzdDpMc3IsdW5kbzprc3J9O2Z1bmN0aW9uIExzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZaYWUoZSl9ZnVuY3Rpb24ga3NyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlJzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKE5zcihlKSxaYWUoZSkpfWZ1bmN0aW9uIFphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtLYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe0thZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gS2FlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFJzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIE5zcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBlc2U9SCgoZlFuLHRzZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7dHNlLmV4cG9ydHM9RHNyO2Z1bmN0aW9uIERzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBuc2U9SCgocFFuLHJzZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7cnNlLmV4cG9ydHM9T3NyO2Z1bmN0aW9uIE9zcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz16c3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24genNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIGFzZT1IKChkUW4sb3NlKT0+e3ZhciBpc2U9VW4oKTtvc2UuZXhwb3J0cz1Gc3I7ZnVuY3Rpb24gRnNyKGUsdCl7cmV0dXJuIGlzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPWlzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGxzZT1IKChtUW4sc3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtzc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gSHNyKG4pfWZ1bmN0aW9uIEhzcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmVnNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIFZzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBoc2U9SCgoZ1FuLHVzZSk9Pnt2YXIgJDQ9VW4oKSxVc3I9bnMoKTt1c2UuZXhwb3J0cz1xc3I7ZnVuY3Rpb24gcXNyKGUsdCl7dmFyIHI9VXNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoR3NyKCEhdCkpLGw9Y3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPWNzZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gY3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBHc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgZHNlPUgoKF9Rbixwc2UpPT57dmFyIGYwPVVuKCksV3NyPWFzZSgpLFlzcj1sc2UoKSxqc3I9aHNlKCk7cHNlLmV4cG9ydHM9ZnNlO2Z1bmN0aW9uIGZzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9V3NyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWZzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJiRzcihkLGcpfX0pO3ZhciB1PVlzcihjLHIpO1hzcih1LGwpO3ZhciBoPWpzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIFhzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gJHNyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBnc2U9SCgoeVFuLG1zZSk9Pnt2YXIgSzQ9VW4oKSxLc3I9VWMoKS5HcmFwaDttc2UuZXhwb3J0cz1ac3I7ZnVuY3Rpb24gWnNyKGUsdCxyKXt2YXIgbj1Kc3IoZSksaT1uZXcgS3NyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIEpzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIHlzZT1IKCh2UW4sX3NlKT0+e3ZhciBRc3I9VW4oKTtfc2UuZXhwb3J0cz10bHI7ZnVuY3Rpb24gdGxyKGUsdCxyKXt2YXIgbj17fSxpO1Fzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIFNzZT1IKCh4UW4sd3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxlbHI9ZXNlKCkscmxyPW5zZSgpLG5scj1kc2UoKSxpbHI9Z3NlKCksb2xyPXlzZSgpLGFscj1VYygpLkdyYXBoLHZzZT1ucygpO3dzZS5leHBvcnRzPXNscjtmdW5jdGlvbiBzbHIoZSl7dmFyIHQ9dnNlLm1heFJhbmsoZSkscj14c2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPXhzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1lbHIoZSk7YnNlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2xscihzJTI/cjpuLHMlND49MiksaT12c2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1ybHIoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1ic2UoZSxhKX1mdW5jdGlvbiB4c2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gaWxyKGUsbixyKX0pfWZ1bmN0aW9uIGxscihlLHQpe3ZhciByPW5ldyBhbHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89bmxyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksb2xyKG4scixvLnZzKX0pfWZ1bmN0aW9uIGJzZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFJzZT1IKChiUW4sa3NlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxjbHI9VWMoKS5HcmFwaCx1bHI9bnMoKTtrc2UuZXhwb3J0cz17cG9zaXRpb25YOnBscixmaW5kVHlwZTFDb25mbGljdHM6TXNlLGZpbmRUeXBlMkNvbmZsaWN0czpFc2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OlRzZSx2ZXJ0aWNhbEFsaWdubWVudDpDc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246QXNlLGFsaWduQ29vcmRpbmF0ZXM6SXNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OlBzZSxiYWxhbmNlOkxzZX07ZnVuY3Rpb24gTXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1obHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gRXNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gaGxyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiBUc2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBDc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIVRzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIEFzZShlLHQscixuLGkpe3ZhciBvPXt9LGE9ZmxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGZscihlLHQscixuKXt2YXIgaT1uZXcgY2xyLG89ZS5ncmFwaCgpLGE9ZGxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBQc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPW1scihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBJc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBMc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gcGxyKGUpe3ZhciB0PXVsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoTXNlKGUsdCksRXNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPUNzZShlLGkscixsKSx1PUFzZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPVBzZShlLG4pO3JldHVybiBJc2UobixvKSxMc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIGRscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBtbHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBPc2U9SCgod1FuLERzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksTnNlPW5zKCksZ2xyPVJzZSgpLnBvc2l0aW9uWDtEc2UuZXhwb3J0cz1fbHI7ZnVuY3Rpb24gX2xyKGUpe2U9TnNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSx5bHIoZSksWjQuZm9yRWFjaChnbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24geWxyKGUpe3ZhciB0PU5zZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIFVzZT1IKChTUW4sVnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSx6c2U9eGFlKCksRnNlPUNhZSgpLHZscj1WYWUoKSx4bHI9bnMoKS5ub3JtYWxpemVSYW5rcyxibHI9cWFlKCksd2xyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxCc2U9WWFlKCksU2xyPSRhZSgpLEhzZT1RYWUoKSxNbHI9U3NlKCksRWxyPU9zZSgpLGQwPW5zKCksVGxyPVVjKCkuR3JhcGg7VnNlLmV4cG9ydHM9Q2xyO2Z1bmN0aW9uIENscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gRmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7QWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7UGxyKGUsbil9KX0pfWZ1bmN0aW9uIEFscihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0JscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7WGxyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7enNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0JzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXt2bHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe0hscihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3dscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtCc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXt4bHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXtWbHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtVbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtGc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXtTbHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7TWxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXskbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe0VscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtLbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7amxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe0ZzZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1dscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtIc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtxbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7WWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXt6c2UudW5kbyhlKX0pfWZ1bmN0aW9uIFBscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgSWxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxMbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sa2xyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUmxyPVsid2lkdGgiLCJoZWlnaHQiXSxObHI9e3dpZHRoOjAsaGVpZ2h0OjB9LERscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxPbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSx6bHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIEZscihlKXt2YXIgdD1uZXcgVGxyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxMbHIsTmx0KHIsSWxyKSxpci5waWNrKHIsa2xyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFJsciksTmxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxPbHIsTmx0KGksRGxyKSxpci5waWNrKGksemxyKSkpfSksdH1mdW5jdGlvbiBCbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIEhscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gVmxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIHFscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gV2xyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gamxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBYbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uICRscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIEtscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEdzZT1IKChNUW4scXNlKT0+e3ZhciBwSD1VbigpLFpscj1ucygpLEpscj1VYygpLkdyYXBoO3FzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOlFscn07ZnVuY3Rpb24gUWxyKGUpe3ZhciB0PVpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IEpscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgWXNlPUgoKEVRbixXc2UpPT57V3NlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoVFFuLGpzZSk9Pntqc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6VXNlKCksZGVidWc6R3NlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOllzZSgpfX0pO3ZhciBWZHQ9RWUoSGR0KCksMSkse19fZXh0ZW5kczpkX3IsX19hc3NpZ246bV9yLF9fcmVzdDpnX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06X19yLF9fZXNEZWNvcmF0ZTp5X3IsX19ydW5Jbml0aWFsaXplcnM6dl9yLF9fcHJvcEtleTp4X3IsX19zZXRGdW5jdGlvbk5hbWU6Yl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6d19yLF9fZ2VuZXJhdG9yOlNfcixfX2V4cG9ydFN0YXI6TV9yLF9fY3JlYXRlQmluZGluZzpFX3IsX192YWx1ZXM6VF9yLF9fcmVhZDpDX3IsX19zcHJlYWQ6QV9yLF9fc3ByZWFkQXJyYXlzOlBfcixfX3NwcmVhZEFycmF5OklfcixfX2F3YWl0OkxfcixfX2FzeW5jR2VuZXJhdG9yOmtfcixfX2FzeW5jRGVsZWdhdG9yOlJfcixfX2FzeW5jVmFsdWVzOk5fcixfX21ha2VUZW1wbGF0ZU9iamVjdDpEX3IsX19pbXBvcnRTdGFyOk9fcixfX2ltcG9ydERlZmF1bHQ6el9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6Rl9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6Ql9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpIX3J9PVZkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gVWR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e1VkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7VWR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBVX3I9cWR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLHFfcj1xZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gcWR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIFR2ZT0vKHVybFwoKShbXildKikoXCkpL2csQ3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJkN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2UoVHZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsJF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksS19yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxHZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxXZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFlkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBqZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBYZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyICRkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgS2R0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBBdmU9MDtmdW5jdGlvbiBaZHQoKXt9WmR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO1pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1BdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSx0bXQ9e307ZnVuY3Rpb24gSmR0KGUsdCl7ZEdbZV09dG10W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiBRZHQoZSl7cmV0dXJuIGRHW2VdfHx0bXRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBQdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj1RZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiZRZHQodCkhPT12b2lkIDApdGhyb3cgSmR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsSmR0KHQsdGhpcyksUHZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBJdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsTHZlPSJpbmNsdWRlIixlbXQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIHJtdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBrdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlJ2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShMdmUpO2EmJnIucHVzaCguLi5rdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBubXQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoSXZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShlbXQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1ybXQobyk7cy5zZXRBdHRyaWJ1dGUoZW10LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPXJtdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIGltdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1OdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gTnZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPU92ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9RHZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIER2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIE92ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIG9tdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9b210KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1vbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSx6dmU9Ly1bYS16XS9nLEZ2ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoenZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShGdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBCdmU9MCxhbXQ9MCxMeD1bXSxIdmU9MCx2Rz0hMSxzbXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcihWdmUpLm9ic2VydmUoc210LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24gVnZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxhbXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsc210LnRleHRDb250ZW50PUh2ZSsrKSxMeC5wdXNoKGUpLEJ2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1hbXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgVXZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLFV2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBsbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspbG10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gcXZlKGUsdCl7aWYoIWxtdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtxdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEd2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxjbXQ9ITEsdW10PSExO2Z1bmN0aW9uIFd2ZSgpe2lmKCFjbXQpe2NtdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLHVtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gdW10fWZ1bmN0aW9uIFl2ZShlKXtXdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24ganZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkd2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBobXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJmhtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIFh2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiAkdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gS3ZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBadmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGZtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksWXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1qdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPWhtdChzLGgpO1h2ZSh0aGlzLHMuJCxmLGgpLEt2ZSh0aGlzLGYsaCxpKSwkdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9WnZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0seG10PSJfX2NvbXB1dGVJbmZvIixKdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiBRdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBwbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIHQxZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmUXZlKGUsbyxzLGMscixuLGkpfHxpJiZlMWUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIGUxZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIGJtdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBibXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiByMWUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxibXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIG4xZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gaTFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gbzFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZigkZHQpe2pNKys7bGV0IG89czFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpZG10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspd210KGUsIiIsdCxyLHMpJiZkbXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIGExZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSxkbXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0sYTFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIHMxZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309bDFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGwxZShlKXtsZXQgdD1lW3htdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24gd210KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIGMxZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLGQxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9Yyx1MWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gdTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPU1tdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOmgxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBoMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmZjFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGYxZShlLHQscixuLGkpe2lmKGk9cDFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBwMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIGQxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gbTFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2cxZShhLGMpLF8xZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGcxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIF8xZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7bjFlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gbW10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgeTFlPVtdLFNtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIix2MWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIseDFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixiMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHcxZT0iKD86Iit4MWUrInwiK2IxZSsiKSIsZ210PSIoPzooIitTbXQrInwiK3YxZSsifCIrdzFlKyIpXFxzKikiLFMxZT0iKD86IitnbXQrIig/OixcXHMqIitnbXQrIikqKSIsTTFlPSIoPzpcXChcXHMqKD86IitTMWUrIj8pXFwpXFxzKikiLEUxZT0iKCIrU210KyJcXHMqIitNMWUrIj8pIixUMWU9IihcXFtcXFt8e3spXFxzKiIsQzFlPSIoPzpdXXx9fSkiLEExZT0iKD86KCEpXFxzKik/IixQMWU9VDFlK0ExZStFMWUrQzFlLF9tdD1uZXcgUmVnRXhwKFAxZSwiZyIpO2Z1bmN0aW9uIHltdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOnkxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBJMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIEkxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49TW10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiBNbXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gdm10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIEVtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe0VtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEwxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9Zm10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gYzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7bzFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmdDFlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO0VtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0wxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpwbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOnBtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO21tdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46cjFlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjppMWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9bW10KHRoaXMscyx6ci5DT01QVVRFLHdtdCxpLGEpO3hHKHRoaXMseG10KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PXZtdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj92bXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLG0xZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PXltdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7SnZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9eW10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1fbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1fbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIGsxZT0wO2Z1bmN0aW9uIFRtdCgpe2sxZSsrfXZhciBSMWU9W107ZnVuY3Rpb24gVkkoZSl7UjFlLnB1c2goZSl9ZnVuY3Rpb24gTjFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgQ210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9TjFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtUbXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgQW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PUNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1ubXQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksS2R0JiZVSSYmR2R0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fGpkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIEFtdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1XZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksWGR0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEQxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gTzFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEQxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrTzFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBQbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhQbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpQbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPXoxZShlKSxJbXQoRjFlKGUpLGUpfWZ1bmN0aW9uIHoxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIEYxZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1MbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09a210JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIEltdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUIxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVzFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEcxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUm10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylJbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBCMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhSDFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6VjFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitMbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1rbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gSDFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihSbXQpPT09MH1mdW5jdGlvbiBWMWUoZSl7cmV0dXJuIGU9VTFlKGUpLHExZShlKX1mdW5jdGlvbiBVMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gcTFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LExtdD0ieyIsa210PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUm10PSItLSIsRzFlPSJAbWVkaWEiLFcxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIE5tdD0vQG1lZGlhXHMoLiopLzt2YXIgRG10PW5ldyBTZXQsWTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24gT210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIURtdC5oYXModCkpe0RtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gem10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShZMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goTm10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gajFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPWoxZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIGZ2cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gRm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gQm10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO3ptdChpKT9oX3x8KE9tdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIEhtdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBYMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoSG10KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9JDFlKGUpO3IhPT0iIiYmSzFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gWDFlKGUpIT09IiJ9ZnVuY3Rpb24gJDFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PUhtdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBLMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gVm10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIFoxZT0vO1xzKi9tLEoxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxVbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIFZtdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9Qm10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShaMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShVbXQsIiIpKSxhLnB1c2goIikiKSxVbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPUoxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBxbXQ9RG87dmFyIFExZT17fSxRTT1RMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLHR4ZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBHbXQoZSl7bGV0IHQ9UU1bZV07dCYmZXhlKHQpfWZ1bmN0aW9uIGV4ZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gV210KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBZbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsdHhlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLGptdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7am10P2ptdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIFhtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbWG10XXx8KHRbWG10XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgcW10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1HbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1GbXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtXbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFltdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSwkbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixLbXQ9MjUsWm10PTUsbnhlPTIsaXhlPTI1MDAscmd0PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sb3hlPVswLDEsNCwyXSxheGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiByZ3QuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIG5ndChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmWWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgaWd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLHN4ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxseGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBjeGUoZSl7cmV0dXJuIHN4ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIHV4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIEptdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYoY3hlKG5baV0pKXtsZXQgbz11eGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uIFFtdChlKXtsZXQgdD1pZ3Q/WyJjbGljayJdOnJndDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sSm10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLEptdCwhMCl9ZnVuY3Rpb24gaHhlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fFFtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXtRbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIoaXhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFheGUmJihyPW94ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBmeGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBweGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gb2d0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsaHhlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gZHhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gYWd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmbXhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gbXhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPXB4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGd4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIHNndChlLHQscil7cmV0dXJuIGlFW3RdPyhfeGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBneGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sIShpZ3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIF94ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGFndCxuZ3QobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24geXhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9eXhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07b2d0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPm54ZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7dGd0KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O29ndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTt0Z3QodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gdGd0KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49Wm10fHxpPj1abXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZHhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmZWd0KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2VndCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBlZ3QoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8bHhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PUttdCYmaTw9S210fHxmeGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBsZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7c2d0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIHZ4ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyx4eGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxieGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHd4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLFN4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sdWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gaGd0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gZmd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gcGd0KCl7aGd0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWZndChvRVtlXSl9ZnVuY3Rpb24gTXhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZwZ3QoKX12YXIgZGd0PVJuKGU9Pnt1Z3R8fGFFfHwoaGd0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocGd0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCF1Z3QmJlN4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UodnhlLHh4ZSksbz1vLnJlcGxhY2UoYnhlLHd4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKE14ZSgpLG9FLnB1c2godGhpcyksZmd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxtZ3Q9W10sZ2d0PVtdO2Z1bmN0aW9uIF9ndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLEV4ZShtZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtUeGUoZ2d0KX0pfSl9ZnVuY3Rpb24gRXhlKGUpe2Zvcig7ZS5sZW5ndGg7KXlndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIFR4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspeWd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24geWd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIHZndChlLHQscil7aTl8fF9ndCgpLG1ndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8X2d0KCksZ2d0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24geGd0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/eGd0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHhndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBiZ3Q9MCx3Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gQ3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIEF4ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChiZ3QpOihpLnB1c2god2d0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gUHhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9SXhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1MeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1BeGUoQ3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBiZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHdndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBJeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gTHhlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBQeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PSRtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsa3hlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGt4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFJ4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gU2d0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIE54ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSxTZ3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBSeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLFNndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxOeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00sTWd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBFZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gVGd0KGUsdD0hMSl7aWYoIUtHfHwhTWd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPU1ndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIUVndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFFZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LEUxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixEeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OmRndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gVGd0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBEeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPUNndChlLHIrMSksbj1DZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIENndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBPeGU9W107ZnVuY3Rpb24genhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gRnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBQZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSWd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pkh4ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+TGd0LHNldEZlYXR1cmVGbGFnczooKT0+QnhlfSk7dmFyIHM5LGw5O0xndCgpO2Z1bmN0aW9uIExndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBCeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gSHhlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49VXhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz1WeGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKFBndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24gVnhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIFV4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1xeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gcXhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBrZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsR3hlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksV3hlPVJndCgpO2Z1bmN0aW9uIFJndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChJZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixOZ3Qoe1trZ3RdOkd4ZS5nZXRBbGwoa2d0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gV3hlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gTmd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBqeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBYeGUoZSx0PSIiKXtsZXQgcj1bWXhlKGUsdCldLG49anhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPVh4ZShuLHIpLG89JHhlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uICR4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBLeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoS3hlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIFp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxGZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LEp4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LEZndCk7ZnVuY3Rpb24gUXhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBCZ3QoZSx0KXtyZXR1cm4gVWd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIHRiZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspSGd0KGUsdFtuXSxyLEp4ZSl9ZnVuY3Rpb24gSGd0KGUsdCxyLG4pe1F4ZSh0LGUsbik7Zm9yKGxldCBpIGluIFp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIFZndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/Vmd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24gT2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIHpndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gVWd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylPZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBPZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249Vmd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZ0YmUocyxuLGkpLEhndChzLGUsaSxGZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dCh6Z3QpOnpndDtyZXR1cm4gcj1VZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgR2d0PXVfKG5XKSxlYmU9R3goR2d0KTtmdW5jdGlvbiByYmUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBuYmU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBuYmV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIGliZT1HeChiaCk7ZnVuY3Rpb24gcWd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBvYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/aWJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGxiZShpLGUsdCxyKSxpfWZ1bmN0aW9uIGFiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP2ViZTpHZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46c2JlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJmhiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKXJiZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gc2JlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gbGJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpjYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46dWJlKCl9KX1mdW5jdGlvbiBjYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gdWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFxZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89b2JlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPXFndChlKTthYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gaGJlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFdndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgWWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVlndCl7WWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGZiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGZiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIHBiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBwYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxqZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGpndC5pcyxqZ3QpO3ZhciBkYmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgbWJlPWRiZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBtYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIFhndD0iaW5jbHVkZSIsZ2JlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGdiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShYZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoWGd0KSx0LnRleHRDb250ZW50PWltdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyICRndDskZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgS2d0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiAkZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgWmd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7Wmd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWmd0LmNvbnRlbnQpO3ZhciBKZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7Smd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSmd0LmNvbnRlbnQpO3ZhciBRZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtRZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFFndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIF9iZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBfYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciB5YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoeWJlLmNvbnRlbnQpO3ZhciB2YmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHZiZS5jb250ZW50KTt2YXIgdDB0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSx4YmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sZTB0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sYmJlPS9bYS16MC05Kl0vLHdiZT0vVVwrLyxTYmU9L15hcnJvdy8sTWJlPS9ec3BhY2UoYmFyKT8vLEViZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIHIwdChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHxNYmUudGVzdChuKT9yPSJzcGFjZSI6RWJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fGJiZS50ZXN0KG4pKSYmKHI9bik6U2JlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gVGJlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiB0MHQ/dD10MHRbZV06d2JlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBDYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9eGJlW2VdKSx0fWZ1bmN0aW9uIEFiZShlLHQpe3JldHVybiBlLmtleT9yMHQoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9yMHQoZS5kZXRhaWwua2V5LHQpOlRiZShlLmtleUlkZW50aWZpZXIpfHxDYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gbjB0KGUsdCl7dmFyIHI9QWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gUGJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gZTB0Pyh0W2UwdFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiBpMHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1pMHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKG4wdChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXtpMHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYobjB0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgbzB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksSWJlPW8wdCYmbzB0WzFdPj04LGEwdD0zLHMwdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1dndCxKcyx2OSxLZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsYTB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChhMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IUliZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLHMwdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgbDB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7bDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobDB0LmNvbnRlbnQpO3ZhciBjMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2MwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMwdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIHUwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9dTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IHUwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxoMHQ9W1NoLERpLHN1LHVXXTt2YXIgZjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7ZjB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6ZjB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbaDB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBwMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7cDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocDB0LmNvbnRlbnQpO3ZhciBkMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtkMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChkMHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LG0wdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgTGJlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LG0wdCxMYmVdO3ZhciBnMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtnMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpnMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBfMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtfMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgeTB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIGtiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1beTB0LGtiZV07dmFyIHc5LFJiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LHYwdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVJiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LHgwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sYjB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0sdzB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiBTMHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkRiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLEUwdD1bXSxUMHQ9W10pfWZ1bmN0aW9uIE0wdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxFMHQ9W10sVDB0PVtdLENoLmxlbmd0aD09PTAmJk9iZSgpKX12YXIgQ2g9W10sRTB0PW51bGwsVDB0PW51bGw7ZnVuY3Rpb24gTmJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmemJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBEYmUoKXtNOT1NOXx8TmJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIE9iZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gemJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJncwdCE9PXQmJih3MHQ9dCxnVz1GYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPUhiZShlKTtyZXR1cm4hQmJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBGYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIEJiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gSGJlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpiMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIHgwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxVYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyhNMHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSxTMHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSxWYmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LFViZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj1WYmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVt2MHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxDMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltDMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgQTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7QTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgcWJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLHFiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEdiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtHYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBXYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxXYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7bGd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxQMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6UDB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PVAwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFliZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFliZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LEkwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W0kwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBMMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7TDB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTDB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIGswdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtrMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTprMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUjB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1IwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlIwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgTjB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtOMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpOMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEQwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0QwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkQwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBqYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgTzB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7TzB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6TzB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5YYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgejB0PSExO2Z1bmN0aW9uIFhiZShlKXt6MHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiB6MHR9dmFyIEYwdD0iIjtmdW5jdGlvbiBJVyhlKXtGMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBGMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBCMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gSDB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIFYwdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBxMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6JGJlLHNldDpLYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6WmJlfT12RShlPT5lLGU9PmUpLHtnZXQ6SmJlLHNldDpRYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6dDJlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOmUyZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OnIyZSxzZXQ6bjJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOmkyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpVjB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9VTB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBvMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLEgwdCh0KX1mdW5jdGlvbiBVMHQoZSx0KXtsZXQgcj1lW3EwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEcwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIsYTJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoRzB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPWEyZSkpLEFofWZ1bmN0aW9uIHMyZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhHMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVzB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFXMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgWTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57WTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT5WdnQsYXJjOigpPT5CU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+bV90LGF4aXNUb3A6KCk9PmRfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PiQwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkQxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+anZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5PMXQsY2hvcmQ6KCk9PiR2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+V2J0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZzF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9PnN5dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5GMXQsY3N2Rm9ybWF0OigpPT5iMXQsY3N2Rm9ybWF0Qm9keTooKT0+dzF0LGNzdkZvcm1hdFJvdzooKT0+TTF0LGNzdkZvcm1hdFJvd3M6KCk9PlMxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+RTF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PngxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlFTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+ZTN0LGN1cnZlQnVuZGxlOigpPT5uM3QsY3VydmVDYXJkaW5hbDooKT0+aTN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9Pm8zdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+bDN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+dTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmYzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PmQzdCxjdXJ2ZU1vbm90b25lWDooKT0+eDN0LGN1cnZlTW9ub3RvbmVZOigpPT5iM3QsY3VydmVOYXR1cmFsOigpPT5NM3QsY3VydmVTdGVwOigpPT5FM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PkMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PlQzdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+WjB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+dTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5XMXQsZm9yY2VDb2xsaWRlOigpPT51eHQsZm9yY2VMaW5rOigpPT5meHQsZm9yY2VNYW55Qm9keTooKT0+Z3h0LGZvcmNlUmFkaWFsOigpPT5feHQsZm9yY2VTaW11bGF0aW9uOigpPT5teHQsZm9yY2VYOigpPT55eHQsZm9yY2VZOigpPT52eHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+TGJ0LGdlb0FyZWE6KCk9Pk54dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PmtidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5SYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+VXh0LGdlb0NlbnRyb2lkOigpPT5YeHQsZ2VvQ2lyY2xlOigpPT5ReHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+cmJ0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5EYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+emJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5jYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9PkZidCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk9idCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5CYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmZidCxnZW9JZGVudGl0eTooKT0+SGJ0LGdlb0ludGVycG9sYXRlOigpPT5wYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+TmJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT5WYnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5VYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT5UYnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5xYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PkNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkdidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PlN5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5yX3QsaHNsOigpPT5WbSxodG1sOigpPT5xMXQsaW1hZ2U6KCk9PkgxdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+RHl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PnhTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PlF3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9PmNTdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PlRTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PlBTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+Snl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+Q1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5PeXQsaW50ZXJwb2xhdGVHbkJ1OigpPT51U3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9PmJTdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT53U3QsaW50ZXJwb2xhdGVIY2w6KCk9PiR5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pkt5dCxpbnRlcnBvbGF0ZUhzbDooKT0+WXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+anl0LGludGVycG9sYXRlSHVlOigpPT56eXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5EU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9Pk5TdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+aFN0LGludGVycG9sYXRlT3JhbmdlczooKT0+RVN0LGludGVycG9sYXRlUFJHbjooKT0+dFN0LGludGVycG9sYXRlUGlZRzooKT0+ZVN0LGludGVycG9sYXRlUGxhc21hOigpPT5PU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5wU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmZTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9PnJTdCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PmRTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PlNTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PklTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9Pm5TdCxpbnRlcnBvbGF0ZVJkR3k6KCk9PmlTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9Pm1TdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+b1N0LGludGVycG9sYXRlUmRZbEduOigpPT5hU3QsaW50ZXJwb2xhdGVSZWRzOigpPT5NU3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pk55dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkxTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5zU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+a1N0LGludGVycG9sYXRlVmlyaWRpczooKT0+UlN0LGludGVycG9sYXRlV2FybTooKT0+QVN0LGludGVycG9sYXRlWWxHbjooKT0+X1N0LGludGVycG9sYXRlWWxHbkJ1OigpPT5nU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PnlTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+dlN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+bnZ0LGlzb0Zvcm1hdDooKT0+Rnd0LGlzb1BhcnNlOigpPT5Cd3QsanNvbjooKT0+VjF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5FeXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PldTdCxsaW5rUmFkaWFsOigpPT5qU3QsbGlua1ZlcnRpY2FsOigpPT5ZU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5vX3QsbWVkaWFuOigpPT5hX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+cjF0LG5vdzooKT0+QXAscGFjazooKT0+ZDJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PnUydCxwYWlyczooKT0+SzB0LHBhcnRpdGlvbjooKT0+bTJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9PnNfdCxwaWU6KCk9PnFTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+TTJ0LHBvbHlnb25DZW50cm9pZDooKT0+RTJ0LHBvbHlnb25Db250YWluczooKT0+UDJ0LHBvbHlnb25IdWxsOigpPT5BMnQscG9seWdvbkxlbmd0aDooKT0+STJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT5ReXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlIydCxyYW5kb21FeHBvbmVudGlhbDooKT0+TjJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5rMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5MMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5KdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PnF3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+VXd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5ZMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT5Wd3Qsc2NhbjooKT0+bF90LHNjaGVtZUFjY2VudDooKT0+R3d0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+V3d0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+WXd0LHNjaGVtZVBhc3RlbDE6KCk9Pmp3dCxzY2hlbWVQYXN0ZWwyOigpPT5Yd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+JHd0LHNjaGVtZVNldDI6KCk9Pkt3dCxzY2hlbWVTZXQzOigpPT5ad3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+Snd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5vMXQsc2h1ZmZsZTooKT0+Y190LHN0YWNrOigpPT5BM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PkkzdCxzdGFja09mZnNldEV4cGFuZDooKT0+UDN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5MM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PmszdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlIzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5OM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5EM3Qsc3RyYXRpZnk6KCk9PnkydCxzdHlsZTooKT0+U3Asc3VtOigpPT51X3Qsc3ZnOigpPT5HMXQsc3ltYm9sOigpPT5aU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5LU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+bl90LHRocmVzaG9sZFNjb3R0OigpPT5pX3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+UTJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+aXd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PloydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PiQydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+dHd0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+c3d0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5vd3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9Pm53dCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5ld3QsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PnJ3dCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5sd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5seXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT52MnQsdHJlZW1hcDooKT0+eDJ0LHRyZWVtYXBCaW5hcnk6KCk9PmIydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PlMydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PncydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+QjF0LHRzdkZvcm1hdDooKT0+QTF0LHRzdkZvcm1hdEJvZHk6KCk9PlAxdCx0c3ZGb3JtYXRSb3c6KCk9PkwxdCx0c3ZGb3JtYXRSb3dzOigpPT5JMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PmsxdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5DMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT5kd3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9PnZ3dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+Znd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+dXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+bXd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnd3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+eHd0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT55d3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9Pmd3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9Pl93dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PlN3dCx2YWx1ZXM6KCk9PmwxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+ajB0LHZvcm9ub2k6KCk9PkszdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+VTF0LHppcDooKT0+aF90LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgajB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9bDJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gbDJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgWDB0PW9iKG9hKSxXVz1YMHQucmlnaHQsJDB0PVgwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIEswdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBaMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBKMHQ9QXJyYXkucHJvdG90eXBlLFEwdD1KMHQuc2xpY2UsdF90PUowdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGVfdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiByX3QoKXt2YXIgZT1lX3QsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRShRMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBuX3QoZSx0LHIpe3JldHVybiBlPXRfdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiBpX3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG9fdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIGFfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIHNfdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBsX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBjX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiB1X3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLGMyZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBjMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGhfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gZl90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LHBfdD0xZS02O2Z1bmN0aW9uIHUyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIGgyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGYyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIHAyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiBkMmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz91MmU6aDJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpmX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/cDJlOmYyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIscF90KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixwX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIoZDJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiBkX3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIG1fdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiB5MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIHYyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD92MmU6eTJlKSh0KX1mdW5jdGlvbiB4MmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/eDJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gdl90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gYjJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/YjJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24geF90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBiX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHdfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gU190KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgTV90PSIkIjtmdW5jdGlvbiB3MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBTMmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1NX3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1NX3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBFX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P1MyZTp3MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1TX3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiBUX3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBBX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gUF90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBJX3QoZSl7ZXx8KGU9TTJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBNMmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gTF90KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIGtfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFJfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTl90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBEX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24gT190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBFMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFQyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIEEyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBQMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIEkyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiB6X3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VDJlOkUyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP0kyZTpQMmU6ci5sb2NhbD9BMmU6QzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gTDJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGsyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFIyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBGX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0wyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9SMmU6azJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gTzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIEJfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP04yZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9PMmU6RDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBIX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IFZfdChlKX1mdW5jdGlvbiBWX3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUhfdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfVZfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gVV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gcV90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gejJlKGUpe3JldHVybiBmdW5jdGlvbigpe1VfdCh0aGlzLGUpfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cV90KHRoaXMsZSl9fWZ1bmN0aW9uIEIyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9VX3Q6cV90KSh0aGlzLGUpfX1mdW5jdGlvbiBHX3QoZSx0KXt2YXIgcj1IX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/QjJlOnQ/ejJlOkYyZSkocix0KSl9ZnVuY3Rpb24gSDJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBVMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9IMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1UyZTpWMmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBxMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBHMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gWV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3EyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VzJlOkcyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBZMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChZMmUpfWZ1bmN0aW9uIGoyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFhfdCgpe3JldHVybiB0aGlzLmVhY2goajJlKX1mdW5jdGlvbiAkX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBYMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBLX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9YMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gJDJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWl90KCl7cmV0dXJuIHRoaXMuZWFjaCgkMmUpfWZ1bmN0aW9uIEsyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gWjJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBKX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/WjJlOksyZSl9ZnVuY3Rpb24gUV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZXl0PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKHR5dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiB0eXR8fChleXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciB0eXQ7ZnVuY3Rpb24gSjJlKGUsdCxyKXtyZXR1cm4gZT1yeXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gcnl0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uIFEyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gdHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGV3ZShlLHQscil7dmFyIG49ZXl0Lmhhc093blByb3BlcnR5KGUudHlwZSk/SjJlOnJ5dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBueXQoZSx0LHIpe3ZhciBuPVEyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/ZXdlOnR3ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiBpeXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpeXQodGhpcyxlLHQpfX1mdW5jdGlvbiBud2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaXl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIG95dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP253ZTpyd2UpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gYXl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9YXl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0OnZfdCxzZWxlY3RBbGw6eF90LGZpbHRlcjpiX3QsZGF0YTpFX3QsZW50ZXI6d190LGV4aXQ6VF90LGpvaW46Q190LG1lcmdlOkFfdCxvcmRlcjpQX3Qsc29ydDpJX3QsY2FsbDpMX3Qsbm9kZXM6a190LG5vZGU6Ul90LHNpemU6Tl90LGVtcHR5OkRfdCxlYWNoOk9fdCxhdHRyOnpfdCxzdHlsZTpGX3QscHJvcGVydHk6Ql90LGNsYXNzZWQ6R190LHRleHQ6V190LGh0bWw6WV90LHJhaXNlOmpfdCxsb3dlcjpYX3QsYXBwZW5kOiRfdCxpbnNlcnQ6S190LHJlbW92ZTpaX3QsY2xvbmU6Sl90LGRhdHVtOlFfdCxvbjpueXQsZGlzcGF0Y2g6b3l0fTt2YXIgSWg9YXl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIHN5dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgaXdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKytpd2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBseXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBvd2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBhd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIHN3ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBsd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1vd2UsdD1hd2Uscj1zd2Usbj1sd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixjd2U9L14jKFswLTlhLWZdezMsOH0pJC8sdXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxod2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGZ3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLHB3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLGR3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksbXdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksY3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnV5dCxmb3JtYXRIZXg6dXl0LGZvcm1hdEhzbDpnd2UsZm9ybWF0UmdiOmh5dCx0b1N0cmluZzpoeXR9KTtmdW5jdGlvbiB1eXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBnd2UoKXtyZXR1cm4gZ3l0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGh5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PWN3ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2Z5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9dXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1od2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWZ3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1wd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ZHdlLmV4ZWMoZSkpP215dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW13ZS5leGVjKGUpKT9teXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpjeXQuaGFzT3duUHJvcGVydHkoZSk/Znl0KGN5dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gZnl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6cHl0LGZvcm1hdEhleDpweXQsZm9ybWF0UmdiOmR5dCx0b1N0cmluZzpkeXR9KSk7ZnVuY3Rpb24gcHl0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIGR5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBteXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBneXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9neXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgsX3l0PS45NjQyMix5eXQ9MSx2eXQ9LjgyNTIxLHh5dD00LzI5LG1iPTYvMjksYnl0PTMqbWIqbWIsX3dlPW1iKm1iKm1iO2Z1bmN0aW9uIHd5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gVHl0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikveXl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL195dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL3Z5dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gU3l0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3d5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9X3l0KnJZKHQpLGU9eXl0KnJZKGUpLHI9dnl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+X3dlP01hdGgucG93KGUsMS8zKTplL2J5dCt4eXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6Ynl0KihlLXh5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBNeXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXd5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gRXl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9NeXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/TXl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFR5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBUeXQodGhpcykucmdiKCl9fSkpO3ZhciBJeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LEN5dD1JRSpzTCxBeXQ9SUUqb1ksUHl0PW9ZKmFZLXNMKkl5dDtmdW5jdGlvbiB5d2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oUHl0Km4rQ3l0KnQtQXl0KnIpLyhQeXQrQ3l0LUF5dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95d2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKEl5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gTHl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gdndlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIGt5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3Z3ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/THl0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1reXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUnl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVJ5dChsTCksTnl0PVJ5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIER5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24geHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBid2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/YndlKGxbMF0ueCk6eHdlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIE95dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiB6eXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgRnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKkZ5dCxza2V3WDpNYXRoLmF0YW4obCkqRnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksQnl0LGdMO2Z1bmN0aW9uIEh5dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQnl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUJ5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBWeXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIFV5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9VXl0KEh5dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1VeXQoVnl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixxeXQ9NCx3d2U9MWUtMTI7ZnVuY3Rpb24gR3l0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIFN3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBNd2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx3d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrcXl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1xeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1HeXQoXyksQz1pLyhwWSpwKSooUypNd2Uoa0UqYitfKS1Td2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvR3l0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFd5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgWXl0PVd5dChVbSksanl0PVd5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBYeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyICR5dD1YeXQoVW0pLEt5dD1YeXQoS24pO2Z1bmN0aW9uIFp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEp5dD1aeXQoVW0pLEVfPVp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gUXl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsZXZ0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxydnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChydnQoRXdlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gRXdlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gdHZ0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxDd2UoKSxUXz0wfX1mdW5jdGlvbiBUd2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5ldnQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBDd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dCh0dnQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbChUd2UsZXZ0KSkseGI9MSxydnQodHZ0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBudnQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIEF3ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxQd2U9W10sb3Z0PTAsTUw9MSxFTD0yLFNMPTMsaXZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47SXdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpBd2UsdHdlZW46UHdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOm92dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPm92dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSXdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT1pdnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT1pdnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIGF2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEx3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIGt3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gc3Z0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/THdlOmt3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUndlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBOd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBEd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gT3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiB6d2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBGd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGx2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP0Z3ZTp6d2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Od2U6UndlKShyKTooci5sb2NhbD9Pd2U6RHdlKShyLG4sdCkpfWZ1bmN0aW9uIEJ3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gVndlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSHdlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBVd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZCd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIGN2dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9Wd2U6VXdlKShuLHQpKX1mdW5jdGlvbiBxd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gR3dlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIHV2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP3F3ZTpHd2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFd3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBZd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gaHZ0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/V3dlOll3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gandlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBmdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGp3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIHB2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBkdnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiAkd2UoZSx0LHIpe3ZhciBuLGksbz1Yd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gbXZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goJHdlKHIsZSx0KSl9ZnVuY3Rpb24gS3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBndnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsS3dlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gX3Z0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24geXZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBad2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIHZ2dCgpe3JldHVybiBuZXcgWndlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBKd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24geHZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFF3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHRTZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBlU2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9eHZ0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gYnZ0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxKd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UseHZ0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSx0U2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZVNlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxRd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIHJTZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gblNlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZyU2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gd3Z0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLG5TZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gaVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gb1NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFN2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/b1NlKGJiKHRoaXMsInRleHQiLGUpKTppU2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gYVNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBzU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmYVNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gTXZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxzU2UoZSkpfWZ1bmN0aW9uIEV2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIFR2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBsU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisrbFNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0Ol92dCxzZWxlY3RBbGw6eXZ0LGZpbHRlcjpwdnQsbWVyZ2U6ZHZ0LHNlbGVjdGlvbjp2dnQsdHJhbnNpdGlvbjpFdnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOm12dCxhdHRyOmx2dCxhdHRyVHdlZW46Y3Z0LHN0eWxlOmJ2dCxzdHlsZVR3ZWVuOnd2dCx0ZXh0OlN2dCx0ZXh0VHdlZW46TXZ0LHJlbW92ZTpndnQsdHdlZW46c3Z0LGRlbGF5OnV2dCxkdXJhdGlvbjpodnQsZWFzZTpmdnQsZW5kOlR2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBfU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIEh2dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8X1NlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1hdnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249SHZ0O3ZhciB5U2U9W251bGxdO2Z1bmN0aW9uIFZ2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSx5U2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFV2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBxdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEd2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltHdnQoZVswXSksR3Z0KGVbMV0pXX1mdW5jdGlvbiB2U2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LHhTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxXdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFl2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sYlNlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHdTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBTU2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBNU2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIEVTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24ganZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoeFNlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD1NU2Uscj1TU2Usbj1FU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgVXZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9xdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6YlNlW3ldLFM9ZT09PUhMP251bGw6d1NlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP3ZTZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIHF2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gV3Z0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9V3Z0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFl2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVl2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSxUU2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLFh2dD1NYXRoLlBJLFZFPVh2dC8yLEtZPVh2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIENTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uICR2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1DU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIEt2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixBU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBadnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1adnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5BU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPVp2dDtmdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIElTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gTFNlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBrU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBSU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9UFNlLHQ9SVNlLHI9TFNlLG49a1NlLGk9UlNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1LdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIE9TZT1BcnJheS5wcm90b3R5cGUsS0w9T1NlLnNsaWNlO2Z1bmN0aW9uIGYxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gcDF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGQxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9elNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gelNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoRlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gRlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gQlNlKGUsdCxyKSYmSFNlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBCU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gSFNlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBtMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGYxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSkscDF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKGQxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6bTF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBWU2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gVVNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHFTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGcxdCgpe3ZhciBlPVZTZSx0PVVTZSxyPXFTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIFhTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEQxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oWFNlKX1mdW5jdGlvbiAkU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbigkU2UpfXFFKCk7ZnVuY3Rpb24gS1NlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKEtTZSl9ZnVuY3Rpb24gejF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgRjF0PXoxdChDYiksQjF0PXoxdChBYik7ZnVuY3Rpb24gSDF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBaU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gVjF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihaU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgVTF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxxMXQ9YWooInRleHQvaHRtbCIpLEcxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFcxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFkxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIGoxdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIGoxdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBYMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpajF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uICQxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBLMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBaMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gSjF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiBRMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gdHh0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiByeHQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIG54dChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGl4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBveHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gYXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBzeHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gbHh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/b3h0OnQscj09bnVsbD9zeHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBjeHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1jeHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1jeHQobikpO3JldHVybiBlfTt6YS5hZGQ9WTF0O3phLmFkZEFsbD1YMXQ7emEuY292ZXI9JDF0O3phLmRhdGE9SzF0O3phLmV4dGVudD1aMXQ7emEuZmluZD1KMXQ7emEucmVtb3ZlPVExdDt6YS5yZW1vdmVBbGw9dHh0O3phLnJvb3Q9ZXh0O3phLnNpemU9cnh0O3phLnZpc2l0PW54dDt6YS52aXNpdEFmdGVyPWl4dDt6YS54PWF4dDt6YS55PWx4dDtmdW5jdGlvbiBKU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIFFTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gdXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsSlNlLFFTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gdDNlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIGh4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBmeHQoZSl7dmFyIHQ9dDNlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPWh4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PWh4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBweHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBkeHQoZSl7cmV0dXJuIGUueX12YXIgZTNlPTEwLHIzZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gbXh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PWUzZSpNYXRoLnNxcnQoZCkseD1kKnIzZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBneHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUscHh0LGR4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBfeHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24geXh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIHZ4dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiB4eHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIGJ4dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB3eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBuM2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PW4zZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBTeHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIE14dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDp4eHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczpNeHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgRXh0PUFycmF5LnByb3RvdHlwZS5tYXAsVHh0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOmJ4dChFeHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnd4dChFeHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPVN4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP1R4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1UeHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7Q3h0KHNrLGUsdGhpcy50KSxDeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIEN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZQeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmUHh0W2UudHlwZV0oZSx0KX12YXIgQXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxQeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7SXh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspSXh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gSXh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmQXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/QXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksTHh0LGt4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9aTNlLHB1LmxpbmVFbmQ9bzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIGkzZSgpe3B1LnBvaW50PWEzZX1mdW5jdGlvbiBvM2UoKXtSeHQoTHh0LGt4dCl9ZnVuY3Rpb24gYTNlKGUsdCl7cHUucG9pbnQ9Unh0LEx4dD1lLGt4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFJ4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gTnh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sRnh0LEJ4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6RHh0LGxpbmVFbmQ6T3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PVZ4dCxScC5saW5lU3RhcnQ9czNlLFJwLmxpbmVFbmQ9bDNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUR4dCxScC5saW5lRW5kPU94dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBIeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIER4dCgpe1JwLnBvaW50PUh4dH1mdW5jdGlvbiBPeHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIFZ4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIEZ4dD1lLEJ4dD10O3B1LnBvaW50KGUsdCksSHh0KGUsdCl9ZnVuY3Rpb24gczNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbDNlKCl7Vnh0KEZ4dCxCeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIGMzZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24genh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBVeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChjM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSx6eHQobixpWzBdKXx8enh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixXeHQsWXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OnF4dCxsaW5lRW5kOkd4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9ZjNlLGR1LmxpbmVFbmQ9cDNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PXF4dCxkdS5saW5lRW5kPUd4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBxeHQoKXtkdS5wb2ludD11M2V9ZnVuY3Rpb24gdTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PWgzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gaDNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gR3h0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gZjNlKCl7ZHUucG9pbnQ9ZDNlfWZ1bmN0aW9uIHAzZSgpe2p4dChXeHQsWXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiBkM2UoZSx0KXtXeHQ9ZSxZeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1qeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBqeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIFh4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKEt4dChlKSxaeHQodCxyKSk6S3h0KGUpOnR8fHI/Wnh0KHQscik6d2p9ZnVuY3Rpb24gJHh0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBLeHQoZSl7dmFyIHQ9JHh0KGUpO3JldHVybiB0LmludmVydD0keHQoLWUpLHR9ZnVuY3Rpb24gWnh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1KeHQoYSxpKSxvPUp4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEp4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiBReHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksdGJ0KG8pLHRidChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gdGJ0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxnM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihtM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIG0zZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBnM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxfM2UsdjNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gXzNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj15M2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiB5M2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIHYzZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBlYnQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07ZWJ0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiByYnQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDp4M2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24geDNlKCl7UmIucG9pbnQ9dzNlLFJiLmxpbmVFbmQ9YjNlfWZ1bmN0aW9uIGIzZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24gdzNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD1TM2V9ZnVuY3Rpb24gUzNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLE0zZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayhNM2UpfXZhciBuYnQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSxpYnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBvYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYob2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYWJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoYWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2J0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoc2J0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmaWJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/aWJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gYWJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gc2J0KGUsdCl7cmV0dXJuISFUayhlLm1hcChFM2UpLGxidCh0KSl9ZnVuY3Rpb24gRTNlKGUpe3JldHVybiBlPWUubWFwKGxidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGxidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBjYnQoZSx0KXtyZXR1cm4oZSYmbmJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/bmJ0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gdWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gaGJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPXVidChvLGksOTApLHA9aGJ0KHQsZSxfKSxkPXVidChzLGEsOTApLGc9aGJ0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBmYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIHBidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksZGJ0LG1idCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PVQzZSxYbS5saW5lRW5kPUEzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIFQzZSgpe1htLnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXtYbS5wb2ludD1nYnQsZGJ0PUxqPWUsbWJ0PWtqPXR9ZnVuY3Rpb24gZ2J0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIEEzZSgpe2didChkYnQsbWJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsUDNlPXtwb2ludDpJM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gSTNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1QM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLHZidCx4YnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpfYnQsbGluZUVuZDp5YnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVIzZSxtdS5saW5lRW5kPU4zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1fYnQsbXUubGluZUVuZD15YnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIF9idCgpe211LnBvaW50PUwzZX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1rM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBrM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24geWJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUjNlKCl7bXUucG9pbnQ9RDNlfWZ1bmN0aW9uIE4zZSgpe2JidCh2YnQseGJ0KX1mdW5jdGlvbiBEM2UoZSx0KXttdS5wb2ludD1iYnQscV8odmJ0PUJoPWUseGJ0PUhoPXQpfWZ1bmN0aW9uIGJidChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmosd2J0LFNidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9TzNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJk1idCh3YnQsU2J0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIE8zZShlLHQpe0hrLnBvaW50PU1idCx3YnQ9YTU9ZSxTYnQ9czU9dH1mdW5jdGlvbiBNYnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpFYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1FYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBFYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gVGJ0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIENidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBBYnQ9MTYsejNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0IzZShlLHQpOkYzZShlKX1mdW5jdGlvbiBGM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gQjNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8ejNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLEFidCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsQWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIEgzZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIFYzZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIFUzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIFBidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPUgzZShWM2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1QYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP1BidDpVM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIElidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gSWJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gcTNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBMYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1xM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBSYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIE5idCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gRGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIE9idCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiB6YnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsRzNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288RzNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBGYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBCYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gSGJ0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIFZidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gVWJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gcWJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEdidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVzNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFkzZShlKXtyZXR1cm4gZS5yZWR1Y2UoajNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIGozZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBYM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoJDNlLDApfWZ1bmN0aW9uICQzZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gSzNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBaM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFdidCgpe3ZhciBlPVczZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9WTNlKHApLGYueT1YM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9SzNlKG8pLGM9WjNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEozZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBZYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoSjNlKX1mdW5jdGlvbiBqYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gJGJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEtidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIFpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIEpidChlKXtmb3IodmFyIHQ9dGhpcyxyPVEzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFEzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gUWJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIHQydCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBlMnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gcjJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9ZU1lKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gdE1lKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUock1lKX1mdW5jdGlvbiBlTWUoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gck1lKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OllidCxlYWNoOmpidCxlYWNoQWZ0ZXI6JGJ0LGVhY2hCZWZvcmU6WGJ0LHN1bTpLYnQsc29ydDpaYnQscGF0aDpKYnQsYW5jZXN0b3JzOlFidCxkZXNjZW5kYW50czp0MnQsbGVhdmVzOmUydCxsaW5rczpyMnQsY29weTp0TWV9O3ZhciBuMnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGkydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPWkydChuMnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZvMnQobyxpKT8rK3Q6KG89aU1lKG49bk1lKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gbk1lKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihhMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIG8ydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIW8ydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGlNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gb01lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIGEydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIG9NZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBhMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBzMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBsMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBjMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO3MydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7czJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGwydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGwydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1jMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPWMydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gdTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIGgydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBhTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBkMnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoZjJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUocDJ0KDEpKTpvLmVhY2hCZWZvcmUoZjJ0KGFNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKHAydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1oMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGYydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBwMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGcydD0iJCIsc01lPXtkZXB0aDotMX0sXzJ0PXt9O2Z1bmN0aW9uIGxNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBjTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24geTJ0KCl7dmFyIGU9bE1lLHQ9Y01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWcydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9fMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZzJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09XzJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9c01lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiB1TWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIGhNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBmTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gcE1lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiBkTWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gdjJ0KCl7dmFyIGU9dU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9ZE1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2ZNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoaE1lKHBNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiB4MnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBiMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB3MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciBTMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24gTTJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBFMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIFQydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gbU1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIEMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZUMnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gQTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQobU1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1DMnQobiksYT1DMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gUDJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBJMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgTDJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBrMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFIydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBOMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgRDJ0PUFycmF5LnByb3RvdHlwZSxYXz1EMnQubWFwLGxjPUQydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBPMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTzJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gTzJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIHoydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIEYydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTp6MnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBCMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBnTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gX01lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1GMnQsdD1GMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9fTWU6Z01lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9QjJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0IydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gSDJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiBWMnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIHZNZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIHhNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gYk1lKGUpe3JldHVybiBlPT09MTA/eE1lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHdNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gVTJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoSDJ0LFYydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9d01lKG4pLG89Yk1lKG4pLHIoKVswXTwwPyhpPVUydChpKSxvPVUydChvKSxlKHlNZSx2TWUpKTplKEgydCxWMnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIHEydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBHMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUocTJ0KHQpLEcydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShxMnQodD0rbiksRzJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVzJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiBTTWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gTU1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2UoU01lLE1NZSk6ZShXMnQociksVzJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gWTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBqMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1qMnQsc1g9ajJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1YMnQsJDJ0PVgydC5yYW5nZTt2YXIgSzJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PUsydCxaMnQ9SzJ0LnJhbmdlO3ZhciBKMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PUoydCxRMnQ9SjJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSx0d3Q9cnkucmFuZ2UsZXd0PWxYLnJhbmdlLHJ3dD1jWC5yYW5nZSxud3Q9enAucmFuZ2UsaXd0PXVYLnJhbmdlLG93dD1oWC5yYW5nZTt2YXIgYXd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PWF3dCxzd3Q9YXd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGx3dD1wWC5yYW5nZTt2YXIgY3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9Y3d0LHV3dD1jd3QucmFuZ2U7dmFyIGh3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PWh3dCxmd3Q9aHd0LnJhbmdlO3ZhciBwd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9cHd0LGR3dD1wd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsbXd0PW95LnJhbmdlLGd3dD1kWC5yYW5nZSxfd3Q9bVgucmFuZ2UseXd0PUZwLnJhbmdlLHZ3dD1nWC5yYW5nZSx4d3Q9X1gucmFuZ2U7dmFyIGJ3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1id3Qsd3d0PWJ3dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCxTd3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpQd3QsZTpQd3QsZjpqTWUsZzpuRWUsRzpvRWUsSDpHTWUsSTpXTWUsajpZTWUsTDpOd3QsbTpYTWUsTTokTWUscDpzdCxxOlN0LFE6a3d0LHM6Und0LFM6S01lLHU6Wk1lLFU6Sk1lLFY6UU1lLHc6dEVlLFc6ZUVlLHg6bnVsbCxYOm51bGwseTpyRWUsWTppRWUsWjphRWUsIiUiOkx3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpJd3QsZTpJd3QsZjp1RWUsZzp4RWUsRzp3RWUsSDpzRWUsSTpsRWUsajpjRWUsTDpPd3QsbTpoRWUsTTpmRWUscDpfdCxxOmN0LFE6a3d0LHM6Und0LFM6cEVlLHU6ZEVlLFU6bUVlLFY6Z0VlLHc6X0VlLFc6eUVlLHg6bnVsbCxYOm51bGwseTp2RWUsWTpiRWUsWjpTRWUsIiUiOkx3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOkN3dCxlOkN3dCxmOkhNZSxnOlR3dCxHOkV3dCxIOkF3dCxJOkF3dCxqOk9NZSxMOkJNZSxtOkRNZSxNOnpNZSxwOkQscTpOTWUsUTpVTWUsczpxTWUsUzpGTWUsdTpQTWUsVTpJTWUsVjpMTWUsdzpBTWUsVzprTWUseDp6LFg6VSx5OlR3dCxZOkV3dCxaOlJNZSwiJSI6Vk1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9TXd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIE13dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciBNd3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLEVNZT0vXiUvLFRNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gQ01lKGUpe3JldHVybiBlLnJlcGxhY2UoVE1lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKENNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSU1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBETWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQk1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBWTWUoZSx0LHIpe3ZhciBuPUVNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFVNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHFNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFB3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEdNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBXTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFlNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gTnd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBqTWUoZSx0KXtyZXR1cm4gTnd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gWE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gJE1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gS01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWk1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBKTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIER3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uIFFNZShlLHQpe3JldHVybiBlPUR3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHRFZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBlRWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIHJFZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gbkVlKGUsdCl7cmV0dXJuIGU9RHd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBpRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIG9FZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gYUVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBJd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBzRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbEVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBjRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIE93dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gdUVlKGUsdCl7cmV0dXJuIE93dChlLHQpKyIwMDAifWZ1bmN0aW9uIGhFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGZFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHBFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGRFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gbUVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB6d3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBnRWUoZSx0KXtyZXR1cm4gZT16d3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBfRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24geUVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiB2RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIHhFZShlLHQpe3JldHVybiBlPXp3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gYkVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB3RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIFNFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gTHd0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGt3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBSd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24gTUVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIEVFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9NRWU6YXkoU1gpLEZ3dD1FRWU7ZnVuY3Rpb24gVEVlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIENFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP1RFZTpFNShTWCksQnd0PUNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LEFFZT1QNSo3LEh3dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gUEVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsQUVlXSxbdCwxLEh3dF0sW3QsMywzKkh3dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssSUVlKSk6aCgpLm1hcChQRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBWd3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIFV3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIHF3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEd3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFd3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFl3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIGp3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIFh3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyICR3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIEt3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIFp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIEp3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLFF3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksdFN0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxlU3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLHJTdD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksblN0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSxpU3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLG9TdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksYVN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxzU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGxTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksY1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSx1U3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLGhTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksZlN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxwU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLGRTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksbVN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxnU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLF9TdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSkseVN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSx2U3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLHhTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksYlN0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx3U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLFNTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSksTVN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxFU3Q9SWUoZSQpO2Z1bmN0aW9uIFRTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgQ1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgQVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksUFN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIElTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxMRWU9TWF0aC5QSS8zLGtFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBMU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStMRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUra0VlKSkqdCxSOCsiIn1mdW5jdGlvbiBrU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUlN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksTlN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksRFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksT1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLHpTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gRlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBORWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gREVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIHpFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBGRWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koelN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1SRWUsdD1ORWUscj1xZSgwKSxuPW51bGwsaT1ERWUsbz1PRWUsYT16RWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9RkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KEZTdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBIU3QoZSl7dGhpcy5fY29udGV4dD1lfUhTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IEhTdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gVlN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIFVTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBxU3QoKXt2YXIgZT1VU3QsdD1WU3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gR1N0KGUpe3RoaXMuX2N1cnZlPWV9R1N0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEdTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEJFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gSEVlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1CRWUscj1IRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIFZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIFVFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHFFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gV1N0KCl7cmV0dXJuIGEkKFZFZSl9ZnVuY3Rpb24gWVN0KCl7cmV0dXJuIGEkKFVFZSl9ZnVuY3Rpb24galN0KCl7dmFyIGU9YSQocUVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBYU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxHRWU9WFN0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9HRWUpLG49cipYU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgV0VlPS44OTA4MTMwOTE1MjkyODUyLCRTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksWUVlPU1hdGguc2luKGhjLzEwKSokU3QsakVlPS1NYXRoLmNvcyhoYy8xMCkqJFN0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqV0VlKSxuPVlFZSpyLGk9akVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxYRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L1hFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIEtTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIFpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gSlN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1KU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiBRU3QoZSl7cmV0dXJuIG5ldyBKU3QoZSl9ZnVuY3Rpb24gdDN0KGUpe3RoaXMuX2NvbnRleHQ9ZX10M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gZTN0KGUpe3JldHVybiBuZXcgdDN0KGUpfWZ1bmN0aW9uIHIzdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9cjN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgbjN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyByM3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgaTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgbzN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGEzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIHMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fWMzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciB1M3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBjM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBoM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1oM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGYzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGgzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIHAzdChlKXt0aGlzLl9jb250ZXh0PWV9cDN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gZDN0KGUpe3JldHVybiBuZXcgcDN0KGUpfWZ1bmN0aW9uIG0zdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZzN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKG0zdChvKSttM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBfM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAsXzN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLF8zdCh0aGlzLHI9ZzN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZzN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24geTN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IHYzdChlKX0oeTN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiB2M3QoZSl7dGhpcy5fY29udGV4dD1lfXYzdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyB5M3QoZSl9ZnVuY3Rpb24gUzN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1TM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49dzN0KGUpLGk9dzN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB3M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBNM3QoZSl7cmV0dXJuIG5ldyBTM3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBFM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiBUM3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIEMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiAkRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBBM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49JEVlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIFAzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBJM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEwzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIGszdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoS0VlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBLRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gTjN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEQzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBPM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gejN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9RjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289RjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBGM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIFpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gSkVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEIzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIUpFZShvPXdvW2ldLGUsdCxyLG4pfHwhWkVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gSDN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gUUVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIHQ1ZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gVjN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09UUVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIFUzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9dDVlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIHEzdD1bXSxRODtmdW5jdGlvbiBlNWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUczdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PXEzdC5wb3AoKXx8bmV3IGU1ZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxxM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgWTN0PVtdO2Z1bmN0aW9uIHI1ZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBXM3QoZSl7dmFyIHQ9WTN0LnBvcCgpfHxuZXcgcjVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxZM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBqM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBYM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89JDN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LW41ZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfUgzdChlKTt2YXIgbD1XM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1XM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uICQzdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIG41ZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiAkM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEczdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiBpNWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIG81ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChvNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKFgzdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKWozdChvLmFyYyk7ZWxzZSBicmVhaztpZihWM3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtCM3QoYSxzLGwsYyksVTN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZpNWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gSzN0KCl7dmFyIGU9TzN0LHQ9ejN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBhNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBzNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIFozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gbDVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gYzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHU1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1hNWUsdD1zNWUscj11NWUsbj1sNWUsaT1jNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixaM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLFozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBKM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e0ozdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBoNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPWg1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uIFEzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49UTN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHZRcj1RM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiB0TXQoZSl7bGV0IHQ9cDVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBwNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIHRNdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke2Q1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiBkNWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIHJNdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9ck10LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHttNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBtNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgJEt0PUVlKE9lKCksMSksWlduPUVlKHdsKCksMSk7dmFyIERLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9REt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgYnFlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx3cWU9NCxtQj0zLGdCPTIwLF9CPTQsT0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt3cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiBTcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiBNcWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiBTcWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiBNcWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBFcWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgVHFlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gQ3FlKGUpe2xldCB0PUVxZShlKSxyPVRxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9Q3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgekt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgQXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07ekt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLEFxZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIEhLdD0xZTQsVkt0PS4wMDEsVUt0PXhuKCIuMn5lIiksUHFlPXhuKCIuNH5yIiksRkt0PXhuKCIsfiIpO2Z1bmN0aW9uIEJLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOlBxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkJLdCxmb3JtYXRTaG9ydDpCS3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PUhLdHx8dDxWS3Q/VUt0KGUpOkZLdChlKX0sZm9ybWF0TG9uZzpGS3R9LGlXbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBvV249eG4oIjAuM35zIiksYVduPXhuKCIsLjN+ZiIpO3ZhciBJcWU9MWUzLExxZT02MCpJcWUsa3FlPTYwKkxxZSxScWU9MjQqa3FlLHNXbj0zNjUqUnFlLGxXbj14bigiLjR+Iik7dmFyIE5xZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQscUt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBOcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEdLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgRHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqRHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9cUt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBHS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBXS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFdLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgWUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoT0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9WUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9ZS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIFhLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIgT3FlPVd1KGUwKSxqS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6T3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIGpLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+akt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtYS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSx6cWU9MCxGcWU9JEt0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh6cWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLEZxZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pk94ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+Umd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5OZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+RnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT56eGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PnEwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PnQyZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+ZTJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT5pMmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PlpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PkpiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+cjJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT4kYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+QjB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+bzJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+UWJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5uMmUsc2V0U3RyaW5nOigpPT5LYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIEtLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLFpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIG5sZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLHRjcj0uMyxlY3I9WzEsNWU2XSxYc2U9S18oKS5leHBvbmVudCh0Y3IpLmRvbWFpbihlY3IpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgS3NlPTIwO2Z1bmN0aW9uIHJjcihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtyY3IoZSk/KFpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihLS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIFpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxLc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LEtzZSl9KX1mdW5jdGlvbiBKc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uIFFzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBuY3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9bmNyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gJHNlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiB0bGUoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKCRzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2Ijskc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIixpbGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBvbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIGljcj0iX291dHB1dF9zaGFwZXMiLG9jcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPWNjcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1hY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9c2NyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBhbGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gYWNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT1pY3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemV8fDApKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBzY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1vY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgbGNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBjY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2gobGNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBzbGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGxsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9ZWxlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1lbGUodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9dWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IG5sZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gZWxlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiB1Y3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBybGUoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gY2xlKGUsdCl7bGV0IHI9cmxlKGUpLG49cmxlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiB1bGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBobGUoZSx0KXtsZXQgcj1mY3IoZSksbj1wY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIGhjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGZjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1oY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBwY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fGRjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gZGNyKGUsdCl7aWYoIWNsZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFtY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG1jcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBmbGUobyx0LHIsbiksZmxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9aGxlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gZmxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLF9jcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmbWxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9Pnt5Y3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBwbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gZGxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gX2NyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiB5Y3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBtbGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmbWxlKGgsdCxyLG4saSxvKX0pO2xldCBzPXZjcihhKSxjPShvP2Jjcjp4Y3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiB2Y3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24geGNyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBiY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sd2NyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP1hzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe3lsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7Z2xlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtfbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmUGNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh3Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBnbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gX2xlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiBTY3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzp5bGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIHlsZShlLHQpe2UuY29yZUdyYXBoJiZTY3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwoX2xlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZ2xlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIHZsZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIE1jcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gRWNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmdmxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIFRjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJnZsZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gQWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIFBjcihlLHQpe01jcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZFY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZUY3IoZSksdCYmQ2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJkFjcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIHhsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciBNbGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkxjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/a2NyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZSY3IoZSl9ZnVuY3Rpb24gSWNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIExjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8SWNyKHIpLE5jcihyKX0pfWZ1bmN0aW9uIEVsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTtNbGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZEY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09U2xlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT1TbGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBrY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LEVsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUmNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsRWxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBOY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9PmJsZSh1KSksWmUuZWFjaChyLHU9PmJsZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIGJsZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gd2xlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIERjcihlKXtsZXQgdD13bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj13bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gU2xlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLE9jcj0zMjAsemNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gQ2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIEFsZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLU9jcixmPXUudG9wK3UuaGVpZ2h0LXpjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBQbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIElsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIExsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24ga2xlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIFRsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIEZjcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBCY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1GY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9VGxlKGQubWluLGspLEI9VGxlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFJsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtCY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBIY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1IY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIFVjcj0iXHhENyIsTmxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxxY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrb2xlK2Uud31mdW5jdGlvbiB6bGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7V2NyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1ljcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oVWNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIERsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBPbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPURsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke05sZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtObGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5xY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBHY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1PbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9T2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBXY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gR2NyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBZY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO1ZsZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTtWbGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9R2xlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJlhjcihjLG8sciksSGxlKGMsbyxyKSxqY3IoYSxvLHIpO2xldCB1PUtjcihhLG8scik7SGxlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLEpjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIGpjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBCbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIFhjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLGtsZShuLHQpfWZ1bmN0aW9uIEhsZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixVbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBVbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiAkY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gdWxlKCRjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gS2NyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9WmNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gcWxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIHFsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PXRsZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gWmNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBHbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFdsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gSmNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtMbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksQmxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxCbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Kc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBZbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPWpsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9WGxlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD10dXIodCxzKTtldXIoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBqbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQoamxlKG8sdCkpfSkscn1mdW5jdGlvbiBYbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPVhsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmUWNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiBRY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIGV1cihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBWbGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyhpdXIoYSxvKSxudXIoYSxvKSk6JGxlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitydXIoby5hbm5vdGF0aW9uVHlwZSkrIiAiK1dsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTthdXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZvdXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHJ1cihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIG51cihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9R2xlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIGl1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiAkbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gJGxlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBxbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBvdXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sVWxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIGF1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLHpsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gUGxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgc3VyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8c3VyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBLbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7QWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxJbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsQ2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1JsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1lsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9S2xlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKGFsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxwbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PVFzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj14bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksZGxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09aWxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBjdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1jdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIFpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgSmxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7SmxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLFFsZT1bXSx1dXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKFFsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gUWxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiB1dXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIGh1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIHRjZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBlY2UoZSx0KXtyZXR1cm4gWnNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6dGNlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2d1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIHJjZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgdGNlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pm11cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gZnVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBwdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LGR1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gbXVyKGUpe3JldHVybiBuY2UoZSxwdXIpfWZ1bmN0aW9uIGd1cihlKXtyZXR1cm4gbmNlKGUsZHVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gbmNlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1odXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gZnVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBvY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIHJjZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gbGxlKGMsc2xlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7WmxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7ZWNlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBvY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIGFjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhhY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKGFjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIHl1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiB2dXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIHNjZShlKXtsZXQgdD1lLm1hcCh5dXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczp2dXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPXNjZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgX2NlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PlB1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PmhjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+dWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9Pm1jZSxpc051bGxPclVuZGVmaW5lZDooKT0+VHVyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+ZmNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+bGNlLG51bU1ldHJpY3M6KCk9PmNjZSxudW1WaXNpYmxlQ29sdW1uczooKT0+d3VyLG51bVZpc2libGVIUGFyYW1zOigpPT5wY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PmRjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmdjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+U3VyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pk11cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5BdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+Q3VyLHJvdGF0ZVN0cjooKT0+RXVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+YnVyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gbGNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGxjZShlKStjY2UoZSl9ZnVuY3Rpb24gdWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gZmNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9oY2UoZSx0LHIpOmZjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIGJ1cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIHBjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gZGNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB3dXIoZSl7cmV0dXJuIHBjZShlKStkY2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gU3VyKGUsdCl7cmV0dXJuIGIwKHVjZShlLHQpKX1mdW5jdGlvbiBNdXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBtY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/bWNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09bnVsbD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBnY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gRXVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIFR1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBDdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBBdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBnY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBQdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIEl1cj0xMCxRbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25maWd1cmF0aW9uPXtzY2hlbWE6e2hwYXJhbUNvbHVtbnM6QXJyYXkoKSxtZXRyaWNDb2x1bW5zOkFycmF5KCl9LGNvbHVtbnNWaXNpYmlsaXR5OkFycmF5KCksdmlzaWJsZVNjaGVtYTp7aHBhcmFtSW5mb3M6QXJyYXkoKSxtZXRyaWNJbmZvczpBcnJheSgpfX0sdGhpcy5zZXNzaW9uR3JvdXBzPVtdLHRoaXMuZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXM9ITEsdGhpcy5kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcz0hMSx0aGlzLl9zdGF0dXNlcz1be3ZhbHVlOiJTVEFUVVNfVU5LTk9XTiIsZGlzcGxheU5hbWU6IlVua25vd24iLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX1NVQ0NFU1MiLGRpc3BsYXlOYW1lOiJTdWNjZXNzIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19GQUlMVVJFIixkaXNwbGF5TmFtZToiRmFpbHVyZSIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfUlVOTklORyIsZGlzcGxheU5hbWU6IlJ1bm5pbmciLGFsbG93ZWQ6ITB9XSx0aGlzLl9nZXRFeHBlcmltZW50UmVzb2x2ZWQ9bmV3IFByb21pc2UodD0+e3RoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50PXR9KSx0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcGFnZVNpemVJbnB1dD17dmFsdWU6IjEwMCIsaW52YWxpZDohMX0sdGhpcy5fcGFnZU51bWJlcklucHV0PXt2YWx1ZToiMSIsaW52YWxpZDohMX0sdGhpcy5fcGFnZUNvdW50U3RyPSI/Iix0aGlzLl9ocGFyYW1OYW1lPUZkLHRoaXMuX21ldHJpY05hbWU9UXUsdGhpcy5fcHJldHR5UHJpbnQ9YjB9cmVsb2FkKCl7dGhpcy5fcXVlcnlTZXJ2ZXIoKX1fY3N2VXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImNzdiIpfV9qc29uVXJsKHQscil7cmV0dXJuIHRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIsImpzb24iKX1fbGF0ZXhVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwibGF0ZXgiKX1fZG93bmxvYWREYXRhVXJsKHQscixuKXtsZXQgaT1yLmNvbHVtbnNWaXNpYmlsaXR5O3JldHVybiB0aGlzLmJhY2tlbmQuZ2V0RG93bmxvYWRVcmwobix0LGkpfV9jb21wdXRlRXhwZXJpbWVudEFuZFJlbGF0ZWRQcm9wcygpe2xldCB0PWNzO2lmKHQuaXNOdWxsT3JVbmRlZmluZWQodGhpcy5iYWNrZW5kKXx8dC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmV4cGVyaW1lbnROYW1lKSlyZXR1cm47bGV0IHI9e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWV9O3RoaXMuYmFja2VuZC5nZXRFeHBlcmltZW50KHIpLnRoZW4obj0+e19jZS5pc0VxdWFsKG4sdGhpcy5fZXhwZXJpbWVudCl8fCh0aGlzLnNldCgiX2V4cGVyaW1lbnQiLG4pLHRoaXMuX2NvbXB1dGVIUGFyYW1zKCksdGhpcy5fY29tcHV0ZU1ldHJpY3MoKSx0aGlzLl9xdWVyeVNlcnZlcigpLHRoaXMuX3Jlc29sdmVHZXRFeHBlcmltZW50KCkpfSkuZmluYWxseSgoKT0+e3RoaXMuX2NvbXB1dGVEYXRhRm91bmQoKX0pfV9jb21wdXRlRGF0YUZvdW5kKCl7bGV0IHQ9Qm9vbGVhbih0aGlzLl9leHBlcmltZW50JiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zJiZ0aGlzLl9leHBlcmltZW50LmhwYXJhbUluZm9zLmxlbmd0aD4wKTt0aGlzLnNldCgiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHQpLHRoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsIXQpfV9jb21wdXRlSFBhcmFtcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MuZm9yRWFjaChpPT57bGV0IG89e2luZm86aSxkaXNwbGF5ZWQ6ITEsZmlsdGVyOnt9fTtvLmluZm8uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIik/by5pbmZvLmRvbWFpbkRpc2NyZXRlLmxlbmd0aDxJdXI/KG8uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVtdLG8uaW5mby5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGE9PntvLmZpbHRlci5kb21haW5EaXNjcmV0ZS5wdXNoKHt2YWx1ZTphLGNoZWNrZWQ6ITB9KX0pKTpvLmZpbHRlci5yZWdleHA9IiI6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQiP28uZmlsdGVyLmludGVydmFsPXttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19OmNvbnNvbGUud2FybigiY2Fubm90IHByb2Nlc3MgZG9tYWluIHR5cGUgJXMgd2l0aG91dCBkaXNjcmV0ZSBkb21haW4gdmFsdWVzIixvLmluZm8udHlwZSksdC5wdXNoKG8pfSksdC5zb3J0KChpLG8pPT5pLmluZm8uZGlmZmVycz09PW8uaW5mby5kaWZmZXJzPzA6aS5pbmZvLmRpZmZlcnM/LTE6MSk7bGV0IG49TWF0aC5taW4oNSx0Lmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxuO2krKyl0W2ldLmRpc3BsYXllZD0hMDt0aGlzLnNldCgiX2hwYXJhbXMiLHQpfV9jb21wdXRlTWV0cmljcygpe2xldCB0PVtdO3RoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MuZm9yRWFjaCgobixpKT0+e2xldCBvPXtpbmZvOm4sZmlsdGVyOntpbnRlcnZhbDp7bWluOnt2YWx1ZToiIixpbnZhbGlkOiExfSxtYXg6e3ZhbHVlOiIiLGludmFsaWQ6ITF9fX0sZGlzcGxheWVkOmk8NX07dC5wdXNoKG8pfSksdGhpcy5zZXQoIl9tZXRyaWNzIix0KX1fY29tcHV0ZVNjaGVtYSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz97aHBhcmFtQ29sdW1uczpbXSxtZXRyaWNDb2x1bW5zOltdfTp7aHBhcmFtQ29sdW1uczp0aGlzLl9ocGFyYW1zLm1hcCh0PT4oe2hwYXJhbUluZm86dC5pbmZvfSkpLG1ldHJpY0NvbHVtbnM6dGhpcy5fbWV0cmljcy5tYXAodD0+KHttZXRyaWNJbmZvOnQuaW5mb30pKX19X3VwZGF0ZUNvbmZpZ3VyYXRpb24oKXt0aGlzLmRlYm91bmNlKCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsKCk9Pnt0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp0aGlzLl9jb21wdXRlU2NoZW1hKCksY29sdW1uc1Zpc2liaWxpdHk6dGhpcy5fY29tcHV0ZUNvbHVtbnNWaXNpYmlsaXR5KCksdmlzaWJsZVNjaGVtYTp0aGlzLl9jb21wdXRlVmlzaWJsZVNjaGVtYSgpfX0pfV9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKXtyZXR1cm4hdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3M/W106dGhpcy5faHBhcmFtcy5tYXAodD0+dC5kaXNwbGF5ZWQpLmNvbmNhdCh0aGlzLl9tZXRyaWNzLm1hcCh0PT50LmRpc3BsYXllZCkpfV9jb21wdXRlVmlzaWJsZVNjaGVtYSgpe2lmKCF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcylyZXR1cm57aHBhcmFtSW5mb3M6W10sbWV0cmljSW5mb3M6W119O2xldCB0PXRoaXMuX2hwYXJhbXMuZmlsdGVyKG49Pm4uZGlzcGxheWVkKS5tYXAobj0+bi5pbmZvKSxyPXRoaXMuX21ldHJpY3MuZmlsdGVyKG49Pm4uZGlzcGxheWVkKS5tYXAobj0+bi5pbmZvKTtyZXR1cm57aHBhcmFtSW5mb3M6dCxtZXRyaWNJbmZvczpyfX1faGFzUmVnZXhwRmlsdGVyKHQpe3JldHVybiB0LmZpbHRlci5yZWdleHAhPT12b2lkIDB9X3F1ZXJ5U2VydmVyKCl7dGhpcy5kZWJvdW5jZSgicXVlcnlTZXJ2ZXIiLCgpPT50aGlzLl9xdWVyeVNlcnZlck5vRGVib3VuY2UoKSwxMDApfV9xdWVyeVNlcnZlck5vRGVib3VuY2UoKXtpZighKCF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcykpcmV0dXJuIHRoaXMuX3NlbmRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKS50aGVuKHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKCh7dmFsdWU6dCxjYW5jZWxsZWQ6cn0pPT57aWYoIXIpe2lmKHQudG90YWxTaXplPj0wKXtsZXQgbj0rdGhpcy5fcGFnZVNpemVJbnB1dC52YWx1ZTt0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsU3RyaW5nKE1hdGguY2VpbCh0LnRvdGFsU2l6ZS9uKSkpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHQudG90YWxTaXplKX1lbHNlIHRoaXMuc2V0KCJfcGFnZUNvdW50U3RyIiwiPyIpLHRoaXMuc2V0KCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLCJVbmtub3duIik7cGN0KHRoaXMsInNlc3Npb25Hcm91cHMiLHQuc2Vzc2lvbkdyb3Vwcyl9fSkpfV9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCl7bGV0IHQ9dGhpcy5fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKTtpZih0IT09bnVsbClyZXR1cm4gdGhpcy5zZXQoIl9zZXNzaW9uR3JvdXBzUmVxdWVzdCIsdCksdGhpcy5fbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5iYWNrZW5kLmxpc3RTZXNzaW9uR3JvdXBzKHQpfV9idWlsZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMscj0hMDtmdW5jdGlvbiBuKGgpe3JldHVybiBoLm1pbi52YWx1ZSE9PSIifHxoLm1heC52YWx1ZSE9PSIifWZ1bmN0aW9uIGkoaCl7bGV0IGY9dC5nZXQoaCsiLm1pbi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGYhPT12b2lkIDApO2xldCBwPWY9PT0iIj8iLUluZmluaXR5IjorZixkPWlzTmFOKHApO3Quc2V0KGgrIi5taW4uaW52YWxpZCIsZCkscj1yJiYhZDtsZXQgZz10LmdldChoKyIubWF4LnZhbHVlIik7Y29uc29sZS5hc3NlcnQoZyE9PXZvaWQgMCk7bGV0IF89Zz09PSIiPyJJbmZpbml0eSI6K2cseT1pc05hTihfKTtyZXR1cm4gdC5zZXQoaCsiLm1heC5pbnZhbGlkIix5KSxyPXImJiF5LGR8fHk/bnVsbDp7bWluVmFsdWU6cCxtYXhWYWx1ZTpffX1mdW5jdGlvbiBvKGgpe2xldCBmPXQuZ2V0KGgrIi52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGYhPT12b2lkIDApO2xldCBwPStmLGQ9TnVtYmVyLmlzSW50ZWdlcihwKSYmcD4wO3JldHVybiB0LnNldChoKyIuaW52YWxpZCIsIWQpLHI9ciYmZCxkP3A6bnVsbH1sZXQgYT10aGlzLl9zdGF0dXNlcy5maWx0ZXIoaD0+aC5hbGxvd2VkKS5tYXAoaD0+aC52YWx1ZSkscz1bXTtpZih0aGlzLl9ocGFyYW1zLmZvckVhY2goKGgsZik9PntsZXQgcD17aHBhcmFtOmguaW5mby5uYW1lfTtoLmZpbHRlci5kb21haW5EaXNjcmV0ZT9oLmZpbHRlci5kb21haW5EaXNjcmV0ZS5ldmVyeShnPT5nLmNoZWNrZWQpfHwocC5maWx0ZXJEaXNjcmV0ZT1bXSxoLmZpbHRlci5kb21haW5EaXNjcmV0ZS5mb3JFYWNoKGc9PntnLmNoZWNrZWQmJnAuZmlsdGVyRGlzY3JldGUucHVzaChnLnZhbHVlKX0pKTpoLmZpbHRlci5pbnRlcnZhbD9uKGguZmlsdGVyLmludGVydmFsKSYmKHAuZmlsdGVySW50ZXJ2YWw9aSgiX2hwYXJhbXMuIitmKyIuZmlsdGVyLmludGVydmFsIikpOmguZmlsdGVyLnJlZ2V4cCYmKHAuZmlsdGVyUmVnZXhwPWguZmlsdGVyLnJlZ2V4cCkscy5wdXNoKHApfSksdGhpcy5fbWV0cmljcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e21ldHJpYzpoLmluZm8ubmFtZX07bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9tZXRyaWNzLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKSxzLnB1c2gocCl9KSx0aGlzLl9zb3J0QnlJbmRleCE9PXZvaWQgMCYmdGhpcy5fc29ydERpcmVjdGlvbiE9PXZvaWQgMCl7aWYoISh0aGlzLl9zb3J0QnlJbmRleCBpbiBzKSlyZXR1cm4gY29uc29sZS5lcnJvcigiTm8gY29sdW1uIGluIGNvbFBhcmFtcyB3aXRoIGluZGV4IHNvcnRCeUluZGV4OiAlcyIsdGhpcy5fc29ydEJ5SW5kZXgpLG51bGw7c1t0aGlzLl9zb3J0QnlJbmRleF0ub3JkZXI9dGhpcy5fc29ydERpcmVjdGlvbj09PTA/Ik9SREVSX0FTQyI6Ik9SREVSX0RFU0MifWxldCBsPW8oIl9wYWdlTnVtYmVySW5wdXQiKXx8MCxjPW8oIl9wYWdlU2l6ZUlucHV0Iil8fDA7aWYoIXIpcmV0dXJuIG51bGw7bGV0IHU9YyoobC0xKTtyZXR1cm57ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZSxhbGxvd2VkU3RhdHVzZXM6YSxjb2xQYXJhbXM6cyxzdGFydEluZGV4OnUsc2xpY2VTaXplOmN9fV9tZXRyaWNTb3J0QnlJbmRleCh0KXtyZXR1cm4gdCt0aGlzLl9ocGFyYW1zLmxlbmd0aH19O1FuLnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBoeXBlcnBhcmFtZXRlcnMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkh5cGVycGFyYW1ldGVyczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X2hwYXJhbXN9fSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJocGFyYW0iPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e2hwYXJhbS5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0iaHBhcmFtLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8IS0tIFByZWNpc2VseSBvbmUgb2YgdGhlIHRlbXBsYXRlcyBiZWxvdyB3aWxsIGJlIHN0YW1wZWQuLS0+CiAgICAgICAgICAgIDwhLS0gMS4gQSBsaXN0IG9mIGNoZWNrYm94ZXMgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tocGFyYW0uZmlsdGVyLmRvbWFpbkRpc2NyZXRlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7aXRlbS5jaGVja2VkfX0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaXNjcmV0ZS12YWx1ZS1jaGVja2JveCIKICAgICAgICAgICAgICAgICAgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFtbX3ByZXR0eVByaW50KGl0ZW0udmFsdWUpXV0KICAgICAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAyLiBBIG51bWVyaWMgaW50ZXJ2YWwgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1pbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iLWluZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9Ik1heCIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LnZhbHVlfX0iCiAgICAgICAgICAgICAgICBhbGxvd2VkX3BhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgICBlcnJvci1tZXNzYWdlPSJJbnZhbGlkIGlucHV0IgogICAgICAgICAgICAgICAgaW52YWxpZD0iW1tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC5pbnZhbGlkXV0iCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iK2luZmluaXR5IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDMuIEEgcmVnZXhwIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc1JlZ2V4cEZpbHRlcihocGFyYW0pXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLHljZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyl2Y2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KHljZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KHljZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmdmNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LHZjZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgTHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIHhjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9THVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBrdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZrdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgYmNlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksTnVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9OdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIGJjZSE9PXZvaWQgMCYmKHI9YmNlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx3Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB3Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUR1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxEdXI9ZT0+ZSYmKHdjZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LFNjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIEVjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIEZ1cj1lPT50PT57bGV0IHI9RWNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sQnVyPVsiaHRtbCIsInN2ZyJdLEh1cj1lPT57QnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChFY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sVGNlPW5ldyBTZXQsVnVyPShlLHQscik9PntUY2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1IdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/eGNlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxDY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiFUY2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpGdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtWdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBBY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxQY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpQY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1QY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07QWNlPUNjdDtnM1tBY2VdPSEwO3ZhciBJY2U9RWxlbWVudC5wcm90b3R5cGUsSWlpPUljZS5tc01hdGNoZXNTZWxlY3Rvcnx8SWNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksVXVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4rVXVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgTGNlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09TGNlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gTGNlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1DY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIga2NlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke2tjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7a2NlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFJjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1JjZS5pbm5lckhUTUw9YDxzdHlsZT4ke3F1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFJjZS5jb250ZW50KTt2YXIgR3VyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsR3VyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgV3VyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsV3VyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChOY2UuY29udGVudCk7dmFyIFl1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxEY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtEY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtZdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChEY2UuY29udGVudCk7dmFyIGp1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsT2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7T2NlLmlubmVySFRNTD1gPHN0eWxlPiR7anVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoT2NlLmNvbnRlbnQpO3ZhciBYdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCx6Y2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt6Y2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtYdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh6Y2UuY29udGVudCk7dmFyICR1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsRmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7RmNlLmlubmVySFRNTD1gPHN0eWxlPiR7JHVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRmNlLmNvbnRlbnQpO3ZhciBLdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixLdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBCY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgQmNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFp1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LEhjZT1lPT5jbGFzcyBleHRlbmRzIFp1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBKdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFF1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gVmNlKGUpfWZ1bmN0aW9uIHRocigpe3RyeXtyZXR1cm4gZWhyKCk/ITA6cmhyKCk/JEg/IW5ocigpOiFRdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gZWhyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gcmhyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gbmhyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gVmNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPUp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiBWY2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT10aHIoKSk7ZnVuY3Rpb24gaWhyKCl7fXZhciBVY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoaWhyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSxvaHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxhaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIob2hyKTthaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtVY2UoKX07dmFyIE9jdCxxY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIXFjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxxY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKEhjZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEdjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHNocj1HY2UmJkdjZVsxXT49OCxXY2U9MyxZY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxXY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChXY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXNociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFljZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBqY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBYY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbGhyKHIpfX0sbGhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyICRjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBLY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBaY2U9Y2xhc3MgSmNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgSmNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgWmNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIHR1ZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBldWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgcnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSxpdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIGF1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0sbHVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIGN1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gdXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgaHVlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLHV1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBjaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBjaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgdWhyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoUWNlKCRjZSh0dWUoWGNlKGl1ZShvdWUoYXVlKG51ZShjdWUoamNlKHJ1ZShodWUoS2NlKGV1ZShsdWUoc3VlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOnVocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLHZndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBmdWUoZSx0KXtyZXR1cm4gQmd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgaGhyPTY0LEVsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzpoaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgZnVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBwdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIGR1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gbXVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGd1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1ndWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1tdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KGR1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1wdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57bGV0IG49d2luZG93LmRhdGFMYXllcnx8W107ZnVuY3Rpb24gaSgpe24ucHVzaChhcmd1bWVudHMpfWkoImV2ZW50Iix0LHtldmVudF9jYXRlZ29yeToiSFBhcmFtcyIsZXZlbnRfbGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIHBocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUscGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+cGZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9PmNmZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+eGZlLEFsd2F5c0RlcHRoOigpPT5yZmUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9Pk9mZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+SzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UmZlLEJhc2ljU2hhZG93TWFwOigpPT5taHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+ZV9yLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WjByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5tZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9Pm5fcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+ZmZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT5WaGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmRocixDdWxsRmFjZU5vbmU6KCk9PkhoZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+cWhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT5kZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5UaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+QWhyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+aXBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PktoZSxEc3RDb2xvckZhY3RvcjooKT0+SmhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkgwcixEeW5hbWljQ29weVVzYWdlOigpPT5VaHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+QmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5KMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT5pZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+a2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9PlAwcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PlgwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT4kMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9PnVfcixGb250TG9hZGVyOigpPT5jX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+R2hyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5hZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9Pm9mZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+T2hyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+TmhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+aF9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+RWhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PkNocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkcwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlkwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+VjByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9Pl9mZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+UGhyLEpTT05Mb2FkZXI6KCk9PmlfcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5hX3IsTGVzc0RlcHRoOigpPT5uZmUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5SaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5MaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT5DMHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PlQwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT54aHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+dmhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT51ZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5QZmUsTG9vcFBpbmdQb25nOigpPT5MZmUsTG9vcFJlcGVhdDooKT0+SWZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT53ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5iZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+aWZyLE1hdGhVdGlsczooKT0+aWZyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+TDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+bGZlLE11bHRpTWF0ZXJpYWw6KCk9PmswcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnlocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+X2hyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5lZmUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+SWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5BMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+c2ZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PkRocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkRmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5qaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+WmhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PlFoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+JGhlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+VWhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnNfcixQYXJ0aWNsZTooKT0+TjByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+ejByLFBhcnRpY2xlU3lzdGVtOigpPT5EMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+RjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5SMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5PMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5OZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PkNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5BZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+RWZlLFJHSW50ZWdlckZvcm1hdDooKT0+VGZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+U2ZlLFJlZEludGVnZXJGb3JtYXQ6KCk9Pk1mZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5oZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9Pk1ocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+V2hlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+b19yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+Z2ZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmdocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PnRmZSxTcmNDb2xvckZhY3RvcjooKT0+WGhlLFN0YXRpY0NvcHlVc2FnZTooKT0+VmhyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5GaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5xaHIsU3RyZWFtRHJhd1VzYWdlOigpPT56aHIsU3RyZWFtUmVhZFVzYWdlOigpPT5IaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+R2hlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9PmxfcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT53aHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5iaHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PmtmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PlcwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+ajByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PlUwcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5xMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+VmZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PnlmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9PnZmZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+QjByLFZlcnRleENvbG9yczooKT0+STByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PnJfcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT5RZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+UTByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+dF9yLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlloZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PlNocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sSGhlPTAsU3V0PTEsVmhlPTIsZGhyPTMsbWhyPTAsQ2h0PTEsVWhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxnaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQscWhlPTUsTTE9MTAwLEdoZT0xMDEsV2hlPTEwMixDdXQ9MTAzLEF1dD0xMDQsWWhlPTIwMCxqaGU9MjAxLFhoZT0yMDIsJGhlPTIwMyxQaHQ9MjA0LElodD0yMDUsS2hlPTIwNixaaGU9MjA3LEpoZT0yMDgsUWhlPTIwOSx0ZmU9MjEwLGVmZT0wLHJmZT0xLG5mZT0yLGlVPTMsaWZlPTQsb2ZlPTUsYWZlPTYsc2ZlPTcsTzY9MCxsZmU9MSxjZmU9MixLZD0wLHVmZT0xLGhmZT0yLGZmZT0zLHBmZT00LGRmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxfaHI9MTAwNCxhVT0xMDA1LHlocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsdmhyPTEwMDcsb3g9MTAwOCx4aHI9MTAwOCxaZD0xMDA5LG1mZT0xMDEwLGdmZT0xMDExLEczPTEwMTIsX2ZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYseWZlPTEwMTcsdmZlPTEwMTgsQTE9MTAyMCx4ZmU9MTAyMSxRbz0xMDIzLGJmZT0xMDI0LHdmZT0xMDI1LHowPTEwMjYsazE9MTAyNyxTZmU9MTAyOCxNZmU9MTAyOSxFZmU9MTAzMCxUZmU9MTAzMSxDZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsQWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsUGZlPTIyMDAsSWZlPTIyMDEsTGZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxrZmU9MCxiaHI9MSx3aHI9MixRZD0zZTMsV249MzAwMSxSZmU9MzIwMCxOZmU9MzIwMSxheD0wLERmZT0xLFNocj0wLG5VPTc2ODAsTWhyPTc2ODEsRWhyPTc2ODIsVGhyPTc2ODMsQ2hyPTM0MDU1LEFocj0zNDA1NixQaHI9NTM4NixJaHI9NTEyLExocj01MTMsa2hyPTUxNCxSaHI9NTE1LE5ocj01MTYsRGhyPTUxNyxPaHI9NTE4LE9mZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsemhyPTM1MDQwLEZocj0zNTA0NSxCaHI9MzUwNDksSGhyPTM1MDQxLFZocj0zNTA0NixVaHI9MzUwNTAscWhyPTM1MDQyLEdocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gV2hyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gWWhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gamhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gWGhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uICRocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIEtocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBaaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gSmhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBRaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uIHRmcihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBlZnIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gcmZyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gemZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIEZmZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gbmZyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgaWZyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6V2hyLGludmVyc2VMZXJwOllocixsZXJwOlVQLGRhbXA6amhyLHBpbmdwb25nOlhocixzbW9vdGhzdGVwOiRocixzbW9vdGhlcnN0ZXA6S2hyLHJhbmRJbnQ6WmhyLHJhbmRGbG9hdDpKaHIscmFuZEZsb2F0U3ByZWFkOlFocixzZWVkZWRSYW5kb206dGZyLGRlZ1RvUmFkOmVmcixyYWRUb0RlZzpyZnIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzp6ZmUsZmxvb3JQb3dlck9mVHdvOkZmZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOm5mcn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBCZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgb2ZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IG9mcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgSGZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPUhmZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9SGZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxhZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTphZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHl1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHl1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLHl1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciBzZnI9bmV3IHRhLHZ1ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpzZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQodnVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludCh2dWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShsZnIsdCxjZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbGZyPW5ldyBqKDAsMCwwKSxjZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLHh1ZT1uZXcgTWUsYnVlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4geHVlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KHh1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIGJ1ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihidWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sdWZyPTAsd3VlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosaGZyPW5ldyBqLGZmcj1uZXcgeWksU3VlPW5ldyBqKDEsMCwwKSxNdWU9bmV3IGooMCwxLDApLEV1ZT1uZXcgaigwLDAsMSkscGZyPXt0eXBlOiJhZGRlZCJ9LFR1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFN1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhNdWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoRXVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB3dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh3dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoU3VlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKE11ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhFdWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQocGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudChUdWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudChUdWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsaGZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLGZmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixDdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBDdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihDdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxkZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpkZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9T2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSxtZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm1mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KEJmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgQXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoQXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KEF1ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gZ2ZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWdmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciBWZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxfZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAseWZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPV9mcix0aGlzLmZyYWdtZW50U2hhZGVyPXlmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLHZmcj1uZXcgaix4ZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyh2ZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHx4ZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIFVmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gYmZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSx3ZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAsU2ZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxNZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxFZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCxDZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxBZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsUGZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsSWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxMZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxrZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxSZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxOZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsRGZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLE9mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsemZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLEZmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLEJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsSGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxWZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsVWZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxxZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEdmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsV2ZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxZZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLGpmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixYZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLCRmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWmZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCx0cHI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxlcHI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxycHI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLG5wcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxpcHI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLG9wcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGFwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxscHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsY3ByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLHVwcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsaHByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGZwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLHBwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsZHByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCxtcHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxncHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsX3ByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsdnByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAseHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGJwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsd3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAsU3ByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLE1wcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxFcHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxUcHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxDcHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxBcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsUHByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsTHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxrcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxScHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsTnByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLERwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxPcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLHpwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxGcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLEJwcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxIcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLFZwcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLFVwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxxcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEdwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLFdwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFlwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLGpwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLFhwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCwkcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLEtwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxKcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFFwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsdGRyPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxlZHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxyZHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsbmRyPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLGlkcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsb2RyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGFkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHNkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLGxkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxjZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCx1ZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGhkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxmZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAscGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxkZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCxtZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsZ2RyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxfZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAseWRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx2ZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCx4ZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsYmRyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCx3ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCxTZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLE1kcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLEVkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLFRkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQ2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxBZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFBkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxJZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxMZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLGtkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxSZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxOZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLERkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsT2RyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHpkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLEZkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsQmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsSGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFZkcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFVkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHFkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxHZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsV2RyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsWWRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxqZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6d2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6U2ZyLGFscGhhdGVzdF9mcmFnbWVudDpNZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6RWZyLGFvbWFwX2ZyYWdtZW50OlRmcixhb21hcF9wYXJzX2ZyYWdtZW50OkNmcixiZWdpbl92ZXJ0ZXg6QWZyLGJlZ2lubm9ybWFsX3ZlcnRleDpQZnIsYnNkZnM6SWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpMZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OmtmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpSZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Ok5mcixjbGlwcGluZ19wbGFuZXNfdmVydGV4OkRmcixjb2xvcl9mcmFnbWVudDpPZnIsY29sb3JfcGFyc19mcmFnbWVudDp6ZnIsY29sb3JfcGFyc192ZXJ0ZXg6RmZyLGNvbG9yX3ZlcnRleDpCZnIsY29tbW9uOkhmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6VmZyLGRlZmF1bHRub3JtYWxfdmVydGV4OlVmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6cWZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6R2ZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OldmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OllmcixlbmNvZGluZ3NfZnJhZ21lbnQ6amZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OlhmcixlbnZtYXBfZnJhZ21lbnQ6JGZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpLZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WmZyLGVudm1hcF9wYXJzX3ZlcnRleDpKZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6Y3ByLGVudm1hcF92ZXJ0ZXg6UWZyLGZvZ192ZXJ0ZXg6dHByLGZvZ19wYXJzX3ZlcnRleDplcHIsZm9nX2ZyYWdtZW50OnJwcixmb2dfcGFyc19mcmFnbWVudDpucHIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDppcHIsbGlnaHRtYXBfZnJhZ21lbnQ6b3ByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6YXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzcHIsbGlnaHRzX3BhcnNfYmVnaW46bHByLGxpZ2h0c190b29uX2ZyYWdtZW50OnVwcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmhwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6ZnByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OnBwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZHByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50Om1wcixsaWdodHNfZnJhZ21lbnRfYmVnaW46Z3ByLGxpZ2h0c19mcmFnbWVudF9tYXBzOl9wcixsaWdodHNfZnJhZ21lbnRfZW5kOnlwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDp2cHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp4cHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6YnByLGxvZ2RlcHRoYnVmX3ZlcnRleDp3cHIsbWFwX2ZyYWdtZW50OlNwcixtYXBfcGFyc19mcmFnbWVudDpNcHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OkVwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpUcHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OkNwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpBcHIsbW9ycGhub3JtYWxfdmVydGV4OlBwcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpJcHIsbW9ycGh0YXJnZXRfdmVydGV4Okxwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46a3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOlJwcixub3JtYWxfcGFyc19mcmFnbWVudDpOcHIsbm9ybWFsX3BhcnNfdmVydGV4OkRwcixub3JtYWxfdmVydGV4Ok9wcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDp6cHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpGcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOkJwcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpIcHIsb3V0cHV0X2ZyYWdtZW50OlZwcixwYWNraW5nOlVwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OnFwcixwcm9qZWN0X3ZlcnRleDpHcHIsZGl0aGVyaW5nX2ZyYWdtZW50OldwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpZcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50Ompwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpYcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6JHByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpLcHIsc2hhZG93bWFwX3ZlcnRleDpacHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Okpwcixza2luYmFzZV92ZXJ0ZXg6UXByLHNraW5uaW5nX3BhcnNfdmVydGV4OnRkcixza2lubmluZ192ZXJ0ZXg6ZWRyLHNraW5ub3JtYWxfdmVydGV4OnJkcixzcGVjdWxhcm1hcF9mcmFnbWVudDpuZHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDppZHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6b2RyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6YWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpzZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bGRyLHV2X3BhcnNfZnJhZ21lbnQ6Y2RyLHV2X3BhcnNfdmVydGV4OnVkcix1dl92ZXJ0ZXg6aGRyLHV2Ml9wYXJzX2ZyYWdtZW50OmZkcix1djJfcGFyc192ZXJ0ZXg6cGRyLHV2Ml92ZXJ0ZXg6ZGRyLHdvcmxkcG9zX3ZlcnRleDptZHIsYmFja2dyb3VuZF92ZXJ0OmdkcixiYWNrZ3JvdW5kX2ZyYWc6X2RyLGN1YmVfdmVydDp5ZHIsY3ViZV9mcmFnOnZkcixkZXB0aF92ZXJ0OnhkcixkZXB0aF9mcmFnOmJkcixkaXN0YW5jZVJHQkFfdmVydDp3ZHIsZGlzdGFuY2VSR0JBX2ZyYWc6U2RyLGVxdWlyZWN0X3ZlcnQ6TWRyLGVxdWlyZWN0X2ZyYWc6RWRyLGxpbmVkYXNoZWRfdmVydDpUZHIsbGluZWRhc2hlZF9mcmFnOkNkcixtZXNoYmFzaWNfdmVydDpBZHIsbWVzaGJhc2ljX2ZyYWc6UGRyLG1lc2hsYW1iZXJ0X3ZlcnQ6SWRyLG1lc2hsYW1iZXJ0X2ZyYWc6TGRyLG1lc2htYXRjYXBfdmVydDprZHIsbWVzaG1hdGNhcF9mcmFnOlJkcixtZXNobm9ybWFsX3ZlcnQ6TmRyLG1lc2hub3JtYWxfZnJhZzpEZHIsbWVzaHBob25nX3ZlcnQ6T2RyLG1lc2hwaG9uZ19mcmFnOnpkcixtZXNocGh5c2ljYWxfdmVydDpGZHIsbWVzaHBoeXNpY2FsX2ZyYWc6QmRyLG1lc2h0b29uX3ZlcnQ6SGRyLG1lc2h0b29uX2ZyYWc6VmRyLHBvaW50c192ZXJ0OlVkcixwb2ludHNfZnJhZzpxZHIsc2hhZG93X3ZlcnQ6R2RyLHNoYWRvd19mcmFnOldkcixzcHJpdGVfdmVydDpZZHIsc3ByaXRlX2ZyYWc6amRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBYZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uICRkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBLZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFpkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIEpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gUWRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCkscWZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxHZmU9RjAtcTMrMStxZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOlB1ZSxfc2lnbWFzOlBWfT10bXIoKSxJdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEx1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1lbXIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1OdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1SdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPWt1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1rdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihJdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShJdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPU51ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1SdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEdmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9THVlWyhpLTEpJUx1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPVB1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9UHVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiB0bXIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEdmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9cWZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24ga3VlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gZW1yKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBSdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE51ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBybXIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBubXIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBpbXIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhCZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIG9tcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGFtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHNtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbG1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIER1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBjbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmRHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkR1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobG1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQoc21yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gdW1yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgV2ZlPW5ldyB2aSxZZmU9bmV3IHRNLGpmZT1uZXcgcjYsWGZlPW5ldyBIMCxPdWU9W10senVlPVtdLEZ1ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxCdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxIdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89T3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksT3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj16dWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksenVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGhtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtIdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsSHVlKSxDYShyLG4pfX1mdW5jdGlvbiBnbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtCdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsQnVlKSxDYShyLG4pfX1mdW5jdGlvbiBfbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtGdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsRnVlKSxDYShyLG4pfX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gdm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGJtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gd21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBTbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBNbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBFbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBUbXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxXZmUsaSl9ZnVuY3Rpb24gQ21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxqZmUsaSl9ZnVuY3Rpb24gQW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxYZmUsaSl9ZnVuY3Rpb24gUG1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFlmZSxpKX1mdW5jdGlvbiBJbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gaG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIGZtcjtjYXNlIDM1NjY1OnJldHVybiBwbXI7Y2FzZSAzNTY2NjpyZXR1cm4gZG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIG1tcjtjYXNlIDM1Njc1OnJldHVybiBnbXI7Y2FzZSAzNTY3NjpyZXR1cm4gX21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiB5bXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB2bXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB4bXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBibXI7Y2FzZSA1MTI1OnJldHVybiB3bXI7Y2FzZSAzNjI5NDpyZXR1cm4gU21yO2Nhc2UgMzYyOTU6cmV0dXJuIE1tcjtjYXNlIDM2Mjk2OnJldHVybiBFbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBUbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIENtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBBbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gUG1yfX1mdW5jdGlvbiBMbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGttcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gUm1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBObXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIERtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gT21yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiB6bXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBGbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVtcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHFtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFdtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFltcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxXZmUsaVtvXSl9ZnVuY3Rpb24gam1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8amZlLGlbb10pfWZ1bmN0aW9uIFhtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fFhmZSxpW29dKX1mdW5jdGlvbiAkbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFlmZSxpW29dKX1mdW5jdGlvbiBLbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gTG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIGttcjtjYXNlIDM1NjY1OnJldHVybiBSbXI7Y2FzZSAzNTY2NjpyZXR1cm4gTm1yO2Nhc2UgMzU2NzQ6cmV0dXJuIERtcjtjYXNlIDM1Njc1OnJldHVybiBPbXI7Y2FzZSAzNTY3NjpyZXR1cm4gem1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBGbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBCbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBIbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBWbXI7Y2FzZSA1MTI1OnJldHVybiBVbXI7Y2FzZSAzNjI5NDpyZXR1cm4gcW1yO2Nhc2UgMzYyOTU6cmV0dXJuIEdtcjtjYXNlIDM2Mjk2OnJldHVybiBXbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBZbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIGptcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gJG1yfX1mdW5jdGlvbiBabXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9SW1yKHQudHlwZSl9ZnVuY3Rpb24gJGZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9S21yKHQudHlwZSl9JGZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBLZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fUtmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gVnVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIEptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXtWdWUocixjPT09dm9pZCAwP25ldyBabXIocyxlLHQpOm5ldyAkZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBLZmUocyksVnVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO0ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gVXVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgUW1yPTA7ZnVuY3Rpb24gdGdyKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGVncihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gcXVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArdGdyKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiByZ3IoZSx0KXtsZXQgcj1lZ3IodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIG5ncihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIHVmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2UgaGZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGZmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgcGZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgZGZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gaWdyKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiBvZ3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gYWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBXdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciBzZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShzZ3IsbGdyKX1mdW5jdGlvbiBsZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBjZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyx1Z3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBZdWUoZSl7cmV0dXJuIGUucmVwbGFjZSh1Z3IsWmZlKS5yZXBsYWNlKGNncixoZ3IpfWZ1bmN0aW9uIGhncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksWmZlKGUsdCxyLG4pfWZ1bmN0aW9uIFpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24ganVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gZmdyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PVVoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIHBncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBkZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBtZ3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBsZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBjZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZ2dyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9ZmdyKHIpLGM9cGdyKHIpLHU9ZGdyKHIpLGg9bWdyKHIpLGY9ci5pc1dlYkdMMj8iIjppZ3IocikscD1vZ3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W2p1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixqdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/bmdyKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxyZ3IoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUd1ZShhLHIpLGE9V3VlKGEscikscz1KdXQocykscz1HdWUocyxyKSxzPVd1ZShzLHIpLGE9WXVlKGEpLHM9WXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9VXVlKGksMzU2MzMseCksQz1VdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPXF1ZShpLFMsInZlcnRleCIpLEY9cXVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWFncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1RbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBfZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1fZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24geWdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PURmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPVZmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBnZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gdmdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIFh1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uICR1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8eGdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8WHVlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8WHVlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGJncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgJHVlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyAkdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIHdncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiBTZ3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgTWdyPTA7ZnVuY3Rpb24gRWdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBUZ3IoZSx0KXtsZXQgcj1uZXcgd2dyLG49U2dyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoRWdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPU1ncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIEt1ZShlLHQpe2xldCByPW5ldyBUZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIENncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBLdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgS3VlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UmZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBBZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxQZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gSmZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpOZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6QWdyLGZyYWdtZW50U2hhZGVyOlBncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gSWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIGlmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2Ugb2ZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSBhZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIHNmZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0doZV06MzI3NzgsW1doZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbWWhlXTowLFtqaGVdOjEsW1hoZV06NzY4LFtQaHRdOjc3MCxbdGZlXTo3NzYsW0poZV06Nzc0LFtLaGVdOjc3MixbJGhlXTo3NjksW0lodF06NzcxLFtRaGVdOjc3NSxbWmhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PXFoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PUhoZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PVZoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gTGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/RmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uIFFmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PXlmZSlyZXR1cm4gMzI4MTk7aWYobz09PXZmZSlyZXR1cm4gMzI4MjA7aWYobz09PW1mZSlyZXR1cm4gNTEyMDtpZihvPT09Z2ZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09X2ZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT14ZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1iZmUpcmV0dXJuIDY0MDk7aWYobz09PXdmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09U2ZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PU1mZSlyZXR1cm4gMzYyNDQ7aWYobz09PUVmZSlyZXR1cm4gMzMzMTk7aWYobz09PVRmZSlyZXR1cm4gMzMzMjA7aWYobz09PUNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1BZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBrZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KGtncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgVWZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gUmdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBOZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6TmdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBubXIobHQpLGN0PW5ldyBaZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3IFFmZShsdCxfdCxjdCksWD1uZXcgSWdyKGx0LF90LGN0KSxldD1uZXcgYW1yKGx0KSxkdD1uZXcgdmdyLHE9bmV3IExncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgUWRyKGcpLGh0PW5ldyBybXIoZyksd3Q9bmV3IGJmcihsdCxjdCksbnQ9bmV3ICRkcihsdCxfdCx3dCxjdCksa3Q9bmV3IGltcihsdCx3dCxldCxudCksaWU9bmV3IHVtcihsdCxrdCx3dCxldCksJHQ9bmV3IGNtcihsdCxjdCxxKSx0dD1uZXcgSmRyKGR0KSxlZT1uZXcgeWdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBSZ3IoZHQpLGFyPW5ldyBiZ3IsZnI9bmV3IENncihfdCxjdCksSXQ9bmV3IFhkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBKZmUoZyxpZSxjdCksaGU9bmV3IEtkcihsdCxfdCxldCxjdCksVHQ9bmV3IG9tcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgVWZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsdHBlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixadWU9bmV3IEx0LGR1dD1uZXcgTHQsSnVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksdHBlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxadWUuc2V0KDAsMCksZHV0LnNldCgxLDApLEp1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLFp1ZSxkdXQsSnVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KHRwZSl9dmFyIE5WPW5ldyBqLFF1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksUXVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKFF1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSx0aGU9bmV3IGosZWhlPW5ldyBlbixyaGU9bmV3IGVuLERncj1uZXcgaixuaGU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O2VoZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCkscmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksdGhlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPXJoZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPWVoZS5nZXRDb21wb25lbnQobyk7bmhlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoRGdyLmNvcHkodGhlKS5hcHBseU1hdHJpeDQobmhlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBpaGU9bmV3IE1lLE9ncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOk9ncjtpaGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLGloZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9emZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvaGU9bmV3IE1lLGFoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLG9oZSksYWhlLm11bHRpcGx5TWF0cmljZXMobixvaGUpLEZQLm1hdHJpeFdvcmxkPWFoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBzaGU9bmV3IGosbGhlPW5ldyBqLGNoZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspc2hlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGxoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9c2hlLmRpc3RhbmNlVG8obGhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtjaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGNoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIHVoZT1uZXcgaixoaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9Mil1aGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLGhoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK3VoZS5kaXN0YW5jZVRvKGhoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgZmhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtmaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGZoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXykscGhlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxwaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBwaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBkaGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24gemdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBGZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gQmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiB6Z3IoZSx0KStGZ3IoZSxyKStCZ3IoZSxuKX1mdW5jdGlvbiBIZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gVmdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gVWdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gcWdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gSGdyKGUsdCkrVmdyKGUscikrVWdyKGUsbikrcWdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KGRoZShzLGwueCxjLngsdS54LGgueCksZGhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxHZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1lcGUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPSRncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIGVwZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWEwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1taGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1taGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmdDByKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9ZZ3IoZSxuLGksbyk6V2dyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9amdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZYZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIFdncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBZZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGpncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmcnBlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIFhncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJm4wcihhLHMpKXtsZXQgbD1ucGUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gJGdyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9ZXBlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChyMHIoYykpO2ZvcihpLnNvcnQoS2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWmdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gS2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWmdyKGUsdCl7aWYodD1KZ3IoZSx0KSx0KXtsZXQgcj1ucGUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBKZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmUWdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gUWdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uIHQwcihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxlMHIoaSl9ZnVuY3Rpb24gZTByKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIHIwcihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIG4wcihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFpMHIoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJm8wcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBycGUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gaTByKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZycGUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIG8wcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIG5wZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gbWhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gYTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107Z2hlKHQpLF9oZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChnaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxfaGUobixyW2xdKTtsZXQgcz1HZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGdoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gX2hlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnMwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbDByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0sczByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBsMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYzByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gYzByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCkseWhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSx5aGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiB5aGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgdmhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIHUwcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKGYwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGgwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBmMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1oMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LGlwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDppcGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciB4aGU9bmV3IE1lLGJoZT1uZXcgaix3aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtiaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShiaGUpLHdoZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHdoZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLHhoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh4aGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIFNoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksU2hlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KFNoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgdTByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gdmhlP3M9dmhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxwMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLE1oZSksbC53cmFwVD1uKHMud3JhcFsxXSxNaGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsRWhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLEVoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxwMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSxNaGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sRWhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciBUaGU9bmV3IE1lLENoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO0NoZS5lbGVtZW50c1sxMl09LWksVGhlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoQ2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseShUaGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1BaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9QWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gQWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLFBoZT1uZXcgeWksZDByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxQaGUsZDByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oUGhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixJaGU9bmV3IHlpLG0wcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxJaGUsbTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihJaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGcwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixfMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHkwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksdjByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLF8wcikseDByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksYjByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLHcwcj1uZXcgUmVnRXhwKCJeIit5MHIrdjByK3gwcitiMHIrIiQiKSxTMHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShnMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj13MHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTtTMHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPUlmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUxmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1QZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoTGhlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChMaGUpLG59fTtmdW5jdGlvbiBMaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxraGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1raGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBraGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFJoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UmhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUmhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxOaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksTmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChOaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9b3BlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIG9wZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LG9wZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxNMHI9bmV3IGosRGhlPW5ldyBuZSxPaGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0RoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLE9oZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9EaGU6T2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQoTTByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LHpoZT1uZXcgaixYVj1uZXcgaixGaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7emhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLEZoZS5zdWJWZWN0b3JzKFhWLHpoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PUZoZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxCaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0JoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoQmhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LGFwZT1uZXcgRmxvYXQzMkFycmF5KDEpLEUwcj1uZXcgSW50MzJBcnJheShhcGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLGFwZVswXT10O2xldCByPUUwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LFQwcj0wLEMwcj0xLEEwcj0wLFAwcj0xLEkwcj0yO2Z1bmN0aW9uIEwwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gazByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBSMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIE4wcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gRDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiB6MHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIEYwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIEIwcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIFYwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiBVMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIFcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gWTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBYMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gJDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gSjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gUTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIHRfcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBlX3IoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksa2ZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhKZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIHJfcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIG5fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBpX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIG9fcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHNfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBsX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gY19yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIHVfcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBoX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgc3BlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0sbHBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KHNwZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KHNwZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQobHBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChscGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBjcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihjcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIHVwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O3VwZT1FKFt5dCgidGYtYmFja2VuZCIpXSx1cGUpO3ZhciBocGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07aHBlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxocGUpO3ZhciBmcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtmcGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sZnBlKTt2YXIgcHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07cHBlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLHBwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9PnMyZX0pO3ZhciBkcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O2RwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sZHBlKTt2YXIgbXBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07bXBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLG1wZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIElpZT1PYmplY3QuY3JlYXRlLGtBPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxBaWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixSaWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsUGllPU9iamVjdC5nZXRQcm90b3R5cGVPZixPaWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxHVj0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLEZBPShuLHQpPT57Zm9yKHZhciBlIGluIHQpa0EobixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LFdWPShuLHQsZSk9PihlPW51bGwhPW4/SWllKFBpZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIFJpZSh0KSkhT2llLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYma0EobixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9QWllKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTprQShlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLEk0PUdWKChKVWUsX0MpPT57dmFyIHI0LG80LHM0LGE0LGw0LGM0LGQ0LHU0LHA0LGY0LG00LGg0LGc0LGhDLFFBLF80LGI0LHY0LFJtLHk0LHg0LEM0LE00LHc0LFM0LEU0LFQ0LEQ0LGdDOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8scyl7cmV0dXJuIGlbb109cj9yKG8scyk6c319ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgX0MmJiJvYmplY3QiPT10eXBlb2YgX0MuZXhwb3J0cz9lKHQsZShfQy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07cjQ9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LG80PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEscz1hcmd1bWVudHMubGVuZ3RoO288cztvKyspZm9yKHZhciBhIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiYoaVthXT1yW2FdKTtyZXR1cm4gaX0sczQ9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmci5pbmRleE9mKHMpPDAmJihvW3NdPWlbc10pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT0wO2ZvcihzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7YTxzLmxlbmd0aDthKyspci5pbmRleE9mKHNbYV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLHNbYV0pJiYob1tzW2FdXT1pW3NbYV1dKX1yZXR1cm4gb30sYTQ9ZnVuY3Rpb24oaSxyLG8scyl7dmFyIGMsYT1hcmd1bWVudHMubGVuZ3RoLGw9YTwzP3I6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6cztpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxzKTtlbHNlIGZvcih2YXIgZD1pLmxlbmd0aC0xO2Q+PTA7ZC0tKShjPWlbZF0pJiYobD0oYTwzP2MobCk6YT4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBhPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sbDQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtyKG8scyxpKX19LGM0PWZ1bmN0aW9uKGkscixvLHMsYSxsKXtmdW5jdGlvbiBjKEEpe2lmKHZvaWQgMCE9PUEmJiJmdW5jdGlvbiIhPXR5cGVvZiBBKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7cmV0dXJuIEF9Zm9yKHZhciBtLGQ9cy5raW5kLHU9ImdldHRlciI9PT1kPyJnZXQiOiJzZXR0ZXIiPT09ZD8ic2V0IjoidmFsdWUiLHA9IXImJmk/cy5zdGF0aWM/aTppLnByb3RvdHlwZTpudWxsLGY9cnx8KHA/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLHMubmFtZSk6e30pLGI9ITEsTT1vLmxlbmd0aC0xO00+PTA7TS0tKXt2YXIgeT17fTtmb3IodmFyIHggaW4gcyl5W3hdPSJhY2Nlc3MiPT09eD97fTpzW3hdO2Zvcih2YXIgeCBpbiBzLmFjY2Vzcyl5LmFjY2Vzc1t4XT1zLmFjY2Vzc1t4XTt5LmFkZEluaXRpYWxpemVyPWZ1bmN0aW9uKEEpe2lmKGIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7bC5wdXNoKGMoQXx8bnVsbCkpfTt2YXIgUj0oMCxvW01dKSgiYWNjZXNzb3IiPT09ZD97Z2V0OmYuZ2V0LHNldDpmLnNldH06Zlt1XSx5KTtpZigiYWNjZXNzb3IiPT09ZCl7aWYodm9pZCAwPT09Uiljb250aW51ZTtpZihudWxsPT09Unx8Im9iamVjdCIhPXR5cGVvZiBSKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOyhtPWMoUi5nZXQpKSYmKGYuZ2V0PW0pLChtPWMoUi5zZXQpKSYmKGYuc2V0PW0pLChtPWMoUi5pbml0KSkmJmEucHVzaChtKX1lbHNlKG09YyhSKSkmJigiZmllbGQiPT09ZD9hLnB1c2gobSk6Zlt1XT1tKX1wJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocCxzLm5hbWUsZiksYj0hMH0sZDQ9ZnVuY3Rpb24oaSxyLG8pe2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoPjIsYT0wO2E8ci5sZW5ndGg7YSsrKW89cz9yW2FdLmNhbGwoaSxvKTpyW2FdLmNhbGwoaSk7cmV0dXJuIHM/bzp2b2lkIDB9LHU0PWZ1bmN0aW9uKGkpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgaT9pOiIiLmNvbmNhdChpKX0scDQ9ZnVuY3Rpb24oaSxyLG8pe3JldHVybiJzeW1ib2wiPT10eXBlb2YgciYmKHI9ci5kZXNjcmlwdGlvbj8iWyIuY29uY2F0KHIuZGVzY3JpcHRpb24sIl0iKToiIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm5hbWUiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6bz8iIi5jb25jYXQobywiICIscik6cn0pfSxmND1mdW5jdGlvbihpLHIpe2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QubWV0YWRhdGEpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaSxyKX0sbTQ9ZnVuY3Rpb24oaSxyLG8scyl7cmV0dXJuIG5ldyhvfHwobz1Qcm9taXNlKSkoZnVuY3Rpb24obCxjKXtmdW5jdGlvbiBkKGYpe3RyeXtwKHMubmV4dChmKSl9Y2F0Y2gobSl7YyhtKX19ZnVuY3Rpb24gdShmKXt0cnl7cChzLnRocm93KGYpKX1jYXRjaChtKXtjKG0pfX1mdW5jdGlvbiBwKGYpe2YuZG9uZT9sKGYudmFsdWUpOmZ1bmN0aW9uKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX0oZi52YWx1ZSkudGhlbihkLHUpfXAoKHM9cy5hcHBseShpLHJ8fFtdKSkubmV4dCgpKX0pfSxoND1mdW5jdGlvbihpLHIpe3ZhciBzLGEsbCxjLG89e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbFswXSl0aHJvdyBsWzFdO3JldHVybiBsWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGM9e25leHQ6ZCgwKSx0aHJvdzpkKDEpLHJldHVybjpkKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIGQocCl7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihwKXtpZihzKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAscFswXSYmKG89MCkpLG87KXRyeXtpZihzPTEsYSYmKGw9MiZwWzBdP2EucmV0dXJuOnBbMF0/YS50aHJvd3x8KChsPWEucmV0dXJuKSYmbC5jYWxsKGEpLDApOmEubmV4dCkmJiEobD1sLmNhbGwoYSxwWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2goYT0wLGwmJihwPVsyJnBbMF0sbC52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6bD1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKyssYT1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpwPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobD0obD1vLnRyeXMpLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKDY9PT1wWzBdfHwyPT09cFswXSkpe289MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFsfHxwWzFdPmxbMF0mJnBbMV08bFszXSkpe28ubGFiZWw9cFsxXTticmVha31pZig2PT09cFswXSYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1wO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2gocCk7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfXA9ci5jYWxsKGksbyl9Y2F0Y2goZil7cD1bNixmXSxhPTB9ZmluYWxseXtzPWw9MH1pZig1JnBbMF0pdGhyb3cgcFsxXTtyZXR1cm57dmFsdWU6cFswXT9wWzFdOnZvaWQgMCxkb25lOiEwfX0oW3AsZl0pfX19LGc0PWZ1bmN0aW9uKGkscil7Zm9yKHZhciBvIGluIGkpImRlZmF1bHQiIT09byYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiZnQyhyLGksbyl9LGdDPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyLG8scyl7dm9pZCAwPT09cyYmKHM9byk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLG8pOyghYXx8KCJnZXQiaW4gYT8hci5fX2VzTW9kdWxlOmEud3JpdGFibGV8fGEuY29uZmlndXJhYmxlKSkmJihhPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByW29dfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLHMsYSl9OmZ1bmN0aW9uKGkscixvLHMpe3ZvaWQgMD09PXMmJihzPW8pLGlbc109cltvXX0saEM9ZnVuY3Rpb24oaSl7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLG89ciYmaVtyXSxzPTA7aWYobylyZXR1cm4gby5jYWxsKGkpO2lmKGkmJiJudW1iZXIiPT10eXBlb2YgaS5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmcz49aS5sZW5ndGgmJihpPXZvaWQgMCkse3ZhbHVlOmkmJmlbcysrXSxkb25lOiFpfX19O3Rocm93IG5ldyBUeXBlRXJyb3Iocj8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9LFFBPWZ1bmN0aW9uKGkscil7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmaVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFvKXJldHVybiBpO3ZhciBhLGMscz1vLmNhbGwoaSksbD1bXTt0cnl7Zm9yKDsodm9pZCAwPT09cnx8ci0tID4wKSYmIShhPXMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSl9Y2F0Y2goZCl7Yz17ZXJyb3I6ZH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKG89cy5yZXR1cm4pJiZvLmNhbGwocyl9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBsfSxfND1mdW5jdGlvbigpe2Zvcih2YXIgaT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylpPWkuY29uY2F0KFFBKGFyZ3VtZW50c1tyXSkpO3JldHVybiBpfSxiND1mdW5jdGlvbigpe2Zvcih2YXIgaT0wLHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylpKz1hcmd1bWVudHNbcl0ubGVuZ3RoO3ZhciBzPUFycmF5KGkpLGE9MDtmb3Iocj0wO3I8bztyKyspZm9yKHZhciBsPWFyZ3VtZW50c1tyXSxjPTAsZD1sLmxlbmd0aDtjPGQ7YysrLGErKylzW2FdPWxbY107cmV0dXJuIHN9LHY0PWZ1bmN0aW9uKGkscixvKXtpZihvfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGwscz0wLGE9ci5sZW5ndGg7czxhO3MrKykobHx8IShzIGluIHIpKSYmKGx8fChsPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsMCxzKSksbFtzXT1yW3NdKTtyZXR1cm4gaS5jb25jYXQobHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpfSxSbT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFJtPyh0aGlzLnY9aSx0aGlzKTpuZXcgUm0oaSl9LHk0PWZ1bmN0aW9uKGkscixvKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEscz1vLmFwcGx5KGkscnx8W10pLGw9W107cmV0dXJuIGE9e30sYygibmV4dCIpLGMoInRocm93IiksYygicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYTtmdW5jdGlvbiBjKGIpe3NbYl0mJihhW2JdPWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih5LHgpe2wucHVzaChbYixNLHkseF0pPjF8fGQoYixNKX0pfSl9ZnVuY3Rpb24gZChiLE0pe3RyeXshZnVuY3Rpb24oYil7Yi52YWx1ZSBpbnN0YW5jZW9mIFJtP1Byb21pc2UucmVzb2x2ZShiLnZhbHVlLnYpLnRoZW4ocCxmKTptKGxbMF1bMl0sYil9KHNbYl0oTSkpfWNhdGNoKHkpe20obFswXVszXSx5KX19ZnVuY3Rpb24gcChiKXtkKCJuZXh0IixiKX1mdW5jdGlvbiBmKGIpe2QoInRocm93IixiKX1mdW5jdGlvbiBtKGIsTSl7YihNKSxsLnNoaWZ0KCksbC5sZW5ndGgmJmQobFswXVswXSxsWzBdWzFdKX19LHg0PWZ1bmN0aW9uKGkpe3ZhciByLG87cmV0dXJuIHI9e30scygibmV4dCIpLHMoInRocm93IixmdW5jdGlvbihhKXt0aHJvdyBhfSkscygicmV0dXJuIikscltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHI7ZnVuY3Rpb24gcyhhLGwpe3JbYV09aVthXT9mdW5jdGlvbihjKXtyZXR1cm4obz0hbyk/e3ZhbHVlOlJtKGlbYV0oYykpLGRvbmU6ITF9Omw/bChjKTpjfTpsfX0sQzQ9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPWhDKGkpLG89e30scygibmV4dCIpLHMoInRocm93IikscygicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gcyhsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLHUpeyFmdW5jdGlvbihsLGMsZCx1KXtQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6ZH0pfSxjKX0oZCx1LChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxNND1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTt3ND1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmZ0MocixpLG8pO3JldHVybiBlKHIsaSkscn0sUzQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSxFND1mdW5jdGlvbihpLHIsbyxzKXtpZigiYSI9PT1vJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/czoiYSI9PT1vP3MuY2FsbChpKTpzP3MudmFsdWU6ci5nZXQoaSl9LFQ0PWZ1bmN0aW9uKGkscixvLHMsYSl7aWYoIm0iPT09cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1zJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09cz9hLmNhbGwoaSxvKTphP2EudmFsdWU9bzpyLnNldChpLG8pLG99LEQ0PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixyNCksbigiX19hc3NpZ24iLG80KSxuKCJfX3Jlc3QiLHM0KSxuKCJfX2RlY29yYXRlIixhNCksbigiX19wYXJhbSIsbDQpLG4oIl9fZXNEZWNvcmF0ZSIsYzQpLG4oIl9fcnVuSW5pdGlhbGl6ZXJzIixkNCksbigiX19wcm9wS2V5Iix1NCksbigiX19zZXRGdW5jdGlvbk5hbWUiLHA0KSxuKCJfX21ldGFkYXRhIixmNCksbigiX19hd2FpdGVyIixtNCksbigiX19nZW5lcmF0b3IiLGg0KSxuKCJfX2V4cG9ydFN0YXIiLGc0KSxuKCJfX2NyZWF0ZUJpbmRpbmciLGdDKSxuKCJfX3ZhbHVlcyIsaEMpLG4oIl9fcmVhZCIsUUEpLG4oIl9fc3ByZWFkIixfNCksbigiX19zcHJlYWRBcnJheXMiLGI0KSxuKCJfX3NwcmVhZEFycmF5Iix2NCksbigiX19hd2FpdCIsUm0pLG4oIl9fYXN5bmNHZW5lcmF0b3IiLHk0KSxuKCJfX2FzeW5jRGVsZWdhdG9yIix4NCksbigiX19hc3luY1ZhbHVlcyIsQzQpLG4oIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixNNCksbigiX19pbXBvcnRTdGFyIix3NCksbigiX19pbXBvcnREZWZhdWx0IixTNCksbigiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsRTQpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLFQ0KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkSW4iLEQ0KX0pfSksaUc9R1YobGs9PnsidXNlIHN0cmljdCI7dmFyIG4sZnU9bGsmJmxrLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKG4sdCxlKXtpZihlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIG8saT0wLHI9dC5sZW5ndGg7aTxyO2krKykob3x8IShpIGluIHQpKSYmKG98fChvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxpKSksb1tpXT10W2ldKTtyZXR1cm4gbi5jb25jYXQob3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpfTtuPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHope3ZhciBlZT16LnBlcmZvcm1hbmNlO2Z1bmN0aW9uIGxlKGd0KXtlZSYmZWUubWFyayYmZWUubWFyayhndCl9ZnVuY3Rpb24gRShndCxtZSl7ZWUmJmVlLm1lYXN1cmUmJmVlLm1lYXN1cmUoZ3QsbWUpfWxlKCJab25lIik7dmFyIEg9ei5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gWShndCl7cmV0dXJuIEgrZ3R9dmFyIEo9ITA9PT16W1koImZvcmNlRHVwbGljYXRlWm9uZUNoZWNrIildO2lmKHouWm9uZSl7aWYoSnx8ImZ1bmN0aW9uIiE9dHlwZW9mIHouWm9uZS5fX3N5bWJvbF9fKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gei5ab25lfXZhciBzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlKXt0aGlzLl9wYXJlbnQ9bWUsdGhpcy5fbmFtZT1oZT9oZS5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz1oZSYmaGUucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBldCh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsaGUpfXJldHVybiBndC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKHouUHJvbWlzZSE9PWtuLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1ndC5jdXJyZW50O21lLnBhcmVudDspbWU9bWUucGFyZW50O3JldHVybiBtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcnIuem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHlzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGd0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihtZSxoZSxSZSl7aWYodm9pZCAwPT09UmUmJihSZT0hMSksa24uaGFzT3duUHJvcGVydHkobWUpKXtpZighUmUmJkopdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK21lKX1lbHNlIGlmKCF6WyJfX1pvbmVfZGlzYWJsZV8iK21lXSl7dmFyIFNuPSJab25lOiIrbWU7bGUoU24pLGtuW21lXT1oZSh6LGd0LHByKSxFKFNuLFNuKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShndC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnR9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGd0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obWUpe3ZhciBoZT10aGlzLmdldFpvbmVXaXRoKG1lKTtpZihoZSlyZXR1cm4gaGUuX3Byb3BlcnRpZXNbbWVdfSxndC5wcm90b3R5cGUuZ2V0Wm9uZVdpdGg9ZnVuY3Rpb24obWUpe2Zvcih2YXIgaGU9dGhpcztoZTspe2lmKGhlLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG1lKSlyZXR1cm4gaGU7aGU9aGUuX3BhcmVudH1yZXR1cm4gbnVsbH0sZ3QucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24obWUpe2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLG1lKX0sZ3QucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24obWUsaGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5jdGlvbiBnb3Q6ICIrbWUpO3ZhciBSZT10aGlzLl96b25lRGVsZWdhdGUuaW50ZXJjZXB0KHRoaXMsbWUsaGUpLFNuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFNuLnJ1bkd1YXJkZWQoUmUsdGhpcyxhcmd1bWVudHMsaGUpfX0sZ3QucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihtZSxoZSxSZSxTbil7cnI9e3BhcmVudDpycix6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLG1lLGhlLFJlLFNuKX1maW5hbGx5e3JyPXJyLnBhcmVudH19LGd0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKG1lLGhlLFJlLFNuKXt2b2lkIDA9PT1oZSYmKGhlPW51bGwpLHJyPXtwYXJlbnQ6cnIsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsbWUsaGUsUmUsU24pfWNhdGNoKG1yKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxtcikpdGhyb3cgbXJ9fWZpbmFsbHl7cnI9cnIucGFyZW50fX0sZ3QucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24obWUsaGUsUmUpe2lmKG1lLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKG1lLnpvbmV8fEV0KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihtZS5zdGF0ZSE9PXBpfHxtZS50eXBlIT09ZmkmJm1lLnR5cGUhPT1Pbil7dmFyIFNuPW1lLnN0YXRlIT1XbjtTbiYmbWUuX3RyYW5zaXRpb25UbyhXbixWbiksbWUucnVuQ291bnQrKzt2YXIgbXI9eXM7eXM9bWUscnI9e3BhcmVudDpycix6b25lOnRoaXN9O3RyeXttZS50eXBlPT1PbiYmbWUuZGF0YSYmIW1lLmRhdGEuaXNQZXJpb2RpYyYmKG1lLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLG1lLGhlLFJlKX1jYXRjaCh1bCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdWwpKXRocm93IHVsfX1maW5hbGx5e21lLnN0YXRlIT09cGkmJm1lLnN0YXRlIT09TmkmJihtZS50eXBlPT1maXx8bWUuZGF0YSYmbWUuZGF0YS5pc1BlcmlvZGljP1NuJiZtZS5fdHJhbnNpdGlvblRvKFZuLFduKToobWUucnVuQ291bnQ9MCx0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsLTEpLFNuJiZtZS5fdHJhbnNpdGlvblRvKHBpLFduLHBpKSkpLHJyPXJyLnBhcmVudCx5cz1tcn19fSxndC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKG1lKXtpZihtZS56b25lJiZtZS56b25lIT09dGhpcylmb3IodmFyIGhlPXRoaXM7aGU7KXtpZihoZT09PW1lLnpvbmUpdGhyb3cgRXJyb3IoImNhbiBub3QgcmVzY2hlZHVsZSB0YXNrIHRvICIuY29uY2F0KHRoaXMubmFtZSwiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIpLmNvbmNhdChtZS56b25lLm5hbWUpKTtoZT1oZS5wYXJlbnR9bWUuX3RyYW5zaXRpb25UbyhRbixwaSk7dmFyIFJlPVtdO21lLl96b25lRGVsZWdhdGVzPVJlLG1lLl96b25lPXRoaXM7dHJ5e21lPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxtZSl9Y2F0Y2goU24pe3Rocm93IG1lLl90cmFuc2l0aW9uVG8oTmksUW4scGkpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLFNuKSxTbn1yZXR1cm4gbWUuX3pvbmVEZWxlZ2F0ZXM9PT1SZSYmdGhpcy5fdXBkYXRlVGFza0NvdW50KG1lLDEpLG1lLnN0YXRlPT1RbiYmbWUuX3RyYW5zaXRpb25UbyhWbixRbiksbWV9LGd0LnByb3RvdHlwZS5zY2hlZHVsZU1pY3JvVGFzaz1mdW5jdGlvbihtZSxoZSxSZSxTbil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBxZSh2bixtZSxoZSxSZSxTbix2b2lkIDApKX0sZ3QucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKG1lLGhlLFJlLFNuLG1yKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IHFlKE9uLG1lLGhlLFJlLFNuLG1yKSl9LGd0LnByb3RvdHlwZS5zY2hlZHVsZUV2ZW50VGFzaz1mdW5jdGlvbihtZSxoZSxSZSxTbixtcil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBxZShmaSxtZSxoZSxSZSxTbixtcikpfSxndC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihtZSl7aWYobWUuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBjYW5jZWxsZWQgaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisobWUuem9uZXx8RXQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKG1lLnN0YXRlPT09Vm58fG1lLnN0YXRlPT09V24pe21lLl90cmFuc2l0aW9uVG8oVXQsVm4sV24pO3RyeXt0aGlzLl96b25lRGVsZWdhdGUuY2FuY2VsVGFzayh0aGlzLG1lKX1jYXRjaChoZSl7dGhyb3cgbWUuX3RyYW5zaXRpb25UbyhOaSxVdCksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsaGUpLGhlfXJldHVybiB0aGlzLl91cGRhdGVUYXNrQ291bnQobWUsLTEpLG1lLl90cmFuc2l0aW9uVG8ocGksVXQpLG1lLnJ1bkNvdW50PTAsbWV9fSxndC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihtZSxoZSl7dmFyIFJlPW1lLl96b25lRGVsZWdhdGVzOy0xPT1oZSYmKG1lLl96b25lRGVsZWdhdGVzPW51bGwpO2Zvcih2YXIgU249MDtTbjxSZS5sZW5ndGg7U24rKylSZVtTbl0uX3VwZGF0ZVRhc2tDb3VudChtZS50eXBlLGhlKX0sZ3R9KCk7c2UuX19zeW1ib2xfXz1ZO3ZhciBHaSx6ZT17bmFtZToiIixvbkhhc1Rhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUpe3JldHVybiBndC5oYXNUYXNrKGhlLFJlKX0sb25TY2hlZHVsZVRhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUpe3JldHVybiBndC5zY2hlZHVsZVRhc2soaGUsUmUpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZ3QsbWUsaGUsUmUsU24sbXIpe3JldHVybiBndC5pbnZva2VUYXNrKGhlLFJlLFNuLG1yKX0sb25DYW5jZWxUYXNrOmZ1bmN0aW9uKGd0LG1lLGhlLFJlKXtyZXR1cm4gZ3QuY2FuY2VsVGFzayhoZSxSZSl9fSxldD1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlLFJlKXt0aGlzLl90YXNrQ291bnRzPXttaWNyb1Rhc2s6MCxtYWNyb1Rhc2s6MCxldmVudFRhc2s6MH0sdGhpcy56b25lPW1lLHRoaXMuX3BhcmVudERlbGVnYXRlPWhlLHRoaXMuX2ZvcmtaUz1SZSYmKFJlJiZSZS5vbkZvcms/UmU6aGUuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9UmUmJihSZS5vbkZvcms/aGU6aGUuX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3VyclpvbmU9UmUmJihSZS5vbkZvcms/dGhpcy56b25lOmhlLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPVJlJiYoUmUub25JbnRlcmNlcHQ/UmU6aGUuX2ludGVyY2VwdFpTKSx0aGlzLl9pbnRlcmNlcHREbGd0PVJlJiYoUmUub25JbnRlcmNlcHQ/aGU6aGUuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPVJlJiYoUmUub25JbnRlcmNlcHQ/dGhpcy56b25lOmhlLl9pbnRlcmNlcHRDdXJyWm9uZSksdGhpcy5faW52b2tlWlM9UmUmJihSZS5vbkludm9rZT9SZTpoZS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9UmUmJihSZS5vbkludm9rZT9oZTpoZS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9UmUmJihSZS5vbkludm9rZT90aGlzLnpvbmU6aGUuX2ludm9rZUN1cnJab25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPVJlJiYoUmUub25IYW5kbGVFcnJvcj9SZTpoZS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PVJlJiYoUmUub25IYW5kbGVFcnJvcj9oZTpoZS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPVJlJiYoUmUub25IYW5kbGVFcnJvcj90aGlzLnpvbmU6aGUuX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPVJlJiYoUmUub25TY2hlZHVsZVRhc2s/UmU6aGUuX3NjaGVkdWxlVGFza1pTKSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PVJlJiYoUmUub25TY2hlZHVsZVRhc2s/aGU6aGUuX3NjaGVkdWxlVGFza0RsZ3QpLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPVJlJiYoUmUub25TY2hlZHVsZVRhc2s/dGhpcy56b25lOmhlLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSksdGhpcy5faW52b2tlVGFza1pTPVJlJiYoUmUub25JbnZva2VUYXNrP1JlOmhlLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PVJlJiYoUmUub25JbnZva2VUYXNrP2hlOmhlLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPVJlJiYoUmUub25JbnZva2VUYXNrP3RoaXMuem9uZTpoZS5faW52b2tlVGFza0N1cnJab25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9UmUmJihSZS5vbkNhbmNlbFRhc2s/UmU6aGUuX2NhbmNlbFRhc2taUyksdGhpcy5fY2FuY2VsVGFza0RsZ3Q9UmUmJihSZS5vbkNhbmNlbFRhc2s/aGU6aGUuX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9UmUmJihSZS5vbkNhbmNlbFRhc2s/dGhpcy56b25lOmhlLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO3ZhciBTbj1SZSYmUmUub25IYXNUYXNrOyhTbnx8aGUmJmhlLl9oYXNUYXNrWlMpJiYodGhpcy5faGFzVGFza1pTPVNuP1JlOnplLHRoaXMuX2hhc1Rhc2tEbGd0PWhlLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bWUsUmUub25TY2hlZHVsZVRhc2t8fCh0aGlzLl9zY2hlZHVsZVRhc2taUz16ZSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PWhlLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksUmUub25JbnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPXplLHRoaXMuX2ludm9rZVRhc2tEbGd0PWhlLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLFJlLm9uQ2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz16ZSx0aGlzLl9jYW5jZWxUYXNrRGxndD1oZSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9dGhpcy56b25lKSl9cmV0dXJuIGd0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKG1lLGhlKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLG1lLGhlKTpuZXcgc2UobWUsaGUpfSxndC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKG1lLGhlLFJlKXtyZXR1cm4gdGhpcy5faW50ZXJjZXB0WlM/dGhpcy5faW50ZXJjZXB0WlMub25JbnRlcmNlcHQodGhpcy5faW50ZXJjZXB0RGxndCx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZSxtZSxoZSxSZSk6aGV9LGd0LnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24obWUsaGUsUmUsU24sbXIpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLG1lLGhlLFJlLFNuLG1yKTpoZS5hcHBseShSZSxTbil9LGd0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbihtZSxoZSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZSxtZSxoZSl9LGd0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24obWUsaGUpe3ZhciBSZT1oZTtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJlJlLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKFJlPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsbWUsaGUpKXx8KFJlPWhlKTtlbHNlIGlmKGhlLnNjaGVkdWxlRm4paGUuc2NoZWR1bGVGbihoZSk7ZWxzZXtpZihoZS50eXBlIT12bil0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hlZHVsZUZuLiIpO3BuKGhlKX1yZXR1cm4gUmV9LGd0LnByb3RvdHlwZS5pbnZva2VUYXNrPWZ1bmN0aW9uKG1lLGhlLFJlLFNuKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLG1lLGhlLFJlLFNuKTpoZS5jYWxsYmFjay5hcHBseShSZSxTbil9LGd0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKG1lLGhlKXt2YXIgUmU7aWYodGhpcy5fY2FuY2VsVGFza1pTKVJlPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLG1lLGhlKTtlbHNle2lmKCFoZS5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO1JlPWhlLmNhbmNlbEZuKGhlKX1yZXR1cm4gUmV9LGd0LnByb3RvdHlwZS5oYXNUYXNrPWZ1bmN0aW9uKG1lLGhlKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxtZSxoZSl9Y2F0Y2goUmUpe3RoaXMuaGFuZGxlRXJyb3IobWUsUmUpfX0sZ3QucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24obWUsaGUpe3ZhciBSZT10aGlzLl90YXNrQ291bnRzLFNuPVJlW21lXSxtcj1SZVttZV09U24raGU7aWYobXI8MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1TbiYmMCE9bXJ8fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpSZS5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6UmUubWFjcm9UYXNrPjAsZXZlbnRUYXNrOlJlLmV2ZW50VGFzaz4wLGNoYW5nZTptZX0pfSxndH0oKSxxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGd0KG1lLGhlLFJlLFNuLG1yLHVsKXtpZih0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bWUsdGhpcy5zb3VyY2U9aGUsdGhpcy5kYXRhPVNuLHRoaXMuc2NoZWR1bGVGbj1tcix0aGlzLmNhbmNlbEZuPXVsLCFSZSl0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1SZTt2YXIgdHQ9dGhpczt0aGlzLmludm9rZT1tZT09PWZpJiZTbiYmU24udXNlRz9ndC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIGd0Lmludm9rZVRhc2suY2FsbCh6LHR0LHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIGd0Lmludm9rZVRhc2s9ZnVuY3Rpb24obWUsaGUsUmUpe21lfHwobWU9dGhpcyksTXIrKzt0cnl7cmV0dXJuIG1lLnJ1bkNvdW50KyssbWUuem9uZS5ydW5UYXNrKG1lLGhlLFJlKX1maW5hbGx5ezE9PU1yJiZQbigpLE1yLS19fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZ3QucHJvdG90eXBlLCJ6b25lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvbmV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGd0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksZ3QucHJvdG90eXBlLmNhbmNlbFNjaGVkdWxlUmVxdWVzdD1mdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb25UbyhwaSxRbil9LGd0LnByb3RvdHlwZS5fdHJhbnNpdGlvblRvPWZ1bmN0aW9uKG1lLGhlLFJlKXtpZih0aGlzLl9zdGF0ZSE9PWhlJiZ0aGlzLl9zdGF0ZSE9PVJlKXRocm93IG5ldyBFcnJvcigiIi5jb25jYXQodGhpcy50eXBlLCIgJyIpLmNvbmNhdCh0aGlzLnNvdXJjZSwiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciKS5jb25jYXQobWUsIicsIGV4cGVjdGluZyBzdGF0ZSAnIikuY29uY2F0KGhlLCInIikuY29uY2F0KFJlPyIgb3IgJyIrUmUrIiciOiIiLCIsIHdhcyAnIikuY29uY2F0KHRoaXMuX3N0YXRlLCInLiIpKTt0aGlzLl9zdGF0ZT1tZSxtZT09cGkmJih0aGlzLl96b25lRGVsZWdhdGVzPW51bGwpfSxndC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyl9LGd0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX0sZ3R9KCkscnQ9WSgic2V0VGltZW91dCIpLGR0PVkoIlByb21pc2UiKSxTdD1ZKCJ0aGVuIiksRHQ9W10sY249ITE7ZnVuY3Rpb24gdmkoZ3Qpe2lmKEdpfHx6W2R0XSYmKEdpPXpbZHRdLnJlc29sdmUoMCkpLEdpKXt2YXIgbWU9R2lbU3RdO21lfHwobWU9R2kudGhlbiksbWUuY2FsbChHaSxndCl9ZWxzZSB6W3J0XShndCwwKX1mdW5jdGlvbiBwbihndCl7MD09PU1yJiYwPT09RHQubGVuZ3RoJiZ2aShQbiksZ3QmJkR0LnB1c2goZ3QpfWZ1bmN0aW9uIFBuKCl7aWYoIWNuKXtmb3IoY249ITA7RHQubGVuZ3RoOyl7dmFyIGd0PUR0O0R0PVtdO2Zvcih2YXIgbWU9MDttZTxndC5sZW5ndGg7bWUrKyl7dmFyIGhlPWd0W21lXTt0cnl7aGUuem9uZS5ydW5UYXNrKGhlLG51bGwsbnVsbCl9Y2F0Y2goUmUpe3ByLm9uVW5oYW5kbGVkRXJyb3IoUmUpfX19cHIubWljcm90YXNrRHJhaW5Eb25lKCksY249ITF9fXZhciBFdD17bmFtZToiTk8gWk9ORSJ9LHBpPSJub3RTY2hlZHVsZWQiLFFuPSJzY2hlZHVsaW5nIixWbj0ic2NoZWR1bGVkIixXbj0icnVubmluZyIsVXQ9ImNhbmNlbGluZyIsTmk9InVua25vd24iLHZuPSJtaWNyb1Rhc2siLE9uPSJtYWNyb1Rhc2siLGZpPSJldmVudFRhc2siLGtuPXt9LHByPXtzeW1ib2w6WSxjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHJyfSxvblVuaGFuZGxlZEVycm9yOmZyLG1pY3JvdGFza0RyYWluRG9uZTpmcixzY2hlZHVsZU1pY3JvVGFzazpwbixzaG93VW5jYXVnaHRFcnJvcjpmdW5jdGlvbigpe3JldHVybiFzZVtZKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildfSxwYXRjaEV2ZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoT25Qcm9wZXJ0aWVzOmZyLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIGZyfSxiaW5kQXJndW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoVGhlbjpmdW5jdGlvbigpe3JldHVybiBmcn0scGF0Y2hNYWNyb1Rhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LHBhdGNoRXZlbnRQcm90b3R5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LGlzSUVPckVkZ2U6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZ2V0R2xvYmFsT2JqZWN0czpmdW5jdGlvbigpe30sT2JqZWN0RGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbigpe30sT2JqZWN0Q3JlYXRlOmZ1bmN0aW9uKCl7fSxBcnJheVNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuW119LHBhdGNoQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LHdyYXBXaXRoQ3VycmVudFpvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LGZpbHRlclByb3BlcnRpZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sYXR0YWNoT3JpZ2luVG9QYXRjaGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZyfSxfcmVkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBmcn0scGF0Y2hDYWxsYmFja3M6ZnVuY3Rpb24oKXtyZXR1cm4gZnJ9LG5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrOnZpfSxycj17cGFyZW50Om51bGwsem9uZTpuZXcgc2UobnVsbCxudWxsKX0seXM9bnVsbCxNcj0wO2Z1bmN0aW9uIGZyKCl7fUUoIlpvbmUiLCJab25lIiksei5ab25lPXNlfSh0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnNlbGZ8fGdsb2JhbCk7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxlPU9iamVjdC5nZXRQcm90b3R5cGVPZixpPU9iamVjdC5jcmVhdGUscj1BcnJheS5wcm90b3R5cGUuc2xpY2Usbz0iYWRkRXZlbnRMaXN0ZW5lciIscz0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYT1ab25lLl9fc3ltYm9sX18obyksbD1ab25lLl9fc3ltYm9sX18ocyksYz0idHJ1ZSIsZD0iZmFsc2UiLHU9Wm9uZS5fX3N5bWJvbF9fKCIiKTtmdW5jdGlvbiBwKHosZWUpe3JldHVybiBab25lLmN1cnJlbnQud3JhcCh6LGVlKX1mdW5jdGlvbiBmKHosZWUsbGUsRSxIKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKHosZWUsbGUsRSxIKX12YXIgbT1ab25lLl9fc3ltYm9sX18sYj10eXBlb2Ygd2luZG93PCJ1IixNPWI/d2luZG93OnZvaWQgMCx5PWImJk18fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLHg9InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gUih6LGVlKXtmb3IodmFyIGxlPXoubGVuZ3RoLTE7bGU+PTA7bGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgeltsZV0mJih6W2xlXT1wKHpbbGVdLGVlKyJfIitsZSkpO3JldHVybiB6fWZ1bmN0aW9uIFYoeil7cmV0dXJuIXp8fCExIT09ei53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2Ygei5nZXQmJnR5cGVvZiB6LnNldD4idSIpfXZhciB0ZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsSz0hKCJudyJpbiB5KSYmdHlwZW9mIHkucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSx4ZT0hSyYmIXRlJiYhKCFifHwhTS5IVE1MRWxlbWVudCksWGU9dHlwZW9mIHkucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIXRlJiYhKCFifHwhTS5IVE1MRWxlbWVudCksRGU9e30sRD1mdW5jdGlvbih6KXtpZih6PXp8fHkuZXZlbnQpe3ZhciBlZT1EZVt6LnR5cGVdO2VlfHwoZWU9RGVbei50eXBlXT1tKCJPTl9QUk9QRVJUWSIrei50eXBlKSk7dmFyIEgsbGU9dGhpc3x8ei50YXJnZXR8fHksRT1sZVtlZV07cmV0dXJuIHhlJiZsZT09PU0mJiJlcnJvciI9PT16LnR5cGU/ITA9PT0oSD1FJiZFLmNhbGwodGhpcyx6Lm1lc3NhZ2Usei5maWxlbmFtZSx6LmxpbmVubyx6LmNvbG5vLHouZXJyb3IpKSYmei5wcmV2ZW50RGVmYXVsdCgpOm51bGwhPShIPUUmJkUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSYmIUgmJnoucHJldmVudERlZmF1bHQoKSxIfX07ZnVuY3Rpb24gcmUoeixlZSxsZSl7dmFyIEU9bih6LGVlKTtpZighRSYmbGUmJm4obGUsZWUpJiYoRT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxFJiZFLmNvbmZpZ3VyYWJsZSl7dmFyIFk9bSgib24iK2VlKyJwYXRjaGVkIik7aWYoIXouaGFzT3duUHJvcGVydHkoWSl8fCF6W1ldKXtkZWxldGUgRS53cml0YWJsZSxkZWxldGUgRS52YWx1ZTt2YXIgSj1FLmdldCxzZT1FLnNldCx6ZT1lZS5zbGljZSgyKSxldD1EZVt6ZV07ZXR8fChldD1EZVt6ZV09bSgiT05fUFJPUEVSVFkiK3plKSksRS5zZXQ9ZnVuY3Rpb24ocWUpe3ZhciBydD10aGlzOyFydCYmej09PXkmJihydD15KSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtldF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoemUsRCksc2UmJnNlLmNhbGwocnQsbnVsbCkscnRbZXRdPXFlLCJmdW5jdGlvbiI9PXR5cGVvZiBxZSYmcnQuYWRkRXZlbnRMaXN0ZW5lcih6ZSxELCExKSl9LEUuZ2V0PWZ1bmN0aW9uKCl7dmFyIHFlPXRoaXM7aWYoIXFlJiZ6PT09eSYmKHFlPXkpLCFxZSlyZXR1cm4gbnVsbDt2YXIgcnQ9cWVbZXRdO2lmKHJ0KXJldHVybiBydDtpZihKKXt2YXIgZHQ9Si5jYWxsKHRoaXMpO2lmKGR0KXJldHVybiBFLnNldC5jYWxsKHRoaXMsZHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBxZVt4XSYmcWUucmVtb3ZlQXR0cmlidXRlKGVlKSxkdH1yZXR1cm4gbnVsbH0sdCh6LGVlLEUpLHpbWV09ITB9fX1mdW5jdGlvbiBjZSh6LGVlLGxlKXtpZihlZSlmb3IodmFyIEU9MDtFPGVlLmxlbmd0aDtFKyspcmUoeiwib24iK2VlW0VdLGxlKTtlbHNle3ZhciBIPVtdO2Zvcih2YXIgWSBpbiB6KSJvbiI9PVkuc2xpY2UoMCwyKSYmSC5wdXNoKFkpO2Zvcih2YXIgSj0wO0o8SC5sZW5ndGg7SisrKXJlKHosSFtKXSxsZSl9fXZhciBmZT1tKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24gYmUoeil7dmFyIGVlPXlbel07aWYoZWUpe3lbbSh6KV09ZWUseVt6XT1mdW5jdGlvbigpe3ZhciBIPVIoYXJndW1lbnRzLHopO3N3aXRjaChILmxlbmd0aCl7Y2FzZSAwOnRoaXNbZmVdPW5ldyBlZTticmVhaztjYXNlIDE6dGhpc1tmZV09bmV3IGVlKEhbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2ZlXT1uZXcgZWUoSFswXSxIWzFdKTticmVhaztjYXNlIDM6dGhpc1tmZV09bmV3IGVlKEhbMF0sSFsxXSxIWzJdKTticmVhaztjYXNlIDQ6dGhpc1tmZV09bmV3IGVlKEhbMF0sSFsxXSxIWzJdLEhbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LHBlKHlbel0sZWUpO3ZhciBFLGxlPW5ldyBlZShmdW5jdGlvbigpe30pO2ZvcihFIGluIGxlKSJYTUxIdHRwUmVxdWVzdCI9PT16JiYicmVzcG9uc2VCbG9iIj09PUV8fGZ1bmN0aW9uKEgpeyJmdW5jdGlvbiI9PXR5cGVvZiBsZVtIXT95W3pdLnByb3RvdHlwZVtIXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2ZlXVtIXS5hcHBseSh0aGlzW2ZlXSxhcmd1bWVudHMpfTp0KHlbel0ucHJvdG90eXBlLEgse3NldDpmdW5jdGlvbihZKXsiZnVuY3Rpb24iPT10eXBlb2YgWT8odGhpc1tmZV1bSF09cChZLHorIi4iK0gpLHBlKHRoaXNbZmVdW0hdLFkpKTp0aGlzW2ZlXVtIXT1ZfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tmZV1bSF19fSl9KEUpO2ZvcihFIGluIGVlKSJwcm90b3R5cGUiIT09RSYmZWUuaGFzT3duUHJvcGVydHkoRSkmJih5W3pdW0VdPWVlW0VdKX19ZnVuY3Rpb24gbmUoeixlZSxsZSl7Zm9yKHZhciBFPXo7RSYmIUUuaGFzT3duUHJvcGVydHkoZWUpOylFPWUoRSk7IUUmJnpbZWVdJiYoRT16KTt2YXIgSD1tKGVlKSxZPW51bGw7aWYoRSYmKCEoWT1FW0hdKXx8IUUuaGFzT3duUHJvcGVydHkoSCkpJiYoWT1FW0hdPUVbZWVdLFYoRSYmbihFLGVlKSkpKXt2YXIgc2U9bGUoWSxILGVlKTtFW2VlXT1mdW5jdGlvbigpe3JldHVybiBzZSh0aGlzLGFyZ3VtZW50cyl9LHBlKEVbZWVdLFkpfXJldHVybiBZfWZ1bmN0aW9uIGRlKHosZWUsbGUpe3ZhciBFPW51bGw7ZnVuY3Rpb24gSChZKXt2YXIgSj1ZLmRhdGE7cmV0dXJuIEouYXJnc1tKLmNiSWR4XT1mdW5jdGlvbigpe1kuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRS5hcHBseShKLnRhcmdldCxKLmFyZ3MpLFl9RT1uZSh6LGVlLGZ1bmN0aW9uKFkpe3JldHVybiBmdW5jdGlvbihKLHNlKXt2YXIgemU9bGUoSixzZSk7cmV0dXJuIHplLmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VbemUuY2JJZHhdP2YoemUubmFtZSxzZVt6ZS5jYklkeF0semUsSCk6WS5hcHBseShKLHNlKX19KX1mdW5jdGlvbiBwZSh6LGVlKXt6W20oIk9yaWdpbmFsRGVsZWdhdGUiKV09ZWV9dmFyIGplPSExLENlPSExO2Z1bmN0aW9uIGx0KCl7aWYoamUpcmV0dXJuIENlO2plPSEwO3RyeXt2YXIgej1NLm5hdmlnYXRvci51c2VyQWdlbnQ7KC0xIT09ei5pbmRleE9mKCJNU0lFICIpfHwtMSE9PXouaW5kZXhPZigiVHJpZGVudC8iKXx8LTEhPT16LmluZGV4T2YoIkVkZ2UvIikpJiYoQ2U9ITApfWNhdGNoe31yZXR1cm4gQ2V9Wm9uZS5fX2xvYWRfcGF0Y2goIlpvbmVBd2FyZVByb21pc2UiLGZ1bmN0aW9uKHosZWUsbGUpe3ZhciBFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsSD1PYmplY3QuZGVmaW5lUHJvcGVydHksSj1sZS5zeW1ib2wsc2U9W10semU9ITA9PT16W0ooIkRJU0FCTEVfV1JBUFBJTkdfVU5DQVVHSFRfUFJPTUlTRV9SRUpFQ1RJT04iKV0sZXQ9SigiUHJvbWlzZSIpLHFlPUooInRoZW4iKSxydD0iX19jcmVhdGlvblRyYWNlX18iO2xlLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24odHQpe2lmKGxlLnNob3dVbmNhdWdodEVycm9yKCkpe3ZhciBBdD10dCYmdHQucmVqZWN0aW9uO0F0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLEF0IGluc3RhbmNlb2YgRXJyb3I/QXQubWVzc2FnZTpBdCwiOyBab25lOiIsdHQuem9uZS5uYW1lLCI7IFRhc2s6Iix0dC50YXNrJiZ0dC50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLEF0LEF0IGluc3RhbmNlb2YgRXJyb3I/QXQuc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKHR0KX19LGxlLm1pY3JvdGFza0RyYWluRG9uZT1mdW5jdGlvbigpe2Zvcih2YXIgdHQ9ZnVuY3Rpb24oKXt2YXIgQXQ9c2Uuc2hpZnQoKTt0cnl7QXQuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgQXQudGhyb3dPcmlnaW5hbD9BdC5yZWplY3Rpb246QXR9KX1jYXRjaChDdCl7IWZ1bmN0aW9uKHR0KXtsZS5vblVuaGFuZGxlZEVycm9yKHR0KTt0cnl7dmFyIEF0PWVlW2R0XTsiZnVuY3Rpb24iPT10eXBlb2YgQXQmJkF0LmNhbGwodGhpcyx0dCl9Y2F0Y2h7fX0oQ3QpfX07c2UubGVuZ3RoOyl0dCgpfTt2YXIgZHQ9SigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBEdCh0dCl7cmV0dXJuIHR0JiZ0dC50aGVufWZ1bmN0aW9uIGNuKHR0KXtyZXR1cm4gdHR9ZnVuY3Rpb24gR2kodHQpe3JldHVybiBoZS5yZWplY3QodHQpfXZhciB2aT1KKCJzdGF0ZSIpLHBuPUooInZhbHVlIiksUG49SigiZmluYWxseSIpLEV0PUooInBhcmVudFByb21pc2VWYWx1ZSIpLHBpPUooInBhcmVudFByb21pc2VTdGF0ZSIpLFFuPSJQcm9taXNlLnRoZW4iLFZuPW51bGwsV249ITAsVXQ9ITEsTmk9MDtmdW5jdGlvbiB2bih0dCxBdCl7cmV0dXJuIGZ1bmN0aW9uKEN0KXt0cnl7cHIodHQsQXQsQ3QpfWNhdGNoKEplKXtwcih0dCwhMSxKZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgdHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKEN0KXtyZXR1cm4gZnVuY3Rpb24oKXt0dHx8KHR0PSEwLEN0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZmk9IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLGtuPUooImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBwcih0dCxBdCxDdCl7dmFyIEplPU9uKCk7aWYodHQ9PT1DdCl0aHJvdyBuZXcgVHlwZUVycm9yKGZpKTtpZih0dFt2aV09PT1Wbil7dmFyIFp0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIEN0fHwiZnVuY3Rpb24iPT10eXBlb2YgQ3QpJiYoWnQ9Q3QmJkN0LnRoZW4pfWNhdGNoKG5pKXtyZXR1cm4gSmUoZnVuY3Rpb24oKXtwcih0dCwhMSxuaSl9KSgpLHR0fWlmKEF0IT09VXQmJkN0IGluc3RhbmNlb2YgaGUmJkN0Lmhhc093blByb3BlcnR5KHZpKSYmQ3QuaGFzT3duUHJvcGVydHkocG4pJiZDdFt2aV0hPT1Wbil5cyhDdCkscHIodHQsQ3RbdmldLEN0W3BuXSk7ZWxzZSBpZihBdCE9PVV0JiYiZnVuY3Rpb24iPT10eXBlb2YgWnQpdHJ5e1p0LmNhbGwoQ3QsSmUodm4odHQsQXQpKSxKZSh2bih0dCwhMSkpKX1jYXRjaChuaSl7SmUoZnVuY3Rpb24oKXtwcih0dCwhMSxuaSl9KSgpfWVsc2V7dHRbdmldPUF0O3ZhciBCbj10dFtwbl07aWYodHRbcG5dPUN0LHR0W1BuXT09PVBuJiZBdD09PVduJiYodHRbdmldPXR0W3BpXSx0dFtwbl09dHRbRXRdKSxBdD09PVV0JiZDdCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgUm49ZWUuY3VycmVudFRhc2smJmVlLmN1cnJlbnRUYXNrLmRhdGEmJmVlLmN1cnJlbnRUYXNrLmRhdGFbcnRdO1JuJiZIKEN0LGtuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpSbn0pfWZvcih2YXIgWm49MDtabjxCbi5sZW5ndGg7KU1yKHR0LEJuW1puKytdLEJuW1puKytdLEJuW1puKytdLEJuW1puKytdKTtpZigwPT1Cbi5sZW5ndGgmJkF0PT1VdCl7dHRbdmldPU5pO3ZhciBLbj1DdDt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrZnVuY3Rpb24odHQpe3JldHVybiB0dCYmdHQudG9TdHJpbmc9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPyh0dC5jb25zdHJ1Y3RvciYmdHQuY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkodHQpOnR0P3R0LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHR0KX0oQ3QpKyhDdCYmQ3Quc3RhY2s/IlxuIitDdC5zdGFjazoiIikpfWNhdGNoKG5pKXtLbj1uaX16ZSYmKEtuLnRocm93T3JpZ2luYWw9ITApLEtuLnJlamVjdGlvbj1DdCxLbi5wcm9taXNlPXR0LEtuLnpvbmU9ZWUuY3VycmVudCxLbi50YXNrPWVlLmN1cnJlbnRUYXNrLHNlLnB1c2goS24pLGxlLnNjaGVkdWxlTWljcm9UYXNrKCl9fX1yZXR1cm4gdHR9dmFyIHJyPUooInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIik7ZnVuY3Rpb24geXModHQpe2lmKHR0W3ZpXT09PU5pKXt0cnl7dmFyIEF0PWVlW3JyXTtBdCYmImZ1bmN0aW9uIj09dHlwZW9mIEF0JiZBdC5jYWxsKHRoaXMse3JlamVjdGlvbjp0dFtwbl0scHJvbWlzZTp0dH0pfWNhdGNoe310dFt2aV09VXQ7Zm9yKHZhciBDdD0wO0N0PHNlLmxlbmd0aDtDdCsrKXR0PT09c2VbQ3RdLnByb21pc2UmJnNlLnNwbGljZShDdCwxKX19ZnVuY3Rpb24gTXIodHQsQXQsQ3QsSmUsWnQpe3lzKHR0KTt2YXIgQm49dHRbdmldLFJuPUJuPyJmdW5jdGlvbiI9PXR5cGVvZiBKZT9KZTpjbjoiZnVuY3Rpb24iPT10eXBlb2YgWnQ/WnQ6R2k7QXQuc2NoZWR1bGVNaWNyb1Rhc2soUW4sZnVuY3Rpb24oKXt0cnl7dmFyIFpuPXR0W3BuXSxLbj0hIUN0JiZQbj09PUN0W1BuXTtLbiYmKEN0W0V0XT1abixDdFtwaV09Qm4pO3ZhciBuaT1BdC5ydW4oUm4sdm9pZCAwLEtuJiZSbiE9PUdpJiZSbiE9PWNuP1tdOltabl0pO3ByKEN0LCEwLG5pKX1jYXRjaCh5aSl7cHIoQ3QsITEseWkpfX0sQ3QpfXZhciBndD1mdW5jdGlvbigpe30sbWU9ei5BZ2dyZWdhdGVFcnJvcixoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHR0KEF0KXt2YXIgQ3Q9dGhpcztpZighKEN0IGluc3RhbmNlb2YgdHQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7Q3RbdmldPVZuLEN0W3BuXT1bXTt0cnl7dmFyIEplPU9uKCk7QXQmJkF0KEplKHZuKEN0LFduKSksSmUodm4oQ3QsVXQpKSl9Y2F0Y2goWnQpe3ByKEN0LCExLFp0KX19cmV0dXJuIHR0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LHR0LnJlc29sdmU9ZnVuY3Rpb24oQXQpe3JldHVybiBwcihuZXcgdGhpcyhudWxsKSxXbixBdCl9LHR0LnJlamVjdD1mdW5jdGlvbihBdCl7cmV0dXJuIHByKG5ldyB0aGlzKG51bGwpLFV0LEF0KX0sdHQuYW55PWZ1bmN0aW9uKEF0KXtpZighQXR8fCJmdW5jdGlvbiIhPXR5cGVvZiBBdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgbWUoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciBDdD1bXSxKZT0wO3RyeXtmb3IodmFyIFp0PTAsQm49QXQ7WnQ8Qm4ubGVuZ3RoO1p0KyspSmUrKyxDdC5wdXNoKHR0LnJlc29sdmUoQm5bWnRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBtZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUplKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgbWUoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciBabj0hMSxLbj1bXTtyZXR1cm4gbmV3IHR0KGZ1bmN0aW9uKG5pLHlpKXtmb3IodmFyIGhyPTA7aHI8Q3QubGVuZ3RoO2hyKyspQ3RbaHJdLnRoZW4oZnVuY3Rpb24oUm8pe1pufHwoWm49ITAsbmkoUm8pKX0sZnVuY3Rpb24oUm8pe0tuLnB1c2goUm8pLDA9PS0tSmUmJihabj0hMCx5aShuZXcgbWUoS24sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LHR0LnJhY2U9ZnVuY3Rpb24oQXQpe3ZhciBDdCxKZSxadD1uZXcgdGhpcyhmdW5jdGlvbih5aSxocil7Q3Q9eWksSmU9aHJ9KTtmdW5jdGlvbiBCbih5aSl7Q3QoeWkpfWZ1bmN0aW9uIFJuKHlpKXtKZSh5aSl9Zm9yKHZhciBabj0wLEtuPUF0O1puPEtuLmxlbmd0aDtabisrKXt2YXIgbmk9S25bWm5dO0R0KG5pKXx8KG5pPXRoaXMucmVzb2x2ZShuaSkpLG5pLnRoZW4oQm4sUm4pfXJldHVybiBadH0sdHQuYWxsPWZ1bmN0aW9uKEF0KXtyZXR1cm4gdHQuYWxsV2l0aENhbGxiYWNrKEF0KX0sdHQuYWxsU2V0dGxlZD1mdW5jdGlvbihBdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgdHQ/dGhpczp0dCkuYWxsV2l0aENhbGxiYWNrKEF0LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oSmUpe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6SmV9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEplKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOkplfX19KX0sdHQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKEF0LEN0KXtmb3IodmFyIEplLFp0LEJuPW5ldyB0aGlzKGZ1bmN0aW9uKEtyLHZvKXtKZT1LcixadD12b30pLFJuPTIsWm49MCxLbj1bXSxuaT1mdW5jdGlvbihLcil7RHQoS3IpfHwoS3I9eWkucmVzb2x2ZShLcikpO3ZhciB2bz1abjt0cnl7S3IudGhlbihmdW5jdGlvbihIcil7S25bdm9dPUN0P0N0LnRoZW5DYWxsYmFjayhIcik6SHIsMD09LS1SbiYmSmUoS24pfSxmdW5jdGlvbihIcil7Q3Q/KEtuW3ZvXT1DdC5lcnJvckNhbGxiYWNrKEhyKSwwPT0tLVJuJiZKZShLbikpOlp0KEhyKX0pfWNhdGNoKEhyKXtadChIcil9Um4rKyxabisrfSx5aT10aGlzLGhyPTAsUm89QXQ7aHI8Um8ubGVuZ3RoO2hyKyspbmkoUm9baHJdKTtyZXR1cm4gMD09KFJuLT0yKSYmSmUoS24pLEJufSxPYmplY3QuZGVmaW5lUHJvcGVydHkodHQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0dC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiB0dH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx0dC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihBdCxDdCl7dmFyIEplLFp0PW51bGw9PT0oSmU9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUplP3ZvaWQgMDpKZVtTeW1ib2wuc3BlY2llc107KCFadHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFp0KSYmKFp0PXRoaXMuY29uc3RydWN0b3J8fHR0KTt2YXIgQm49bmV3IFp0KGd0KSxSbj1lZS5jdXJyZW50O3JldHVybiB0aGlzW3ZpXT09Vm4/dGhpc1twbl0ucHVzaChSbixCbixBdCxDdCk6TXIodGhpcyxSbixCbixBdCxDdCksQm59LHR0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihBdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLEF0KX0sdHQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oQXQpe3ZhciBDdCxKZT1udWxsPT09KEN0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT1DdD92b2lkIDA6Q3RbU3ltYm9sLnNwZWNpZXNdOyghSmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBKZSkmJihKZT10dCk7dmFyIFp0PW5ldyBKZShndCk7WnRbUG5dPVBuO3ZhciBCbj1lZS5jdXJyZW50O3JldHVybiB0aGlzW3ZpXT09Vm4/dGhpc1twbl0ucHVzaChCbixadCxBdCxBdCk6TXIodGhpcyxCbixadCxBdCxBdCksWnR9LHR0fSgpO2hlLnJlc29sdmU9aGUucmVzb2x2ZSxoZS5yZWplY3Q9aGUucmVqZWN0LGhlLnJhY2U9aGUucmFjZSxoZS5hbGw9aGUuYWxsO3ZhciBSZT16W2V0XT16LlByb21pc2U7ei5Qcm9taXNlPWhlO3ZhciBTbj1KKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIG1yKHR0KXt2YXIgQXQ9dHQucHJvdG90eXBlLEN0PUUoQXQsInRoZW4iKTtpZighQ3R8fCExIT09Q3Qud3JpdGFibGUmJkN0LmNvbmZpZ3VyYWJsZSl7dmFyIEplPUF0LnRoZW47QXRbcWVdPUplLHR0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFp0LEJuKXt2YXIgUm49dGhpcztyZXR1cm4gbmV3IGhlKGZ1bmN0aW9uKEtuLG5pKXtKZS5jYWxsKFJuLEtuLG5pKX0pLnRoZW4oWnQsQm4pfSx0dFtTbl09ITB9fXJldHVybiBsZS5wYXRjaFRoZW49bXIsUmUmJihtcihSZSksbmUoeiwiZmV0Y2giLGZ1bmN0aW9uKHR0KXtyZXR1cm4gZnVuY3Rpb24odHQpe3JldHVybiBmdW5jdGlvbihBdCxDdCl7dmFyIEplPXR0LmFwcGx5KEF0LEN0KTtpZihKZSBpbnN0YW5jZW9mIGhlKXJldHVybiBKZTt2YXIgWnQ9SmUuY29uc3RydWN0b3I7cmV0dXJuIFp0W1NuXXx8bXIoWnQpLEplfX0odHQpfSkpLFByb21pc2VbZWUuX19zeW1ib2xfXygidW5jYXVnaHRQcm9taXNlRXJyb3JzIildPXNlLGhlfSksWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbih6KXt2YXIgZWU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGxlPW0oIk9yaWdpbmFsRGVsZWdhdGUiKSxFPW0oIlByb21pc2UiKSxIPW0oIkVycm9yIiksWT1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXt2YXIgZXQ9dGhpc1tsZV07aWYoZXQpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV0P2VlLmNhbGwoZXQpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCk7aWYodGhpcz09PVByb21pc2Upe3ZhciBxZT16W0VdO2lmKHFlKXJldHVybiBlZS5jYWxsKHFlKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBydD16W0hdO2lmKHJ0KXJldHVybiBlZS5jYWxsKHJ0KX19cmV0dXJuIGVlLmNhbGwodGhpcyl9O1lbbGVdPWVlLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1ZO3ZhciBKPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlJiZ0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6Si5jYWxsKHRoaXMpfX0pO3ZhciBNdD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIHB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe010PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixwdCxwdCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLHB0LHB0KX1jYXRjaHtNdD0hMX12YXIgdGksa2ksRmksWixMLE9lPXt1c2VHOiEwfSxBbj17fSx3dD17fSxvbj1uZXcgUmVnRXhwKCJeIit1KyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksdmU9bSgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gbXQoeixlZSl7dmFyIGxlPShlZT9lZSh6KTp6KStkLEU9KGVlP2VlKHopOnopK2MsSD11K2xlLFk9dStFO0FuW3pdPXt9LEFuW3pdW2RdPUgsQW5bel1bY109WX1mdW5jdGlvbiBmdCh6LGVlLGxlLEUpe3ZhciBIPUUmJkUuYWRkfHxvLFk9RSYmRS5ybXx8cyxKPUUmJkUubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHNlPUUmJkUucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLHplPW0oSCksZXQ9Ii4iK0grIjoiLHFlPSJwcmVwZW5kTGlzdGVuZXIiLHJ0PSIuIitxZSsiOiIsZHQ9ZnVuY3Rpb24oUG4sRXQscGkpe2lmKCFQbi5pc1JlbW92ZWQpe3ZhciBWbixRbj1Qbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIFFuJiZRbi5oYW5kbGVFdmVudCYmKFBuLmNhbGxiYWNrPWZ1bmN0aW9uKE5pKXtyZXR1cm4gUW4uaGFuZGxlRXZlbnQoTmkpfSxQbi5vcmlnaW5hbERlbGVnYXRlPVFuKTt0cnl7UG4uaW52b2tlKFBuLEV0LFtwaV0pfWNhdGNoKE5pKXtWbj1OaX12YXIgV249UG4ub3B0aW9ucztyZXR1cm4gV24mJiJvYmplY3QiPT10eXBlb2YgV24mJlduLm9uY2UmJkV0W1ldLmNhbGwoRXQscGkudHlwZSxQbi5vcmlnaW5hbERlbGVnYXRlP1BuLm9yaWdpbmFsRGVsZWdhdGU6UG4uY2FsbGJhY2ssV24pLFZufX07ZnVuY3Rpb24gU3QoUG4sRXQscGkpe2lmKEV0PUV0fHx6LmV2ZW50KXt2YXIgUW49UG58fEV0LnRhcmdldHx8eixWbj1RbltBbltFdC50eXBlXVtwaT9jOmRdXTtpZihWbil7dmFyIFduPVtdO2lmKDE9PT1Wbi5sZW5ndGgpKFV0PWR0KFZuWzBdLFFuLEV0KSkmJlduLnB1c2goVXQpO2Vsc2UgZm9yKHZhciBOaT1Wbi5zbGljZSgpLHZuPTA7dm48TmkubGVuZ3RoJiYoIUV0fHwhMCE9PUV0W3ZlXSk7dm4rKyl7dmFyIFV0OyhVdD1kdChOaVt2bl0sUW4sRXQpKSYmV24ucHVzaChVdCl9aWYoMT09PVduLmxlbmd0aCl0aHJvdyBXblswXTt2YXIgT249ZnVuY3Rpb24oZmkpe3ZhciBrbj1XbltmaV07ZWUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBrbn0pfTtmb3Iodm49MDt2bjxXbi5sZW5ndGg7dm4rKylPbih2bil9fX12YXIgRHQ9ZnVuY3Rpb24oUG4pe3JldHVybiBTdCh0aGlzLFBuLCExKX0sY249ZnVuY3Rpb24oUG4pe3JldHVybiBTdCh0aGlzLFBuLCEwKX07ZnVuY3Rpb24gR2koUG4sRXQpe2lmKCFQbilyZXR1cm4hMTt2YXIgcGk9ITA7RXQmJnZvaWQgMCE9PUV0LnVzZUcmJihwaT1FdC51c2VHKTt2YXIgUW49RXQmJkV0LnZoLFZuPSEwO0V0JiZ2b2lkIDAhPT1FdC5jaGtEdXAmJihWbj1FdC5jaGtEdXApO3ZhciBXbj0hMTtFdCYmdm9pZCAwIT09RXQucnQmJihXbj1FdC5ydCk7Zm9yKHZhciBVdD1QbjtVdCYmIVV0Lmhhc093blByb3BlcnR5KEgpOylVdD1lKFV0KTtpZighVXQmJlBuW0hdJiYoVXQ9UG4pLCFVdHx8VXRbemVdKXJldHVybiExO3ZhciBycixOaT1FdCYmRXQuZXZlbnROYW1lVG9TdHJpbmcsdm49e30sT249VXRbemVdPVV0W0hdLGZpPVV0W20oWSldPVV0W1ldLGtuPVV0W20oSildPVV0W0pdLHByPVV0W20oc2UpXT1VdFtzZV07RXQmJkV0LnByZXBlbmQmJihycj1VdFttKEV0LnByZXBlbmQpXT1VdFtFdC5wcmVwZW5kXSk7dmFyIFJlPXBpP2Z1bmN0aW9uKEplKXtpZighdm4uaXNFeGlzdGluZylyZXR1cm4gT24uY2FsbCh2bi50YXJnZXQsdm4uZXZlbnROYW1lLHZuLmNhcHR1cmU/Y246RHQsdm4ub3B0aW9ucyl9OmZ1bmN0aW9uKEplKXtyZXR1cm4gT24uY2FsbCh2bi50YXJnZXQsdm4uZXZlbnROYW1lLEplLmludm9rZSx2bi5vcHRpb25zKX0sU249cGk/ZnVuY3Rpb24oSmUpe2lmKCFKZS5pc1JlbW92ZWQpe3ZhciBadD1BbltKZS5ldmVudE5hbWVdLEJuPXZvaWQgMDtadCYmKEJuPVp0W0plLmNhcHR1cmU/YzpkXSk7dmFyIFJuPUJuJiZKZS50YXJnZXRbQm5dO2lmKFJuKWZvcih2YXIgWm49MDtabjxSbi5sZW5ndGg7Wm4rKylpZihSbltabl09PT1KZSl7Um4uc3BsaWNlKFpuLDEpLEplLmlzUmVtb3ZlZD0hMCwwPT09Um4ubGVuZ3RoJiYoSmUuYWxsUmVtb3ZlZD0hMCxKZS50YXJnZXRbQm5dPW51bGwpO2JyZWFrfX1pZihKZS5hbGxSZW1vdmVkKXJldHVybiBmaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuY2FwdHVyZT9jbjpEdCxKZS5vcHRpb25zKX06ZnVuY3Rpb24oSmUpe3JldHVybiBmaS5jYWxsKEplLnRhcmdldCxKZS5ldmVudE5hbWUsSmUuaW52b2tlLEplLm9wdGlvbnMpfSx1bD1FdCYmRXQuZGlmZj9FdC5kaWZmOmZ1bmN0aW9uKEplLFp0KXt2YXIgQm49dHlwZW9mIFp0O3JldHVybiJmdW5jdGlvbiI9PT1CbiYmSmUuY2FsbGJhY2s9PT1adHx8Im9iamVjdCI9PT1CbiYmSmUub3JpZ2luYWxEZWxlZ2F0ZT09PVp0fSx0dD1ab25lW20oIlVOUEFUQ0hFRF9FVkVOVFMiKV0sQXQ9elttKCJQQVNTSVZFX0VWRU5UUyIpXSxDdD1mdW5jdGlvbihKZSxadCxCbixSbixabixLbil7cmV0dXJuIHZvaWQgMD09PVpuJiYoWm49ITEpLHZvaWQgMD09PUtuJiYoS249ITEpLGZ1bmN0aW9uKCl7dmFyIG5pPXRoaXN8fHoseWk9YXJndW1lbnRzWzBdO0V0JiZFdC50cmFuc2ZlckV2ZW50TmFtZSYmKHlpPUV0LnRyYW5zZmVyRXZlbnROYW1lKHlpKSk7dmFyIGhyPWFyZ3VtZW50c1sxXTtpZighaHIpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihLJiYidW5jYXVnaHRFeGNlcHRpb24iPT09eWkpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgUm89ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhyKXtpZighaHIuaGFuZGxlRXZlbnQpcmV0dXJuIEplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtSbz0hMH1pZighUW58fFFuKEplLGhyLG5pLGFyZ3VtZW50cykpe3ZhciBLYz1NdCYmISFBdCYmLTEhPT1BdC5pbmRleE9mKHlpKSxLcj1mdW5jdGlvbihKZSxadCl7cmV0dXJuIU10JiYib2JqZWN0Ij09dHlwZW9mIEplJiZKZT8hIUplLmNhcHR1cmU6TXQmJlp0PyJib29sZWFuIj09dHlwZW9mIEplP3tjYXB0dXJlOkplLHBhc3NpdmU6ITB9OkplPyJvYmplY3QiPT10eXBlb2YgSmUmJiExIT09SmUucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSmUpLHtwYXNzaXZlOiEwfSk6SmU6e3Bhc3NpdmU6ITB9OkplfShhcmd1bWVudHNbMl0sS2MpO2lmKHR0KWZvcih2YXIgdm89MDt2bzx0dC5sZW5ndGg7dm8rKylpZih5aT09PXR0W3ZvXSlyZXR1cm4gS2M/SmUuY2FsbChuaSx5aSxocixLcik6SmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBIcj0hIUtyJiYoImJvb2xlYW4iPT10eXBlb2YgS3J8fEtyLmNhcHR1cmUpLE1tPSEoIUtyfHwib2JqZWN0IiE9dHlwZW9mIEtyKSYmS3Iub25jZSxEaWU9Wm9uZS5jdXJyZW50LE9BPUFuW3lpXTtPQXx8KG10KHlpLE5pKSxPQT1Bblt5aV0pO3ZhciBIVj1PQVtIcj9jOmRdLHdtPW5pW0hWXSx6Vj0hMTtpZih3bSl7aWYoelY9ITAsVm4pZm9yKHZvPTA7dm88d20ubGVuZ3RoO3ZvKyspaWYodWwod21bdm9dLGhyKSlyZXR1cm59ZWxzZSB3bT1uaVtIVl09W107dmFyIHRDLFVWPW5pLmNvbnN0cnVjdG9yLm5hbWUsalY9d3RbVVZdO2pWJiYodEM9alZbeWldKSx0Q3x8KHRDPVVWK1p0KyhOaT9OaSh5aSk6eWkpKSx2bi5vcHRpb25zPUtyLE1tJiYodm4ub3B0aW9ucy5vbmNlPSExKSx2bi50YXJnZXQ9bmksdm4uY2FwdHVyZT1Icix2bi5ldmVudE5hbWU9eWksdm4uaXNFeGlzdGluZz16Vjt2YXIgQ189cGk/T2U6dm9pZCAwO0NfJiYoQ18udGFza0RhdGE9dm4pO3ZhciBRZD1EaWUuc2NoZWR1bGVFdmVudFRhc2sodEMsaHIsQ18sQm4sUm4pO2lmKHZuLnRhcmdldD1udWxsLENfJiYoQ18udGFza0RhdGE9bnVsbCksTW0mJihLci5vbmNlPSEwKSwhTXQmJiJib29sZWFuIj09dHlwZW9mIFFkLm9wdGlvbnN8fChRZC5vcHRpb25zPUtyKSxRZC50YXJnZXQ9bmksUWQuY2FwdHVyZT1IcixRZC5ldmVudE5hbWU9eWksUm8mJihRZC5vcmlnaW5hbERlbGVnYXRlPWhyKSxLbj93bS51bnNoaWZ0KFFkKTp3bS5wdXNoKFFkKSxabilyZXR1cm4gbml9fX07cmV0dXJuIFV0W0hdPUN0KE9uLGV0LFJlLFNuLFduKSxyciYmKFV0W3FlXT1DdChycixydCxmdW5jdGlvbihKZSl7cmV0dXJuIHJyLmNhbGwodm4udGFyZ2V0LHZuLmV2ZW50TmFtZSxKZS5pbnZva2Usdm4ub3B0aW9ucyl9LFNuLFduLCEwKSksVXRbWV09ZnVuY3Rpb24oKXt2YXIgSmU9dGhpc3x8eixadD1hcmd1bWVudHNbMF07RXQmJkV0LnRyYW5zZmVyRXZlbnROYW1lJiYoWnQ9RXQudHJhbnNmZXJFdmVudE5hbWUoWnQpKTt2YXIgQm49YXJndW1lbnRzWzJdLFJuPSEhQm4mJigiYm9vbGVhbiI9PXR5cGVvZiBCbnx8Qm4uY2FwdHVyZSksWm49YXJndW1lbnRzWzFdO2lmKCFabilyZXR1cm4gZmkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFRbnx8UW4oZmksWm4sSmUsYXJndW1lbnRzKSl7dmFyIG5pLEtuPUFuW1p0XTtLbiYmKG5pPUtuW1JuP2M6ZF0pO3ZhciB5aT1uaSYmSmVbbmldO2lmKHlpKWZvcih2YXIgaHI9MDtocjx5aS5sZW5ndGg7aHIrKyl7dmFyIFJvPXlpW2hyXTtpZih1bChSbyxabikpcmV0dXJuIHlpLnNwbGljZShociwxKSxSby5pc1JlbW92ZWQ9ITAsMD09PXlpLmxlbmd0aCYmKFJvLmFsbFJlbW92ZWQ9ITAsSmVbbmldPW51bGwsInN0cmluZyI9PXR5cGVvZiBadCkmJihKZVt1KyJPTl9QUk9QRVJUWSIrWnRdPW51bGwpLFJvLnpvbmUuY2FuY2VsVGFzayhSbyksV24/SmU6dm9pZCAwfXJldHVybiBmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxVdFtKXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHx6LFp0PWFyZ3VtZW50c1swXTtFdCYmRXQudHJhbnNmZXJFdmVudE5hbWUmJihadD1FdC50cmFuc2ZlckV2ZW50TmFtZShadCkpO2Zvcih2YXIgQm49W10sUm49b2UoSmUsTmk/TmkoWnQpOlp0KSxabj0wO1puPFJuLmxlbmd0aDtabisrKXt2YXIgS249Um5bWm5dO0JuLnB1c2goS24ub3JpZ2luYWxEZWxlZ2F0ZT9Lbi5vcmlnaW5hbERlbGVnYXRlOktuLmNhbGxiYWNrKX1yZXR1cm4gQm59LFV0W3NlXT1mdW5jdGlvbigpe3ZhciBKZT10aGlzfHx6LFp0PWFyZ3VtZW50c1swXTtpZihadCl7RXQmJkV0LnRyYW5zZmVyRXZlbnROYW1lJiYoWnQ9RXQudHJhbnNmZXJFdmVudE5hbWUoWnQpKTt2YXIgeWk9QW5bWnRdO2lmKHlpKXt2YXIgS2M9SmVbeWlbZF1dLEtyPUplW3lpW2NdXTtpZihLYylmb3IodmFyIHZvPUtjLnNsaWNlKCksUm49MDtSbjx2by5sZW5ndGg7Um4rKyl0aGlzW1ldLmNhbGwodGhpcyxadCwoSHI9dm9bUm5dKS5vcmlnaW5hbERlbGVnYXRlP0hyLm9yaWdpbmFsRGVsZWdhdGU6SHIuY2FsbGJhY2ssSHIub3B0aW9ucyk7aWYoS3IpZm9yKHZvPUtyLnNsaWNlKCksUm49MDtSbjx2by5sZW5ndGg7Um4rKyl7dmFyIEhyO3RoaXNbWV0uY2FsbCh0aGlzLFp0LChIcj12b1tSbl0pLm9yaWdpbmFsRGVsZWdhdGU/SHIub3JpZ2luYWxEZWxlZ2F0ZTpIci5jYWxsYmFjayxIci5vcHRpb25zKX19fWVsc2V7dmFyIEJuPU9iamVjdC5rZXlzKEplKTtmb3IoUm49MDtSbjxCbi5sZW5ndGg7Um4rKyl7dmFyIEtuPW9uLmV4ZWMoQm5bUm5dKSxuaT1LbiYmS25bMV07bmkmJiJyZW1vdmVMaXN0ZW5lciIhPT1uaSYmdGhpc1tzZV0uY2FsbCh0aGlzLG5pKX10aGlzW3NlXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoV24pcmV0dXJuIHRoaXN9LHBlKFV0W0hdLE9uKSxwZShVdFtZXSxmaSkscHImJnBlKFV0W3NlXSxwciksa24mJnBlKFV0W0pdLGtuKSwhMH1mb3IodmFyIHZpPVtdLHBuPTA7cG48bGUubGVuZ3RoO3BuKyspdmlbcG5dPUdpKGxlW3BuXSxFKTtyZXR1cm4gdml9ZnVuY3Rpb24gb2UoeixlZSl7aWYoIWVlKXt2YXIgbGU9W107Zm9yKHZhciBFIGluIHope3ZhciBIPW9uLmV4ZWMoRSksWT1IJiZIWzFdO2lmKFkmJighZWV8fFk9PT1lZSkpe3ZhciBKPXpbRV07aWYoSilmb3IodmFyIHNlPTA7c2U8Si5sZW5ndGg7c2UrKylsZS5wdXNoKEpbc2VdKX19cmV0dXJuIGxlfXZhciB6ZT1BbltlZV07emV8fChtdChlZSksemU9QW5bZWVdKTt2YXIgZXQ9elt6ZVtkXV0scWU9elt6ZVtjXV07cmV0dXJuIGV0P3FlP2V0LmNvbmNhdChxZSk6ZXQuc2xpY2UoKTpxZT9xZS5zbGljZSgpOltdfWZ1bmN0aW9uIHN0KHosZWUpe3ZhciBsZT16LkV2ZW50O2xlJiZsZS5wcm90b3R5cGUmJmVlLnBhdGNoTWV0aG9kKGxlLnByb3RvdHlwZSwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIixmdW5jdGlvbihFKXtyZXR1cm4gZnVuY3Rpb24oSCxZKXtIW3ZlXT0hMCxFJiZFLmFwcGx5KEgsWSl9fSl9ZnVuY3Rpb24gWWUoeixlZSxsZSxFLEgpe3ZhciBZPVpvbmUuX19zeW1ib2xfXyhFKTtpZighZWVbWV0pe3ZhciBKPWVlW1ldPWVlW0VdO2VlW0VdPWZ1bmN0aW9uKHNlLHplLGV0KXtyZXR1cm4gemUmJnplLnByb3RvdHlwZSYmSC5mb3JFYWNoKGZ1bmN0aW9uKHFlKXt2YXIgcnQ9IiIuY29uY2F0KGxlLCIuIikuY29uY2F0KEUsIjo6IikrcWUsZHQ9emUucHJvdG90eXBlO3RyeXtpZihkdC5oYXNPd25Qcm9wZXJ0eShxZSkpe3ZhciBTdD16Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihkdCxxZSk7U3QmJlN0LnZhbHVlPyhTdC52YWx1ZT16LndyYXBXaXRoQ3VycmVudFpvbmUoU3QudmFsdWUscnQpLHouX3JlZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLHFlLFN0KSk6ZHRbcWVdJiYoZHRbcWVdPXoud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtxZV0scnQpKX1lbHNlIGR0W3FlXSYmKGR0W3FlXT16LndyYXBXaXRoQ3VycmVudFpvbmUoZHRbcWVdLHJ0KSl9Y2F0Y2h7fX0pLEouY2FsbChlZSxzZSx6ZSxldCl9LHouYXR0YWNoT3JpZ2luVG9QYXRjaGVkKGVlW0VdLEopfX1mdW5jdGlvbiBfdCh6LGVlLGxlKXtpZighbGV8fDA9PT1sZS5sZW5ndGgpcmV0dXJuIGVlO3ZhciBFPWxlLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4gWS50YXJnZXQ9PT16fSk7aWYoIUV8fDA9PT1FLmxlbmd0aClyZXR1cm4gZWU7dmFyIEg9RVswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiBlZS5maWx0ZXIoZnVuY3Rpb24oWSl7cmV0dXJuLTE9PT1ILmluZGV4T2YoWSl9KX1mdW5jdGlvbiB1dCh6LGVlLGxlLEUpe3omJmNlKHosX3QoeixlZSxsZSksRSl9ZnVuY3Rpb24gc24oeil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHopLmZpbHRlcihmdW5jdGlvbihlZSl7cmV0dXJuIGVlLnN0YXJ0c1dpdGgoIm9uIikmJmVlLmxlbmd0aD4yfSkubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUuc3Vic3RyaW5nKDIpfSl9ZnVuY3Rpb24gdnQoeixlZSxsZSl7dmFyIEU9bGUuY29uZmlndXJhYmxlO3JldHVybiBtbih6LGVlLGxlPUxlKHosZWUsbGUpLEUpfWZ1bmN0aW9uIGVuKHosZWUpe3JldHVybiB6JiZ6W0xdJiZ6W0xdW2VlXX1mdW5jdGlvbiBMZSh6LGVlLGxlKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKGxlKXx8KGxlLmNvbmZpZ3VyYWJsZT0hMCksbGUuY29uZmlndXJhYmxlfHwoIXpbTF0mJiFPYmplY3QuaXNGcm96ZW4oeikmJmtpKHosTCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSx6W0xdJiYoeltMXVtlZV09ITApKSxsZX1mdW5jdGlvbiBtbih6LGVlLGxlLEUpe3RyeXtyZXR1cm4ga2koeixlZSxsZSl9Y2F0Y2goSil7aWYoIWxlLmNvbmZpZ3VyYWJsZSl0aHJvdyBKO3R5cGVvZiBFPiJ1Ij9kZWxldGUgbGUuY29uZmlndXJhYmxlOmxlLmNvbmZpZ3VyYWJsZT1FO3RyeXtyZXR1cm4ga2koeixlZSxsZSl9Y2F0Y2goc2Upe3ZhciBIPSExO2lmKCgiY3JlYXRlZENhbGxiYWNrIj09PWVlfHwiYXR0YWNoZWRDYWxsYmFjayI9PT1lZXx8ImRldGFjaGVkQ2FsbGJhY2siPT09ZWV8fCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siPT09ZWUpJiYoSD0hMCksIUgpdGhyb3cgc2U7dmFyIFk9bnVsbDt0cnl7WT1KU09OLnN0cmluZ2lmeShsZSl9Y2F0Y2h7WT1sZS50b1N0cmluZygpfWNvbnNvbGUubG9nKCJBdHRlbXB0aW5nIHRvIGNvbmZpZ3VyZSAnIi5jb25jYXQoZWUsIicgd2l0aCBkZXNjcmlwdG9yICciKS5jb25jYXQoWSwiJyBvbiBvYmplY3QgJyIpLmNvbmNhdCh6LCInIGFuZCBnb3QgZXJyb3IsIGdpdmluZyB1cDogIikuY29uY2F0KHNlKSl9fX1ab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oeixlZSxsZSl7dmFyIEU9c24oeik7bGUucGF0Y2hPblByb3BlcnRpZXM9Y2UsbGUucGF0Y2hNZXRob2Q9bmUsbGUuYmluZEFyZ3VtZW50cz1SLGxlLnBhdGNoTWFjcm9UYXNrPWRlO3ZhciBIPWVlLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKSxZPWVlLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTt6W1ldJiYoeltIXT16W1ldKSx6W0hdJiYoZWVbSF09ZWVbWV09eltIXSksbGUucGF0Y2hFdmVudFByb3RvdHlwZT1zdCxsZS5wYXRjaEV2ZW50VGFyZ2V0PWZ0LGxlLmlzSUVPckVkZ2U9bHQsbGUuT2JqZWN0RGVmaW5lUHJvcGVydHk9dCxsZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9bixsZS5PYmplY3RDcmVhdGU9aSxsZS5BcnJheVNsaWNlPXIsbGUucGF0Y2hDbGFzcz1iZSxsZS53cmFwV2l0aEN1cnJlbnRab25lPXAsbGUuZmlsdGVyUHJvcGVydGllcz1fdCxsZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9cGUsbGUuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LGxlLnBhdGNoQ2FsbGJhY2tzPVllLGxlLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczp3dCx6b25lU3ltYm9sRXZlbnROYW1lczpBbixldmVudE5hbWVzOkUsaXNCcm93c2VyOnhlLGlzTWl4OlhlLGlzTm9kZTpLLFRSVUVfU1RSOmMsRkFMU0VfU1RSOmQsWk9ORV9TWU1CT0xfUFJFRklYOnUsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjpvLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6c319fSk7dmFyIHosem89ZnUoZnUoZnUoZnUoZnUoZnUoZnUoZnUoW10sWyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0sITApLFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLCEwKSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sITApLFsidG9nZ2xlIl0sITApLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sITApLFsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sITApLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLCEwKSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdLCEwKTsoej10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KVsoImxlZ2FjeVBhdGNoIiwoei5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyIpKyJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBFPXouWm9uZTtFLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLGZ1bmN0aW9uKEgsWSxKKXtKLl9yZWRlZmluZVByb3BlcnR5PXZ0LHRpPVpvbmUuX19zeW1ib2xfXyxraT1PYmplY3RbdGkoImRlZmluZVByb3BlcnR5IildPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxGaT1PYmplY3RbdGkoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFo9T2JqZWN0LmNyZWF0ZSxMPXRpKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oeixlZSxsZSl7aWYoZW4oeixlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrZWUrIicgb2YgIit6KTt2YXIgRT1sZS5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1lZSYmKGxlPUxlKHosZWUsbGUpKSxtbih6LGVlLGxlLEUpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbih6LGVlKXtPYmplY3Qua2V5cyhlZSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeixKLGVlW0pdKX0pO2Zvcih2YXIgbGU9MCxFPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZWUpO2xlPEUubGVuZ3RoO2xlKyspe3ZhciBIPUVbbGVdO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSCk/LmVudW1lcmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LEgsZWVbSF0pfXJldHVybiB6fSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKHosZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJiFPYmplY3QuaXNGcm96ZW4oZWUpJiZPYmplY3Qua2V5cyhlZSkuZm9yRWFjaChmdW5jdGlvbihsZSl7ZWVbbGVdPUxlKHosbGUsZWVbbGVdKX0pLFooeixlZSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZnVuY3Rpb24oeixlZSl7dmFyIGxlPUZpKHosZWUpO3JldHVybiBsZSYmZW4oeixlZSkmJihsZS5jb25maWd1cmFibGU9ITEpLGxlfX0pLEUuX19sb2FkX3BhdGNoKCJyZWdpc3RlckVsZW1lbnQiLGZ1bmN0aW9uKEgsWSxKKXshZnVuY3Rpb24oeixlZSl7dmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiJyZWdpc3RlckVsZW1lbnQiaW4gei5kb2N1bWVudCYmZWUucGF0Y2hDYWxsYmFja3MoZWUsZG9jdW1lbnQsIkRvY3VtZW50IiwicmVnaXN0ZXJFbGVtZW50IixbImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfShILEopfSksRS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0TGVnYWN5IixmdW5jdGlvbihILFksSil7KGZ1bmN0aW9uKHosZWUpe3ZhciBsZT1lZS5nZXRHbG9iYWxPYmplY3RzKCksRT1sZS5ldmVudE5hbWVzLEg9bGUuZ2xvYmFsU291cmNlcyxZPWxlLnpvbmVTeW1ib2xFdmVudE5hbWVzLEo9bGUuVFJVRV9TVFIsc2U9bGUuRkFMU0VfU1RSLHplPWxlLlpPTkVfU1lNQk9MX1BSRUZJWCxxZT0iQXBwbGljYXRpb25DYWNoZSxFdmVudFNvdXJjZSxGaWxlUmVhZGVyLElucHV0TWV0aG9kQ29udGV4dCxNZWRpYUNvbnRyb2xsZXIsTWVzc2FnZVBvcnQsTm9kZSxQZXJmb3JtYW5jZSxTVkdFbGVtZW50SW5zdGFuY2UsU2hhcmVkV29ya2VyLFRleHRUcmFjayxUZXh0VHJhY2tDdWUsVGV4dFRyYWNrTGlzdCxXZWJLaXROYW1lZEZsb3csV2luZG93LFdvcmtlcixXb3JrZXJHbG9iYWxTY29wZSxYTUxIdHRwUmVxdWVzdCxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0LFhNTEh0dHBSZXF1ZXN0VXBsb2FkLElEQlJlcXVlc3QsSURCT3BlbkRCUmVxdWVzdCxJREJEYXRhYmFzZSxJREJUcmFuc2FjdGlvbixJREJDdXJzb3IsREJJbmRleCxXZWJTb2NrZXQiLnNwbGl0KCIsIikscnQ9IkV2ZW50VGFyZ2V0IixkdD1bXSxTdD16Lnd0ZixEdD0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLnNwbGl0KCIsIik7U3Q/ZHQ9RHQubWFwKGZ1bmN0aW9uKE1yKXtyZXR1cm4iSFRNTCIrTXIrIkVsZW1lbnQifSkuY29uY2F0KHFlKTp6W3J0XT9kdC5wdXNoKHJ0KTpkdD1xZTtmb3IodmFyIGNuPXouX19ab25lX2Rpc2FibGVfSUVfY2hlY2t8fCExLEdpPXouX19ab25lX2VuYWJsZV9jcm9zc19jb250ZXh0X2NoZWNrfHwhMSx2aT1lZS5pc0lFT3JFZGdlKCksUG49IltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSIsRXQ9ImZ1bmN0aW9uIF9fQlJPV1NFUlRPT0xTX0NPTlNPTEVfU0FGRUZVTkMoKSB7IFtuYXRpdmUgY29kZV0gfSIscGk9e01TUG9pbnRlckNhbmNlbDoicG9pbnRlcmNhbmNlbCIsTVNQb2ludGVyRG93bjoicG9pbnRlcmRvd24iLE1TUG9pbnRlckVudGVyOiJwb2ludGVyZW50ZXIiLE1TUG9pbnRlckhvdmVyOiJwb2ludGVyaG92ZXIiLE1TUG9pbnRlckxlYXZlOiJwb2ludGVybGVhdmUiLE1TUG9pbnRlck1vdmU6InBvaW50ZXJtb3ZlIixNU1BvaW50ZXJPdXQ6InBvaW50ZXJvdXQiLE1TUG9pbnRlck92ZXI6InBvaW50ZXJvdmVyIixNU1BvaW50ZXJVcDoicG9pbnRlcnVwIn0sUW49MDtRbjxFLmxlbmd0aDtRbisrKXt2YXIgTmk9emUrKChWbj1FW1FuXSkrc2UpLHZuPXplKyhWbitKKTtZW1ZuXT17fSxZW1ZuXVtzZV09TmksWVtWbl1bSl09dm59Zm9yKFFuPTA7UW48RHQubGVuZ3RoO1FuKyspZm9yKHZhciBPbj1EdFtRbl0sZmk9SFtPbl09e30sa249MDtrbjxFLmxlbmd0aDtrbisrKXt2YXIgVm47ZmlbVm49RVtrbl1dPU9uKyIuYWRkRXZlbnRMaXN0ZW5lcjoiK1ZufXZhciBycj1bXTtmb3IoUW49MDtRbjxkdC5sZW5ndGg7UW4rKyl7dmFyIHlzPXpbZHRbUW5dXTtyci5wdXNoKHlzJiZ5cy5wcm90b3R5cGUpfWVlLnBhdGNoRXZlbnRUYXJnZXQoeixlZSxycix7dmg6ZnVuY3Rpb24oTXIsZnIsZ3QsbWUpe2lmKCFjbiYmdmkpaWYoR2kpdHJ5e2lmKChoZT1mci50b1N0cmluZygpKT09PVBufHxoZT09RXQpcmV0dXJuIE1yLmFwcGx5KGd0LG1lKSwhMX1jYXRjaHtyZXR1cm4gTXIuYXBwbHkoZ3QsbWUpLCExfWVsc2V7dmFyIGhlO2lmKChoZT1mci50b1N0cmluZygpKT09PVBufHxoZT09RXQpcmV0dXJuIE1yLmFwcGx5KGd0LG1lKSwhMX1lbHNlIGlmKEdpKXRyeXtmci50b1N0cmluZygpfWNhdGNoe3JldHVybiBNci5hcHBseShndCxtZSksITF9cmV0dXJuITB9LHRyYW5zZmVyRXZlbnROYW1lOmZ1bmN0aW9uKE1yKXtyZXR1cm4gcGlbTXJdfHxNcn19KSxab25lW2VlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXT0hIXpbcnRdfSkoSCxKKSxmdW5jdGlvbih6LGVlKXt2YXIgbGU9ei5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKCFsZS5pc05vZGV8fGxlLmlzTWl4KSYmIWZ1bmN0aW9uKHosZWUpe3ZhciBsZT16LmdldEdsb2JhbE9iamVjdHMoKTtpZigobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJiF6Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKSYmdHlwZW9mIEVsZW1lbnQ8InUiKXt2YXIgWT16Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpO2lmKFkmJiFZLmNvbmZpZ3VyYWJsZSlyZXR1cm4hMTtpZihZKXt6Lk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSk7dmFyIHNlPSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikub25jbGljaztyZXR1cm4gei5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIsWSksc2V9fXZhciB6ZT1lZS5YTUxIdHRwUmVxdWVzdDtpZighemUpcmV0dXJuITE7dmFyIGV0PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLHFlPXplLnByb3RvdHlwZSxydD16Lk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihxZSxldCk7aWYocnQpcmV0dXJuIHouT2JqZWN0RGVmaW5lUHJvcGVydHkocWUsZXQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pLHNlPSEhKGR0PW5ldyB6ZSkub25yZWFkeXN0YXRlY2hhbmdlLHouT2JqZWN0RGVmaW5lUHJvcGVydHkocWUsZXQscnR8fHt9KSxzZTt2YXIgU3Q9ei5zeW1ib2woImZha2UiKTt6Lk9iamVjdERlZmluZVByb3BlcnR5KHFlLGV0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tTdF19LHNldDpmdW5jdGlvbih2aSl7dGhpc1tTdF09dml9fSk7dmFyIGR0LER0PWZ1bmN0aW9uKCl7fTtyZXR1cm4oZHQ9bmV3IHplKS5vbnJlYWR5c3RhdGVjaGFuZ2U9RHQsc2U9ZHRbU3RdPT09RHQsZHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsc2V9KHosZWUpKXt2YXIgWT10eXBlb2YgV2ViU29ja2V0PCJ1IjsoZnVuY3Rpb24oeil7Zm9yKHZhciBlZT16LnN5bWJvbCgidW5ib3VuZCIpLGxlPWZ1bmN0aW9uKEgpe3ZhciBZPXpvW0hdLEo9Im9uIitZO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcihZLGZ1bmN0aW9uKHNlKXt2YXIgZXQscWUsemU9c2UudGFyZ2V0O2ZvcihxZT16ZT96ZS5jb25zdHJ1Y3Rvci5uYW1lKyIuIitKOiJ1bmtub3duLiIrSjt6ZTspemVbSl0mJiF6ZVtKXVtlZV0mJigoZXQ9ei53cmFwV2l0aEN1cnJlbnRab25lKHplW0pdLHFlKSlbZWVdPXplW0pdLHplW0pdPWV0KSx6ZT16ZS5wYXJlbnRFbGVtZW50fSwhMCl9LEU9MDtFPHpvLmxlbmd0aDtFKyspbGUoRSl9KSh6KSx6LnBhdGNoQ2xhc3MoIlhNTEh0dHBSZXF1ZXN0IiksWSYmZnVuY3Rpb24oeixlZSl7dmFyIGxlPXouZ2V0R2xvYmFsT2JqZWN0cygpLEU9bGUuQUREX0VWRU5UX0xJU1RFTkVSX1NUUixIPWxlLlJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFIsWT1lZS5XZWJTb2NrZXQ7ZWUuRXZlbnRUYXJnZXR8fHoucGF0Y2hFdmVudFRhcmdldChlZSx6LFtZLnByb3RvdHlwZV0pLGVlLldlYlNvY2tldD1mdW5jdGlvbih6ZSxldCl7dmFyIHJ0LGR0LHFlPWFyZ3VtZW50cy5sZW5ndGg+MT9uZXcgWSh6ZSxldCk6bmV3IFkoemUpLFN0PXouT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHFlLCJvbm1lc3NhZ2UiKTtyZXR1cm4gU3QmJiExPT09U3QuY29uZmlndXJhYmxlPyhydD16Lk9iamVjdENyZWF0ZShxZSksZHQ9cWUsW0UsSCwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihEdCl7cnRbRHRdPWZ1bmN0aW9uKCl7dmFyIGNuPXouQXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoRHQ9PT1FfHxEdD09PUgpe3ZhciBHaT1jbi5sZW5ndGg+MD9jblswXTp2b2lkIDA7aWYoR2kpe3ZhciB2aT1ab25lLl9fc3ltYm9sX18oIk9OX1BST1BFUlRZIitHaSk7cWVbdmldPXJ0W3ZpXX19cmV0dXJuIHFlW0R0XS5hcHBseShxZSxjbil9fSkpOnJ0PXFlLHoucGF0Y2hPblByb3BlcnRpZXMocnQsWyJjbG9zZSIsImVycm9yIiwibWVzc2FnZSIsIm9wZW4iXSxkdCkscnR9O3ZhciBKPWVlLldlYlNvY2tldDtmb3IodmFyIHNlIGluIFkpSltzZV09WVtzZV19KHosZWUpLFpvbmVbei5zeW1ib2woInBhdGNoRXZlbnRzIildPSEwfX0oSixIKX0pfTt2YXIgdnM9bSgiem9uZVRhc2siKTtmdW5jdGlvbiBkbCh6LGVlLGxlLEUpe3ZhciBIPW51bGwsWT1udWxsO2xlKz1FO3ZhciBKPXt9O2Z1bmN0aW9uIHNlKGV0KXt2YXIgcWU9ZXQuZGF0YTtyZXR1cm4gcWUuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBldC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxxZS5oYW5kbGVJZD1ILmFwcGx5KHoscWUuYXJncyksZXR9ZnVuY3Rpb24gemUoZXQpe3JldHVybiBZLmNhbGwoeixldC5kYXRhLmhhbmRsZUlkKX1IPW5lKHosZWUrPUUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PUUsZGVsYXk6IlRpbWVvdXQiPT09RXx8IkludGVydmFsIj09PUU/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LFN0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgSltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFt2c109bnVsbCkpfX07dmFyIER0PWYoZWUscnRbMF0sZHQsc2UsemUpO2lmKCFEdClyZXR1cm4gRHQ7dmFyIGNuPUR0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbj9KW2NuXT1EdDpjbiYmKGNuW3ZzXT1EdCksY24mJmNuLnJlZiYmY24udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi51bnJlZiYmKER0LnJlZj1jbi5yZWYuYmluZChjbiksRHQudW5yZWY9Y24udW5yZWYuYmluZChjbikpLCJudW1iZXIiPT10eXBlb2YgY258fGNuP2NuOkR0fXJldHVybiBldC5hcHBseSh6LHJ0KX19KSxZPW5lKHosbGUsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihxZSxydCl7dmFyIFN0LGR0PXJ0WzBdOyJudW1iZXIiPT10eXBlb2YgZHQ/U3Q9SltkdF06KFN0PWR0JiZkdFt2c10pfHwoU3Q9ZHQpLFN0JiYic3RyaW5nIj09dHlwZW9mIFN0LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1TdC5zdGF0ZSYmKFN0LmNhbmNlbEZuJiZTdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1TdC5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIGR0P2RlbGV0ZSBKW2R0XTpkdCYmKGR0W3ZzXT1udWxsKSxTdC56b25lLmNhbmNlbFRhc2soU3QpKTpldC5hcHBseSh6LHJ0KX19KX1ab25lLl9fbG9hZF9wYXRjaCgibGVnYWN5IixmdW5jdGlvbih6KXt2YXIgZWU9eltab25lLl9fc3ltYm9sX18oImxlZ2FjeVBhdGNoIildO2VlJiZlZSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbih6LGVlLGxlKXtsZS5wYXRjaE1ldGhvZCh6LCJxdWV1ZU1pY3JvdGFzayIsZnVuY3Rpb24oRSl7cmV0dXJuIGZ1bmN0aW9uKEgsWSl7ZWUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygicXVldWVNaWNyb3Rhc2siLFlbMF0pfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goInRpbWVycyIsZnVuY3Rpb24oeil7dmFyIGxlPSJjbGVhciI7ZGwoeiwic2V0IixsZSwiVGltZW91dCIpLGRsKHosInNldCIsbGUsIkludGVydmFsIiksZGwoeiwic2V0IixsZSwiSW1tZWRpYXRlIil9KSxab25lLl9fbG9hZF9wYXRjaCgicmVxdWVzdEFuaW1hdGlvbkZyYW1lIixmdW5jdGlvbih6KXtkbCh6LCJyZXF1ZXN0IiwiY2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxkbCh6LCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxkbCh6LCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJibG9ja2luZyIsZnVuY3Rpb24oeixlZSl7Zm9yKHZhciBsZT1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLEU9MDtFPGxlLmxlbmd0aDtFKyspbmUoeixsZVtFXSxmdW5jdGlvbihZLEosc2Upe3JldHVybiBmdW5jdGlvbih6ZSxldCl7cmV0dXJuIGVlLmN1cnJlbnQucnVuKFkseixldCxzZSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKHosZWUsbGUpeyhmdW5jdGlvbih6LGVlKXtlZS5wYXRjaEV2ZW50UHJvdG90eXBlKHosZWUpfSkoeixsZSksZnVuY3Rpb24oeixlZSl7aWYoIVpvbmVbZWUuc3ltYm9sKCJwYXRjaEV2ZW50VGFyZ2V0IildKXtmb3IodmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKSxFPWxlLmV2ZW50TmFtZXMsSD1sZS56b25lU3ltYm9sRXZlbnROYW1lcyxZPWxlLlRSVUVfU1RSLEo9bGUuRkFMU0VfU1RSLHNlPWxlLlpPTkVfU1lNQk9MX1BSRUZJWCx6ZT0wO3plPEUubGVuZ3RoO3plKyspe3ZhciBldD1FW3plXSxkdD1zZSsoZXQrSiksU3Q9c2UrKGV0K1kpO0hbZXRdPXt9LEhbZXRdW0pdPWR0LEhbZXRdW1ldPVN0fXZhciBEdD16LkV2ZW50VGFyZ2V0O0R0JiZEdC5wcm90b3R5cGUmJmVlLnBhdGNoRXZlbnRUYXJnZXQoeixlZSxbRHQmJkR0LnByb3RvdHlwZV0pfX0oeixsZSk7dmFyIEU9ei5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O0UmJkUucHJvdG90eXBlJiZsZS5wYXRjaEV2ZW50VGFyZ2V0KHosbGUsW0UucHJvdG90eXBlXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsZnVuY3Rpb24oeixlZSxsZSl7YmUoIk11dGF0aW9uT2JzZXJ2ZXIiKSxiZSgiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIkludGVyc2VjdGlvbk9ic2VydmVyIixmdW5jdGlvbih6LGVlLGxlKXtiZSgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJGaWxlUmVhZGVyIixmdW5jdGlvbih6LGVlLGxlKXtiZSgiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IixmdW5jdGlvbih6LGVlLGxlKXshZnVuY3Rpb24oeixlZSl7aWYoKCFLfHxYZSkmJiFab25lW3ouc3ltYm9sKCJwYXRjaEV2ZW50cyIpXSl7dmFyIGxlPWVlLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcyxFPVtdO2lmKHhlKXt2YXIgSD13aW5kb3c7RT1FLmNvbmNhdChbIkRvY3VtZW50IiwiU1ZHRWxlbWVudCIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIkhUTUxCb2R5RWxlbWVudCIsIkhUTUxNZWRpYUVsZW1lbnQiLCJIVE1MRnJhbWVTZXRFbGVtZW50IiwiSFRNTEZyYW1lRWxlbWVudCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiSFRNTE1hcnF1ZWVFbGVtZW50IiwiV29ya2VyIl0pO3ZhciBZPWZ1bmN0aW9uKCl7dHJ5e3ZhciB6PU0ubmF2aWdhdG9yLnVzZXJBZ2VudDtpZigtMSE9PXouaW5kZXhPZigiTVNJRSAiKXx8LTEhPT16LmluZGV4T2YoIlRyaWRlbnQvIikpcmV0dXJuITB9Y2F0Y2h7fXJldHVybiExfSgpP1t7dGFyZ2V0OkgsaWdub3JlUHJvcGVydGllczpbImVycm9yIl19XTpbXTt1dChILHNuKEgpLGxlJiZsZS5jb25jYXQoWSksZShIKSl9RT1FLmNvbmNhdChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5zYWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2Zvcih2YXIgSj0wO0o8RS5sZW5ndGg7SisrKXt2YXIgc2U9ZWVbRVtKXV07c2UmJnNlLnByb3RvdHlwZSYmdXQoc2UucHJvdG90eXBlLHNuKHNlLnByb3RvdHlwZSksbGUpfX19KGxlLHopfSksWm9uZS5fX2xvYWRfcGF0Y2goImN1c3RvbUVsZW1lbnRzIixmdW5jdGlvbih6LGVlLGxlKXshZnVuY3Rpb24oeixlZSl7dmFyIGxlPWVlLmdldEdsb2JhbE9iamVjdHMoKTsobGUuaXNCcm93c2VyfHxsZS5pc01peCkmJnouY3VzdG9tRWxlbWVudHMmJiJjdXN0b21FbGVtZW50cyJpbiB6JiZlZS5wYXRjaENhbGxiYWNrcyhlZSx6LmN1c3RvbUVsZW1lbnRzLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfSh6LGxlKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKHosZWUpeyFmdW5jdGlvbihldCl7dmFyIHFlPWV0LlhNTEh0dHBSZXF1ZXN0O2lmKHFlKXt2YXIgcnQ9cWUucHJvdG90eXBlLFN0PXJ0W2FdLER0PXJ0W2xdO2lmKCFTdCl7dmFyIGNuPWV0LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYoY24pe3ZhciBHaT1jbi5wcm90b3R5cGU7U3Q9R2lbYV0sRHQ9R2lbbF19fXZhciB2aT0icmVhZHlzdGF0ZWNoYW5nZSIscG49InNjaGVkdWxlZCIsUW49bmUocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLGZpKXtyZXR1cm4gT25bRV09MD09ZmlbMl0sT25bSl09ZmlbMV0sUW4uYXBwbHkoT24sZmkpfX0pLFduPW0oImZldGNoVGFza0Fib3J0aW5nIiksVXQ9bSgiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLE5pPW5lKHJ0LCJzZW5kIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixmaSl7aWYoITA9PT1lZS5jdXJyZW50W1V0XXx8T25bRV0pcmV0dXJuIE5pLmFwcGx5KE9uLGZpKTt2YXIga249e3RhcmdldDpPbix1cmw6T25bSl0saXNQZXJpb2RpYzohMSxhcmdzOmZpLGFib3J0ZWQ6ITF9LHByPWYoIlhNTEh0dHBSZXF1ZXN0LnNlbmQiLEV0LGtuLFBuLHBpKTtPbiYmITA9PT1PbltzZV0mJiFrbi5hYm9ydGVkJiZwci5zdGF0ZT09PXBuJiZwci5pbnZva2UoKX19KSx2bj1uZShydCwiYWJvcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLGZpKXt2YXIga249ZnVuY3Rpb24oT24pe3JldHVybiBPbltsZV19KE9uKTtpZihrbiYmInN0cmluZyI9PXR5cGVvZiBrbi50eXBlKXtpZihudWxsPT1rbi5jYW5jZWxGbnx8a24uZGF0YSYma24uZGF0YS5hYm9ydGVkKXJldHVybjtrbi56b25lLmNhbmNlbFRhc2soa24pfWVsc2UgaWYoITA9PT1lZS5jdXJyZW50W1duXSlyZXR1cm4gdm4uYXBwbHkoT24sZmkpfX0pfWZ1bmN0aW9uIFBuKE9uKXt2YXIgZmk9T24uZGF0YSxrbj1maS50YXJnZXQ7a25bWV09ITEsa25bc2VdPSExO3ZhciBwcj1rbltIXTtTdHx8KFN0PWtuW2FdLER0PWtuW2xdKSxwciYmRHQuY2FsbChrbix2aSxwcik7dmFyIHJyPWtuW0hdPWZ1bmN0aW9uKCl7aWYoa24ucmVhZHlTdGF0ZT09PWtuLkRPTkUpaWYoIWZpLmFib3J0ZWQmJmtuW1ldJiZPbi5zdGF0ZT09PXBuKXt2YXIgTXI9a25bZWUuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKDAhPT1rbi5zdGF0dXMmJk1yJiZNci5sZW5ndGg+MCl7dmFyIGZyPU9uLmludm9rZTtPbi5pbnZva2U9ZnVuY3Rpb24oKXtmb3IodmFyIGd0PWtuW2VlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXSxtZT0wO21lPGd0Lmxlbmd0aDttZSsrKWd0W21lXT09PU9uJiZndC5zcGxpY2UobWUsMSk7IWZpLmFib3J0ZWQmJk9uLnN0YXRlPT09cG4mJmZyLmNhbGwoT24pfSxNci5wdXNoKE9uKX1lbHNlIE9uLmludm9rZSgpfWVsc2UhZmkuYWJvcnRlZCYmITE9PT1rbltZXSYmKGtuW3NlXT0hMCl9O3JldHVybiBTdC5jYWxsKGtuLHZpLHJyKSxrbltsZV18fChrbltsZV09T24pLE5pLmFwcGx5KGtuLGZpLmFyZ3MpLGtuW1ldPSEwLE9ufWZ1bmN0aW9uIEV0KCl7fWZ1bmN0aW9uIHBpKE9uKXt2YXIgZmk9T24uZGF0YTtyZXR1cm4gZmkuYWJvcnRlZD0hMCx2bi5hcHBseShmaS50YXJnZXQsZmkuYXJncyl9fSh6KTt2YXIgbGU9bSgieGhyVGFzayIpLEU9bSgieGhyU3luYyIpLEg9bSgieGhyTGlzdGVuZXIiKSxZPW0oInhoclNjaGVkdWxlZCIpLEo9bSgieGhyVVJMIiksc2U9bSgieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsZnVuY3Rpb24oeil7ei5uYXZpZ2F0b3ImJnoubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbih6LGVlKXtmb3IodmFyIGxlPXouY29uc3RydWN0b3IubmFtZSxFPWZ1bmN0aW9uKFkpe3ZhciBldCxxZSxKPWVlW1ldLHNlPXpbSl07aWYoc2Upe2lmKCFWKG4oeixKKSkpcmV0dXJuImNvbnRpbnVlIjt6W0pdPShxZT1mdW5jdGlvbigpe3JldHVybiBldC5hcHBseSh0aGlzLFIoYXJndW1lbnRzLGxlKyIuIitKKSl9LHBlKHFlLGV0PXNlKSxxZSl9fSxIPTA7SDxlZS5sZW5ndGg7SCsrKUUoSCl9KHoubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLGZ1bmN0aW9uKHosZWUpe2Z1bmN0aW9uIGxlKEUpe3JldHVybiBmdW5jdGlvbihIKXtvZSh6LEUpLmZvckVhY2goZnVuY3Rpb24oSil7dmFyIHNlPXouUHJvbWlzZVJlamVjdGlvbkV2ZW50O2lmKHNlKXt2YXIgemU9bmV3IHNlKEUse3Byb21pc2U6SC5wcm9taXNlLHJlYXNvbjpILnJlamVjdGlvbn0pO0ouaW52b2tlKHplKX19KX19ei5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihlZVttKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1sZSgidW5oYW5kbGVkcmVqZWN0aW9uIiksZWVbbSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bGUoInJlamVjdGlvbmhhbmRsZWQiKSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6bigpfSk7ZnVuY3Rpb24gX24obil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gU20obil7bGV0IGU9bihpPT57RXJyb3IuY2FsbChpKSxpLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfSk7cmV0dXJuIGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9dmFyIG5DPVNtKG49PmZ1bmN0aW9uKGUpe24odGhpcyksdGhpcy5tZXNzYWdlPWU/YCR7ZS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2UubWFwKChpLHIpPT5gJHtyKzF9KSAke2kudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWV9KTtmdW5jdGlvbiBEcChuLHQpe2lmKG4pe2xldCBlPW4uaW5kZXhPZih0KTswPD1lJiZuLnNwbGljZShlLDEpfX12YXIgTW49Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbml0aWFsVGVhcmRvd249dCx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQgdDtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO2xldHtfcGFyZW50YWdlOmV9PXRoaXM7aWYoZSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbyBvZiBlKW8ucmVtb3ZlKHRoaXMpO2Vsc2UgZS5yZW1vdmUodGhpcyk7bGV0e2luaXRpYWxUZWFyZG93bjppfT10aGlzO2lmKF9uKGkpKXRyeXtpKCl9Y2F0Y2gobyl7dD1vIGluc3RhbmNlb2YgbkM/by5lcnJvcnM6W29dfWxldHtfZmluYWxpemVyczpyfT10aGlzO2lmKHIpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IobGV0IG8gb2Ygcil0cnl7cVYobyl9Y2F0Y2gocyl7dD10Pz9bXSxzIGluc3RhbmNlb2YgbkM/dD1bLi4udCwuLi5zLmVycm9yc106dC5wdXNoKHMpfX1pZih0KXRocm93IG5ldyBuQyh0KX19YWRkKHQpe3ZhciBlO2lmKHQmJnQhPT10aGlzKWlmKHRoaXMuY2xvc2VkKXFWKHQpO2Vsc2V7aWYodCBpbnN0YW5jZW9mIE1uKXtpZih0LmNsb3NlZHx8dC5faGFzUGFyZW50KHRoaXMpKXJldHVybjt0Ll9hZGRQYXJlbnQodGhpcyl9KHRoaXMuX2ZpbmFsaXplcnM9bnVsbCE9PShlPXRoaXMuX2ZpbmFsaXplcnMpJiZ2b2lkIDAhPT1lP2U6W10pLnB1c2godCl9fV9oYXNQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztyZXR1cm4gZT09PXR8fEFycmF5LmlzQXJyYXkoZSkmJmUuaW5jbHVkZXModCl9X2FkZFBhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGUpPyhlLnB1c2godCksZSk6ZT9bZSx0XTp0fV9yZW1vdmVQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztlPT09dD90aGlzLl9wYXJlbnRhZ2U9bnVsbDpBcnJheS5pc0FycmF5KGUpJiZEcChlLHQpfXJlbW92ZSh0KXtsZXR7X2ZpbmFsaXplcnM6ZX09dGhpcztlJiZEcChlLHQpLHQgaW5zdGFuY2VvZiBNbiYmdC5fcmVtb3ZlUGFyZW50KHRoaXMpfX07TW4uRU1QVFk9KCgpPT57bGV0IG49bmV3IE1uO3JldHVybiBuLmNsb3NlZD0hMCxufSkoKTt2YXIgTkE9TW4uRU1QVFk7ZnVuY3Rpb24gaUMobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNbnx8biYmImNsb3NlZCJpbiBuJiZfbihuLnJlbW92ZSkmJl9uKG4uYWRkKSYmX24obi51bnN1YnNjcmliZSl9ZnVuY3Rpb24gcVYobil7X24obik/bigpOm4udW5zdWJzY3JpYmUoKX12YXIgcGw9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sRW09e3NldFRpbWVvdXQobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1FbTtyZXR1cm4gaT8uc2V0VGltZW91dD9pLnNldFRpbWVvdXQobix0LC4uLmUpOnNldFRpbWVvdXQobix0LC4uLmUpfSxjbGVhclRpbWVvdXQobil7bGV0e2RlbGVnYXRlOnR9PUVtO3JldHVybih0Py5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkobil9LGRlbGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gckMobil7RW0uc2V0VGltZW91dCgoKT0+e2xldHtvblVuaGFuZGxlZEVycm9yOnR9PXBsO2lmKCF0KXRocm93IG47dChuKX0pfWZ1bmN0aW9uIGZsKCl7fXZhciBZVj1MQSgiQyIsdm9pZCAwLHZvaWQgMCk7ZnVuY3Rpb24gTEEobix0LGUpe3JldHVybntraW5kOm4sdmFsdWU6dCxlcnJvcjplfX12YXIgSXA9bnVsbDtmdW5jdGlvbiBUbShuKXtpZihwbC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXtsZXQgdD0hSXA7aWYodCYmKElwPXtlcnJvclRocm93bjohMSxlcnJvcjpudWxsfSksbigpLHQpe2xldHtlcnJvclRocm93bjplLGVycm9yOml9PUlwO2lmKElwPW51bGwsZSl0aHJvdyBpfX1lbHNlIG4oKX12YXIgQXA9Y2xhc3MgZXh0ZW5kcyBNbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaXNTdG9wcGVkPSExLHQ/KHRoaXMuZGVzdGluYXRpb249dCxpQyh0KSYmdC5hZGQodGhpcykpOnRoaXMuZGVzdGluYXRpb249TGllfXN0YXRpYyBjcmVhdGUodCxlLGkpe3JldHVybiBuZXcgbWwodCxlLGkpfW5leHQodCl7dGhpcy5pc1N0b3BwZWQ/VkEoTEEoIk4iLHQsdm9pZCAwKSx0aGlzKTp0aGlzLl9uZXh0KHQpfWVycm9yKHQpe3RoaXMuaXNTdG9wcGVkP1ZBKExBKCJFIix2b2lkIDAsdCksdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX1jb21wbGV0ZSgpe3RoaXMuaXNTdG9wcGVkP1ZBKFlWLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX1fZXJyb3IodCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX0sRmllPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIEJBKG4sdCl7cmV0dXJuIEZpZS5jYWxsKG4sdCl9dmFyIG1sPWNsYXNzIGV4dGVuZHMgQXB7Y29uc3RydWN0b3IodCxlLGkpe2xldCByO2lmKHN1cGVyKCksX24odCl8fCF0KXI9e25leHQ6dD8/dm9pZCAwLGVycm9yOmU/P3ZvaWQgMCxjb21wbGV0ZTppPz92b2lkIDB9O2Vsc2V7bGV0IG87dGhpcyYmcGwudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhvPU9iamVjdC5jcmVhdGUodCksby51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLHI9e25leHQ6dC5uZXh0JiZCQSh0Lm5leHQsbyksZXJyb3I6dC5lcnJvciYmQkEodC5lcnJvcixvKSxjb21wbGV0ZTp0LmNvbXBsZXRlJiZCQSh0LmNvbXBsZXRlLG8pfSk6cj10fXRoaXMuZGVzdGluYXRpb249bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucGFydGlhbE9ic2VydmVyPXR9bmV4dCh0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5uZXh0KXRyeXtlLm5leHQodCl9Y2F0Y2goaSl7b0MoaSl9fWVycm9yKHQpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6ZX09dGhpcztpZihlLmVycm9yKXRyeXtlLmVycm9yKHQpfWNhdGNoKGkpe29DKGkpfWVsc2Ugb0ModCl9Y29tcGxldGUoKXtsZXR7cGFydGlhbE9ic2VydmVyOnR9PXRoaXM7aWYodC5jb21wbGV0ZSl0cnl7dC5jb21wbGV0ZSgpfWNhdGNoKGUpe29DKGUpfX19KHIpfX07ZnVuY3Rpb24gb0Mobil7cGwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz9mdW5jdGlvbihuKXtwbC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZJcCYmKElwLmVycm9yVGhyb3duPSEwLElwLmVycm9yPW4pfShuKTpyQyhuKX1mdW5jdGlvbiBWQShuLHQpe2xldHtvblN0b3BwZWROb3RpZmljYXRpb246ZX09cGw7ZSYmRW0uc2V0VGltZW91dCgoKT0+ZShuLHQpKX12YXIgTGllPXtjbG9zZWQ6ITAsbmV4dDpmbCxlcnJvcjpmdW5jdGlvbihuKXt0aHJvdyBufSxjb21wbGV0ZTpmbH0sRG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIGlzKG4pe3JldHVybiBufWZ1bmN0aW9uIFVBKG4pe3JldHVybiAwPT09bi5sZW5ndGg/aXM6MT09PW4ubGVuZ3RoP25bMF06ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucmVkdWNlKChpLHIpPT5yKGkpLGUpfX12YXIgS3Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlJiYodGhpcy5fc3Vic2NyaWJlPWUpfWxpZnQoZSl7bGV0IGk9bmV3IG47cmV0dXJuIGkuc291cmNlPXRoaXMsaS5vcGVyYXRvcj1lLGl9c3Vic2NyaWJlKGUsaSxyKXtsZXQgbz1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIEFwfHxmdW5jdGlvbihuKXtyZXR1cm4gbiYmX24obi5uZXh0KSYmX24obi5lcnJvcikmJl9uKG4uY29tcGxldGUpfShuKSYmaUMobil9KGUpP2U6bmV3IG1sKGUsaSxyKTtyZXR1cm4gVG0oKCk9PntsZXR7b3BlcmF0b3I6cyxzb3VyY2U6YX09dGhpcztvLmFkZChzP3MuY2FsbChvLGEpOmE/dGhpcy5fc3Vic2NyaWJlKG8pOnRoaXMuX3RyeVN1YnNjcmliZShvKSl9KSxvfV90cnlTdWJzY3JpYmUoZSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoZSl9Y2F0Y2goaSl7ZS5lcnJvcihpKX19Zm9yRWFjaChlLGkpe3JldHVybiBuZXcoaT1LVihpKSkoKHIsbyk9PntsZXQgcz1uZXcgbWwoe25leHQ6YT0+e3RyeXtlKGEpfWNhdGNoKGwpe28obCkscy51bnN1YnNjcmliZSgpfX0sZXJyb3I6byxjb21wbGV0ZTpyfSk7dGhpcy5zdWJzY3JpYmUocyl9KX1fc3Vic2NyaWJlKGUpe3ZhciBpO3JldHVybiBudWxsPT09KGk9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnN1YnNjcmliZShlKX1bRG1dKCl7cmV0dXJuIHRoaXN9cGlwZSguLi5lKXtyZXR1cm4gVUEoZSkodGhpcyl9dG9Qcm9taXNlKGUpe3JldHVybiBuZXcoZT1LVihlKSkoKGkscik9PntsZXQgbzt0aGlzLnN1YnNjcmliZShzPT5vPXMscz0+cihzKSwoKT0+aShvKSl9KX19cmV0dXJuIG4uY3JlYXRlPXQ9Pm5ldyBuKHQpLG59KSgpO2Z1bmN0aW9uIEtWKG4pe3ZhciB0O3JldHVybiBudWxsIT09KHQ9bj8/cGwuUHJvbWlzZSkmJnZvaWQgMCE9PXQ/dDpQcm9taXNlfWZ1bmN0aW9uIGpBKG4pe3JldHVybiBfbihuPy5saWZ0KX1mdW5jdGlvbiBxdChuKXtyZXR1cm4gdD0+e2lmKGpBKHQpKXJldHVybiB0LmxpZnQoZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuKGUsdGhpcyl9Y2F0Y2goaSl7dGhpcy5lcnJvcihpKX19KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZSIpfX1mdW5jdGlvbiBWdChuLHQsZSxpLHIpe3JldHVybiBuZXcgTV8obix0LGUsaSxyKX12YXIgR0EsTV89Y2xhc3MgZXh0ZW5kcyBBcHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCksdGhpcy5vbkZpbmFsaXplPW8sdGhpcy5zaG91bGRVbnN1YnNjcmliZT1zLHRoaXMuX25leHQ9ZT9mdW5jdGlvbihhKXt0cnl7ZShhKX1jYXRjaChsKXt0LmVycm9yKGwpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9cj9mdW5jdGlvbihhKXt0cnl7cihhKX1jYXRjaChsKXt0LmVycm9yKGwpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWk/ZnVuY3Rpb24oKXt0cnl7aSgpfWNhdGNoKGEpe3QuZXJyb3IoYSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgdDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtsZXR7Y2xvc2VkOmV9PXRoaXM7c3VwZXIudW5zdWJzY3JpYmUoKSwhZSYmKG51bGw9PT0odD10aGlzLm9uRmluYWxpemUpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcykpfX19LHdfPWNsYXNzIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuc291cmNlPXQsdGhpcy5zdWJqZWN0RmFjdG9yeT1lLHRoaXMuX3N1YmplY3Q9bnVsbCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxqQSh0KSYmKHRoaXMubGlmdD10LmxpZnQpfV9zdWJzY3JpYmUodCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZSh0KX1nZXRTdWJqZWN0KCl7bGV0IHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4oIXR8fHQuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMuX3JlZkNvdW50PTA7bGV0e19jb25uZWN0aW9uOnR9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsdD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IHQ9dGhpcy5fY29ubmVjdGlvbjtpZighdCl7dD10aGlzLl9jb25uZWN0aW9uPW5ldyBNbjtsZXQgZT10aGlzLmdldFN1YmplY3QoKTt0LmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoVnQoZSx2b2lkIDAsKCk9Pnt0aGlzLl90ZWFyZG93bigpLGUuY29tcGxldGUoKX0saT0+e3RoaXMuX3RlYXJkb3duKCksZS5lcnJvcihpKX0sKCk9PnRoaXMuX3RlYXJkb3duKCkpKSksdC5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1Nbi5FTVBUWSl9cmV0dXJuIHR9cmVmQ291bnQoKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZT1udWxsO24uX3JlZkNvdW50Kys7bGV0IGk9VnQodCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFufHxuLl9yZWZDb3VudDw9MHx8MDwtLW4uX3JlZkNvdW50KXJldHVybiB2b2lkKGU9bnVsbCk7bGV0IHI9bi5fY29ubmVjdGlvbixvPWU7ZT1udWxsLHImJighb3x8cj09PW8pJiZyLnVuc3Vic2NyaWJlKCksdC51bnN1YnNjcmliZSgpfSk7bi5zdWJzY3JpYmUoaSksaS5jbG9zZWR8fChlPW4uY29ubmVjdCgpKX0pKHRoaXMpfX0sSW09e3NjaGVkdWxlKG4pe2xldCB0PXJlcXVlc3RBbmltYXRpb25GcmFtZSxlPWNhbmNlbEFuaW1hdGlvbkZyYW1lLHtkZWxlZ2F0ZTppfT1JbTtpJiYodD1pLnJlcXVlc3RBbmltYXRpb25GcmFtZSxlPWkuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2xldCByPXQobz0+e2U9dm9pZCAwLG4obyl9KTtyZXR1cm4gbmV3IE1uKCgpPT5lPy4ocikpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PUltO3JldHVybih0Py5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4ubil9LGNhbmNlbEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1JbTtyZXR1cm4odD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sZGVsZWdhdGU6dm9pZCAwfSwkVj1TbShuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pLEllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdChlKXtsZXQgaT1uZXcgc0ModGhpcyx0aGlzKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgJFZ9bmV4dChlKXtUbSgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGxldCBpIG9mIHRoaXMuY3VycmVudE9ic2VydmVycylpLm5leHQoZSl9fSl9ZXJyb3IoZSl7VG0oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9ZTtsZXR7b2JzZXJ2ZXJzOml9PXRoaXM7Zm9yKDtpLmxlbmd0aDspaS5zaGlmdCgpLmVycm9yKGUpfX0pfWNvbXBsZXRlKCl7VG0oKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtsZXR7b2JzZXJ2ZXJzOmV9PXRoaXM7Zm9yKDtlLmxlbmd0aDspZS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoZSl9X3N1YnNjcmliZShlKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksdGhpcy5faW5uZXJTdWJzY3JpYmUoZSl9X2lubmVyU3Vic2NyaWJlKGUpe2xldHtoYXNFcnJvcjppLGlzU3RvcHBlZDpyLG9ic2VydmVyczpvfT10aGlzO3JldHVybiBpfHxyP05BOih0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxvLnB1c2goZSksbmV3IE1uKCgpPT57dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsRHAobyxlKX0pKX1fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKXtsZXR7aGFzRXJyb3I6aSx0aHJvd25FcnJvcjpyLGlzU3RvcHBlZDpvfT10aGlzO2k/ZS5lcnJvcihyKTpvJiZlLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7bGV0IGU9bmV3IEt0O3JldHVybiBlLnNvdXJjZT10aGlzLGV9fXJldHVybiBuLmNyZWF0ZT0odCxlKT0+bmV3IHNDKHQsZSksbn0pKCksc0M9Y2xhc3MgZXh0ZW5kcyBJZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj10LHRoaXMuc291cmNlPWV9bmV4dCh0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUubmV4dCl8fHZvaWQgMD09PWl8fGkuY2FsbChlLHQpfWVycm9yKHQpe3ZhciBlLGk7bnVsbD09PShpPW51bGw9PT0oZT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lcnJvcil8fHZvaWQgMD09PWl8fGkuY2FsbChlLHQpfWNvbXBsZXRlKCl7dmFyIHQsZTtudWxsPT09KGU9bnVsbD09PSh0PXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbXBsZXRlKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHQpfV9zdWJzY3JpYmUodCl7dmFyIGUsaTtyZXR1cm4gbnVsbCE9PShpPW51bGw9PT0oZT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuc3Vic2NyaWJlKHQpKSYmdm9pZCAwIT09aT9pOk5BfX0sQWk9Y2xhc3MgZXh0ZW5kcyBJZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3ZhbHVlPXR9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUoKX1fc3Vic2NyaWJlKHQpe2xldCBlPXN1cGVyLl9zdWJzY3JpYmUodCk7cmV0dXJuIWUuY2xvc2VkJiZ0Lm5leHQodGhpcy5fdmFsdWUpLGV9Z2V0VmFsdWUoKXtsZXR7aGFzRXJyb3I6dCx0aHJvd25FcnJvcjplLF92YWx1ZTppfT10aGlzO2lmKHQpdGhyb3cgZTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGl9bmV4dCh0KXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPXQpfX0sU189e25vdzooKT0+KFNfLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9LFJwPWNsYXNzIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IodD0xLzAsZT0xLzAsaT1TXyl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPXQsdGhpcy5fd2luZG93VGltZT1lLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWksdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ZT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsdCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGUpfW5leHQodCl7bGV0e2lzU3RvcHBlZDplLF9idWZmZXI6aSxfaW5maW5pdGVUaW1lV2luZG93OnIsX3RpbWVzdGFtcFByb3ZpZGVyOm8sX3dpbmRvd1RpbWU6c309dGhpcztlfHwoaS5wdXNoKHQpLCFyJiZpLnB1c2goby5ub3coKStzKSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQodCl9X3N1YnNjcmliZSh0KXt0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2xldCBlPXRoaXMuX2lubmVyU3Vic2NyaWJlKHQpLHtfaW5maW5pdGVUaW1lV2luZG93OmksX2J1ZmZlcjpyfT10aGlzLG89ci5zbGljZSgpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGgmJiF0LmNsb3NlZDtzKz1pPzE6Mil0Lm5leHQob1tzXSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksZX1fdHJpbUJ1ZmZlcigpe2xldHtfYnVmZmVyU2l6ZTp0LF90aW1lc3RhbXBQcm92aWRlcjplLF9idWZmZXI6aSxfaW5maW5pdGVUaW1lV2luZG93OnJ9PXRoaXMsbz0ocj8xOjIpKnQ7aWYodDwxLzAmJm88aS5sZW5ndGgmJmkuc3BsaWNlKDAsaS5sZW5ndGgtbyksIXIpe2xldCBzPWUubm93KCksYT0wO2ZvcihsZXQgbD0xO2w8aS5sZW5ndGgmJmlbbF08PXM7bCs9MilhPWw7YSYmaS5zcGxpY2UoMCxhKzEpfX19LGFDPWNsYXNzIGV4dGVuZHMgTW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gdGhpc319LEVfPXtzZXRJbnRlcnZhbChuLHQsLi4uZSl7bGV0e2RlbGVnYXRlOml9PUVfO3JldHVybiBpPy5zZXRJbnRlcnZhbD9pLnNldEludGVydmFsKG4sdCwuLi5lKTpzZXRJbnRlcnZhbChuLHQsLi4uZSl9LGNsZWFySW50ZXJ2YWwobil7bGV0e2RlbGVnYXRlOnR9PUVfO3JldHVybih0Py5jbGVhckludGVydmFsfHxjbGVhckludGVydmFsKShuKX0sZGVsZWdhdGU6dm9pZCAwfSxuYz1jbGFzcyBleHRlbmRzIGFDe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lLHRoaXMucGVuZGluZz0hMX1zY2hlZHVsZSh0LGU9MCl7dmFyIGk7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5zdGF0ZT10O2xldCByPXRoaXMuaWQsbz10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9ciYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChvLHIsZSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWUsdGhpcy5pZD1udWxsIT09KGk9dGhpcy5pZCkmJnZvaWQgMCE9PWk/aTp0aGlzLnJlcXVlc3RBc3luY0lkKG8sdGhpcy5pZCxlKSx0aGlzfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBFXy5zZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXtpZihudWxsIT1pJiZ0aGlzLmRlbGF5PT09aSYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7bnVsbCE9ZSYmRV8uY2xlYXJJbnRlcnZhbChlKX1leGVjdXRlKHQsZSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtsZXQgaT10aGlzLl9leGVjdXRlKHQsZSk7aWYoaSlyZXR1cm4gaTshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZSh0LGUpe2xldCByLGk9ITE7dHJ5e3RoaXMud29yayh0KX1jYXRjaChvKXtpPSEwLHI9b3x8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoaSlyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLHJ9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2xldHtpZDp0LHNjaGVkdWxlcjplfT10aGlzLHthY3Rpb25zOml9PWU7dGhpcy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsRHAoaSx0aGlzKSxudWxsIT10JiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGUsdCxudWxsKSksdGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX0sSGllPTEsV0E9e307ZnVuY3Rpb24gZTQobil7cmV0dXJuIG4gaW4gV0EmJihkZWxldGUgV0Fbbl0sITApfXZhciB0ND17c2V0SW1tZWRpYXRlKG4pe2xldCB0PUhpZSsrO3JldHVybiBXQVt0XT0hMCxHQXx8KEdBPVByb21pc2UucmVzb2x2ZSgpKSxHQS50aGVuKCgpPT5lNCh0KSYmbigpKSx0fSxjbGVhckltbWVkaWF0ZShuKXtlNChuKX19LHtzZXRJbW1lZGlhdGU6emllLGNsZWFySW1tZWRpYXRlOlVpZX09dDQsVF89e3NldEltbWVkaWF0ZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09VF87cmV0dXJuKHQ/LnNldEltbWVkaWF0ZXx8emllKSguLi5uKX0sY2xlYXJJbW1lZGlhdGUobil7bGV0e2RlbGVnYXRlOnR9PVRfO3JldHVybih0Py5jbGVhckltbWVkaWF0ZXx8VWllKShuKX0sZGVsZWdhdGU6dm9pZCAwfSxaZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9WmQubm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9dCx0aGlzLm5vdz1lfXNjaGVkdWxlKHQsZT0wLGkpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsdCkuc2NoZWR1bGUoaSxlKX19O1pkLm5vdz1TXy5ub3c7dmFyIGljPWNsYXNzIGV4dGVuZHMgWmR7Y29uc3RydWN0b3IodCxlPVpkLm5vdyl7c3VwZXIodCxlKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKHQpe2xldCBpLHthY3Rpb25zOmV9PXRoaXM7aWYodGhpcy5fYWN0aXZlKWUucHVzaCh0KTtlbHNle3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihpPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaSl7Zm9yKDt0PWUuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IGl9fX19LEFtPW5ldyBjbGFzcyBleHRlbmRzIGlje2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtsZXQgZT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtsZXQgcix7YWN0aW9uczppfT10aGlzO3Q9dHx8aS5zaGlmdCgpO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUoKHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoOyh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fShjbGFzcyBleHRlbmRzIG5je2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT09aSYmaT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5fc2NoZWR1bGVkfHwodC5fc2NoZWR1bGVkPVRfLnNldEltbWVkaWF0ZSh0LmZsdXNoLmJpbmQodCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe3ZhciByO2lmKG51bGwhPWk/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQodCxlLGkpO2xldHthY3Rpb25zOm99PXQ7bnVsbCE9ZSYmKG51bGw9PT0ocj1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZCkhPT1lJiYoVF8uY2xlYXJJbW1lZGlhdGUoZSksdC5fc2NoZWR1bGVkPXZvaWQgMCl9fSksSmM9bmV3IGljKG5jKSxuND1KYyxxQT1uZXcgY2xhc3MgZXh0ZW5kcyBpY3t9KGNsYXNzIGV4dGVuZHMgbmN7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9c2NoZWR1bGUodCxlPTApe3JldHVybiBlPjA/c3VwZXIuc2NoZWR1bGUodCxlKToodGhpcy5kZWxheT1lLHRoaXMuc3RhdGU9dCx0aGlzLnNjaGVkdWxlci5mbHVzaCh0aGlzKSx0aGlzKX1leGVjdXRlKHQsZSl7cmV0dXJuIGU+MHx8dGhpcy5jbG9zZWQ/c3VwZXIuZXhlY3V0ZSh0LGUpOnRoaXMuX2V4ZWN1dGUodCxlKX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9aSYmaT4wfHxudWxsPT1pJiZ0aGlzLmRlbGF5PjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmZsdXNoKHRoaXMpLDApfX0pLFlBPW5ldyBjbGFzcyBleHRlbmRzIGlje2ZsdXNoKHQpe3RoaXMuX2FjdGl2ZT0hMDtsZXQgZT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtsZXQgcix7YWN0aW9uczppfT10aGlzO3Q9dHx8aS5zaGlmdCgpO2Rve2lmKHI9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUoKHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxyKXtmb3IoOyh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgcn19fShjbGFzcyBleHRlbmRzIG5je2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT09aSYmaT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5hY3Rpb25zLnB1c2godGhpcyksdC5fc2NoZWR1bGVkfHwodC5fc2NoZWR1bGVkPUltLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe3ZhciByO2lmKG51bGwhPWk/aT4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQodCxlLGkpO2xldHthY3Rpb25zOm99PXQ7bnVsbCE9ZSYmKG51bGw9PT0ocj1vW28ubGVuZ3RoLTFdKXx8dm9pZCAwPT09cj92b2lkIDA6ci5pZCkhPT1lJiYoSW0uY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSksdC5fc2NoZWR1bGVkPXZvaWQgMCl9fSksSnI9bmV3IEt0KG49Pm4uY29tcGxldGUoKSk7ZnVuY3Rpb24gbUMobil7cmV0dXJuIG4mJl9uKG4uc2NoZWR1bGUpfWZ1bmN0aW9uIFhBKG4pe3JldHVybiBuW24ubGVuZ3RoLTFdfWZ1bmN0aW9uIHJjKG4pe3JldHVybiBfbihYQShuKSk/bi5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gb2Mobil7cmV0dXJuIG1DKFhBKG4pKT9uLnBvcCgpOnZvaWQgMH12YXIgQTQ9V1YoSTQoKSwxKSx7X19kZWNvcmF0ZTpSNCxfX2F3YWl0ZXI6UDQsX19hd2FpdDpiQyxfX2FzeW5jR2VuZXJhdG9yOk80LF9fYXN5bmNWYWx1ZXM6azR9PUE0LmRlZmF1bHQsUG09bj0+biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIG47ZnVuY3Rpb24gdkMobil7cmV0dXJuIF9uKG4/LnRoZW4pfWZ1bmN0aW9uIHlDKG4pe3JldHVybiBfbihuW0RtXSl9ZnVuY3Rpb24geEMobil7cmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yJiZfbihuPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBDQyhuKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbj8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtufSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfXZhciBNQz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIjtmdW5jdGlvbiB3QyhuKXtyZXR1cm4gX24obj8uW01DXSl9ZnVuY3Rpb24gU0Mobil7cmV0dXJuIE80KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2xldCBlPW4uZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7bGV0e3ZhbHVlOmksZG9uZTpyfT15aWVsZCBiQyhlLnJlYWQoKSk7aWYocilyZXR1cm4geWllbGQgYkModm9pZCAwKTt5aWVsZCB5aWVsZCBiQyhpKX19ZmluYWxseXtlLnJlbGVhc2VMb2NrKCl9fSl9ZnVuY3Rpb24gRUMobil7cmV0dXJuIF9uKG4/LmdldFJlYWRlcil9ZnVuY3Rpb24gaWkobil7aWYobiBpbnN0YW5jZW9mIEt0KXJldHVybiBuO2lmKG51bGwhPW4pe2lmKHlDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEt0KHQ9PntsZXQgZT1uW0RtXSgpO2lmKF9uKGUuc3Vic2NyaWJlKSlyZXR1cm4gZS5zdWJzY3JpYmUodCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShuKTtpZihQbShuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLdCh0PT57Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aCYmIXQuY2xvc2VkO2UrKyl0Lm5leHQobltlXSk7dC5jb21wbGV0ZSgpfSl9KG4pO2lmKHZDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEt0KHQ9PntuLnRoZW4oZT0+e3QuY2xvc2VkfHwodC5uZXh0KGUpLHQuY29tcGxldGUoKSl9LGU9PnQuZXJyb3IoZSkpLnRoZW4obnVsbCxyQyl9KX0obik7aWYoeEMobikpcmV0dXJuIEY0KG4pO2lmKHdDKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEt0KHQ9Pntmb3IobGV0IGUgb2YgbilpZih0Lm5leHQoZSksdC5jbG9zZWQpcmV0dXJuO3QuY29tcGxldGUoKX0pfShuKTtpZihFQyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEY0KFNDKG4pKX0obil9dGhyb3cgQ0Mobil9ZnVuY3Rpb24gRjQobil7cmV0dXJuIG5ldyBLdCh0PT57KGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyLG87cmV0dXJuIFA0KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGU9azQobik7IShpPXlpZWxkIGUubmV4dCgpKS5kb25lOylpZih0Lm5leHQoaS52YWx1ZSksdC5jbG9zZWQpcmV0dXJufWNhdGNoKHMpe3I9e2Vycm9yOnN9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihvPWUucmV0dXJuKSYmKHlpZWxkIG8uY2FsbChlKSl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fXQuY29tcGxldGUoKX0pfSkobix0KS5jYXRjaChlPT50LmVycm9yKGUpKX0pfWZ1bmN0aW9uIHhzKG4sdCxlLGk9MCxyPSExKXtsZXQgbz10LnNjaGVkdWxlKGZ1bmN0aW9uKCl7ZSgpLHI/bi5hZGQodGhpcy5zY2hlZHVsZShudWxsLGkpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGkpO2lmKG4uYWRkKG8pLCFyKXJldHVybiBvfWZ1bmN0aW9uIFBwKG4sdD0wKXtyZXR1cm4gcXQoKGUsaSk9PntlLnN1YnNjcmliZShWdChpLHI9PnhzKGksbiwoKT0+aS5uZXh0KHIpLHQpLCgpPT54cyhpLG4sKCk9PmkuY29tcGxldGUoKSx0KSxyPT54cyhpLG4sKCk9PmkuZXJyb3IociksdCkpKX0pfWZ1bmN0aW9uIFRDKG4sdD0wKXtyZXR1cm4gcXQoKGUsaSk9PntpLmFkZChuLnNjaGVkdWxlKCgpPT5lLnN1YnNjcmliZShpKSx0KSl9KX1mdW5jdGlvbiBEQyhuLHQpe2lmKCFuKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEt0KGU9Pnt4cyhlLHQsKCk9PntsZXQgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO3hzKGUsdCwoKT0+e2kubmV4dCgpLnRoZW4ocj0+e3IuZG9uZT9lLmNvbXBsZXRlKCk6ZS5uZXh0KHIudmFsdWUpfSl9LDAsITApfSl9KX1mdW5jdGlvbiAkcihuLHQpe3JldHVybiB0P2Z1bmN0aW9uKG4sdCl7aWYobnVsbCE9bil7aWYoeUMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGlpKG4pLnBpcGUoVEModCksUHAodCkpfShuLHQpO2lmKFBtKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBuZXcgS3QoZT0+e2xldCBpPTA7cmV0dXJuIHQuc2NoZWR1bGUoZnVuY3Rpb24oKXtpPT09bi5sZW5ndGg/ZS5jb21wbGV0ZSgpOihlLm5leHQobltpKytdKSxlLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9KG4sdCk7aWYodkMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGlpKG4pLnBpcGUoVEModCksUHAodCkpfShuLHQpO2lmKHhDKG4pKXJldHVybiBEQyhuLHQpO2lmKHdDKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBuZXcgS3QoZT0+e2xldCBpO3JldHVybiB4cyhlLHQsKCk9PntpPW5bTUNdKCkseHMoZSx0LCgpPT57bGV0IHIsbzt0cnl7KHt2YWx1ZTpyLGRvbmU6b309aS5uZXh0KCkpfWNhdGNoKHMpe3JldHVybiB2b2lkIGUuZXJyb3Iocyl9bz9lLmNvbXBsZXRlKCk6ZS5uZXh0KHIpfSwwLCEwKX0pLCgpPT5fbihpPy5yZXR1cm4pJiZpLnJldHVybigpfSl9KG4sdCk7aWYoRUMobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIERDKFNDKG4pLHQpfShuLHQpfXRocm93IENDKG4pfShuLHQpOmlpKG4pfWZ1bmN0aW9uIEh0KC4uLm4pe3JldHVybiAkcihuLG9jKG4pKX1mdW5jdGlvbiBlYShuLHQpe2xldCBlPV9uKG4pP246KCk9Pm4saT1yPT5yLmVycm9yKGUoKSk7cmV0dXJuIG5ldyBLdCh0P3I9PnQuc2NoZWR1bGUoaSwwLHIpOmkpfXZhciB3YT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9aSx0aGlzLmhhc1ZhbHVlPSJOIj09PXR9b2JzZXJ2ZSh0KXtyZXR1cm4gWkEodGhpcyx0KX1kbyh0LGUsaSl7bGV0e2tpbmQ6cix2YWx1ZTpvLGVycm9yOnN9PXRoaXM7cmV0dXJuIk4iPT09cj90Py4obyk6IkUiPT09cj9lPy4ocyk6aT8uKCl9YWNjZXB0KHQsZSxpKXt2YXIgcjtyZXR1cm4gX24obnVsbD09PShyPXQpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLm5leHQpP3RoaXMub2JzZXJ2ZSh0KTp0aGlzLmRvKHQsZSxpKX10b09ic2VydmFibGUoKXtsZXR7a2luZDp0LHZhbHVlOmUsZXJyb3I6aX09dGhpcyxyPSJOIj09PXQ/SHQoZSk6IkUiPT09dD9lYSgoKT0+aSk6IkMiPT09dD9KcjowO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uIGtpbmQgJHt0fWApO3JldHVybiByfXN0YXRpYyBjcmVhdGVOZXh0KHQpe3JldHVybiBuZXcgd2EoIk4iLHQpfXN0YXRpYyBjcmVhdGVFcnJvcih0KXtyZXR1cm4gbmV3IHdhKCJFIix2b2lkIDAsdCl9c3RhdGljIGNyZWF0ZUNvbXBsZXRlKCl7cmV0dXJuIHdhLmNvbXBsZXRlTm90aWZpY2F0aW9ufX07ZnVuY3Rpb24gWkEobix0KXt2YXIgZSxpLHI7bGV0e2tpbmQ6byx2YWx1ZTpzLGVycm9yOmF9PW47aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbm90aWZpY2F0aW9uLCBtaXNzaW5nICJraW5kIicpOyJOIj09PW8/bnVsbD09PShlPXQubmV4dCl8fHZvaWQgMD09PWV8fGUuY2FsbCh0LHMpOiJFIj09PW8/bnVsbD09PShpPXQuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwodCxhKTpudWxsPT09KHI9dC5jb21wbGV0ZSl8fHZvaWQgMD09PXJ8fHIuY2FsbCh0KX1mdW5jdGlvbiBEXyhuKXtyZXR1cm4hIW4mJihuIGluc3RhbmNlb2YgS3R8fF9uKG4ubGlmdCkmJl9uKG4uc3Vic2NyaWJlKSl9d2EuY29tcGxldGVOb3RpZmljYXRpb249bmV3IHdhKCJDIik7dmFyIE9tPVNtKG49PmZ1bmN0aW9uKCl7bih0aGlzKSx0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UifSk7ZnVuY3Rpb24gSUMobix0KXtsZXQgZT0ib2JqZWN0Ij09dHlwZW9mIHQ7cmV0dXJuIG5ldyBQcm9taXNlKChpLHIpPT57bGV0IG89bmV3IG1sKHtuZXh0OnM9PntpKHMpLG8udW5zdWJzY3JpYmUoKX0sZXJyb3I6cixjb21wbGV0ZTooKT0+e2U/aSh0LmRlZmF1bHRWYWx1ZSk6cihuZXcgT20pfX0pO24uc3Vic2NyaWJlKG8pfSl9ZnVuY3Rpb24gTihuLHQpe3JldHVybiBxdCgoZSxpKT0+e2xldCByPTA7ZS5zdWJzY3JpYmUoVnQoaSxvPT57aS5uZXh0KG4uY2FsbCh0LG8scisrKSl9KSl9KX12YXJ7aXNBcnJheTpaaWV9PUFycmF5O2Z1bmN0aW9uIEtkKG4pe3JldHVybiBOKHQ9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFppZSh0KT9uKC4uLnQpOm4odCl9KG4sdCkpfXZhcntpc0FycmF5OkppZX09QXJyYXkse2dldFByb3RvdHlwZU9mOiRpZSxwcm90b3R5cGU6ZXJlLGtleXM6dHJlfT1PYmplY3Q7ZnVuY3Rpb24gQUMobil7aWYoMT09PW4ubGVuZ3RoKXtsZXQgdD1uWzBdO2lmKEppZSh0KSlyZXR1cm57YXJnczp0LGtleXM6bnVsbH07aWYoZnVuY3Rpb24obil7cmV0dXJuIG4mJiJvYmplY3QiPT10eXBlb2YgbiYmJGllKG4pPT09ZXJlfSh0KSl7bGV0IGU9dHJlKHQpO3JldHVybnthcmdzOmUubWFwKGk9PnRbaV0pLGtleXM6ZX19fXJldHVybnthcmdzOm4sa2V5czpudWxsfX1mdW5jdGlvbiBSQyhuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpLHIpPT4oZVtpXT10W3JdLGUpLHt9KX1mdW5jdGlvbiBkbiguLi5uKXtsZXQgdD1vYyhuKSxlPXJjKG4pLHthcmdzOmksa2V5czpyfT1BQyhuKTtpZigwPT09aS5sZW5ndGgpcmV0dXJuICRyKFtdLHQpO2xldCBvPW5ldyBLdChLQShpLHQscj9zPT5SQyhyLHMpOmlzKSk7cmV0dXJuIGU/by5waXBlKEtkKGUpKTpvfWZ1bmN0aW9uIEtBKG4sdCxlPWlzKXtyZXR1cm4gaT0+e2o0KHQsKCk9PntsZXR7bGVuZ3RoOnJ9PW4sbz1uZXcgQXJyYXkocikscz1yLGE9cjtmb3IobGV0IGw9MDtsPHI7bCsrKWo0KHQsKCk9PntsZXQgYz0kcihuW2xdLHQpLGQ9ITE7Yy5zdWJzY3JpYmUoVnQoaSx1PT57b1tsXT11LGR8fChkPSEwLGEtLSksYXx8aS5uZXh0KGUoby5zbGljZSgpKSl9LCgpPT57LS1zfHxpLmNvbXBsZXRlKCl9KSl9LGkpfSxpKX19ZnVuY3Rpb24gajQobix0LGUpe24/eHMoZSxuLHQpOnQoKX1mdW5jdGlvbiBobihuLHQsZT0xLzApe3JldHVybiBfbih0KT9obigoaSxyKT0+TigobyxzKT0+dChpLG8scixzKSkoaWkobihpLHIpKSksZSk6KCJudW1iZXIiPT10eXBlb2YgdCYmKGU9dCkscXQoKGkscik9PmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz0wLGQ9MCx1PSExLHA9KCk9Pnt1JiYhbC5sZW5ndGgmJiFjJiZ0LmNvbXBsZXRlKCl9LGY9Yj0+YzxpP20oYik6bC5wdXNoKGIpLG09Yj0+e2MrKztsZXQgTT0hMTtpaShlKGIsZCsrKSkuc3Vic2NyaWJlKFZ0KHQseT0+e3QubmV4dCh5KX0sKCk9PntNPSEwfSx2b2lkIDAsKCk9PntpZihNKXRyeXtmb3IoYy0tO2wubGVuZ3RoJiZjPGk7KXtsZXQgeT1sLnNoaWZ0KCk7bSh5KX1wKCl9Y2F0Y2goeSl7dC5lcnJvcih5KX19KSl9O3JldHVybiBuLnN1YnNjcmliZShWdCh0LGYsKCk9Pnt1PSEwLHAoKX0pKSwoKT0+e319KGkscixuLGUpKSl9ZnVuY3Rpb24gUEMobj0xLzApe3JldHVybiBobihpcyxuKX1mdW5jdGlvbiBKZCguLi5uKXtyZXR1cm4gUEMoMSkoJHIobixvYyhuKSkpfWZ1bmN0aW9uIHRhKG4pe3JldHVybiBuZXcgS3QodD0+e2lpKG4oKSkuc3Vic2NyaWJlKHQpfSl9ZnVuY3Rpb24gY28oLi4ubil7bGV0IHQ9cmMobikse2FyZ3M6ZSxrZXlzOml9PUFDKG4pLHI9bmV3IEt0KG89PntsZXR7bGVuZ3RoOnN9PWU7aWYoIXMpcmV0dXJuIHZvaWQgby5jb21wbGV0ZSgpO2xldCBhPW5ldyBBcnJheShzKSxsPXMsYz1zO2ZvcihsZXQgZD0wO2Q8cztkKyspe2xldCB1PSExO2lpKGVbZF0pLnN1YnNjcmliZShWdChvLHA9Pnt1fHwodT0hMCxjLS0pLGFbZF09cH0sKCk9PmwtLSx2b2lkIDAsKCk9PnsoIWx8fCF1KSYmKGN8fG8ubmV4dChpP1JDKGksYSk6YSksby5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gdD9yLnBpcGUoS2QodCkpOnJ9dmFyIGlyZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxycmU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLG9yZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbWkobix0LGUsaSl7aWYoX24oZSkmJihpPWUsZT12b2lkIDApLGkpcmV0dXJuIG1pKG4sdCxlKS5waXBlKEtkKGkpKTtsZXRbcixvXT1mdW5jdGlvbihuKXtyZXR1cm4gX24obi5hZGRFdmVudExpc3RlbmVyKSYmX24obi5yZW1vdmVFdmVudExpc3RlbmVyKX0obik/cnJlLm1hcChzPT5hPT5uW3NdKHQsYSxlKSk6ZnVuY3Rpb24obil7cmV0dXJuIF9uKG4uYWRkTGlzdGVuZXIpJiZfbihuLnJlbW92ZUxpc3RlbmVyKX0obik/aXJlLm1hcChxNChuLHQpKTpmdW5jdGlvbihuKXtyZXR1cm4gX24obi5vbikmJl9uKG4ub2ZmKX0obik/b3JlLm1hcChxNChuLHQpKTpbXTtpZighciYmUG0obikpcmV0dXJuIGhuKHM9Pm1pKHMsdCxlKSkoaWkobikpO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBLdChzPT57bGV0IGE9KC4uLmwpPT5zLm5leHQoMTxsLmxlbmd0aD9sOmxbMF0pO3JldHVybiByKGEpLCgpPT5vKGEpfSl9ZnVuY3Rpb24gcTQobix0KXtyZXR1cm4gZT0+aT0+bltlXSh0LGkpfWZ1bmN0aW9uIG5hKG49MCx0LGU9bjQpe2xldCBpPS0xO3JldHVybiBudWxsIT10JiYobUModCk/ZT10Omk9dCksbmV3IEt0KHI9PntsZXQgbz1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihuKX0obik/K24tZS5ub3coKTpuO288MCYmKG89MCk7bGV0IHM9MDtyZXR1cm4gZS5zY2hlZHVsZShmdW5jdGlvbigpe3IuY2xvc2VkfHwoci5uZXh0KHMrKyksMDw9aT90aGlzLnNjaGVkdWxlKHZvaWQgMCxpKTpyLmNvbXBsZXRlKCkpfSxvKX0pfWZ1bmN0aW9uIHRuKC4uLm4pe2xldCB0PW9jKG4pLGU9ZnVuY3Rpb24obix0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFhBKG4pP24ucG9wKCk6MS8wfShuKSxpPW47cmV0dXJuIGkubGVuZ3RoPzE9PT1pLmxlbmd0aD9paShpWzBdKTpQQyhlKSgkcihpLHQpKTpKcn12YXJ7aXNBcnJheTpjcmV9PUFycmF5O2Z1bmN0aW9uIE9DKG4pe3JldHVybiAxPT09bi5sZW5ndGgmJmNyZShuWzBdKT9uWzBdOm59ZnVuY3Rpb24ga2Uobix0KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKFZ0KGksbz0+bi5jYWxsKHQsbyxyKyspJiZpLm5leHQobykpKX0pfWZ1bmN0aW9uIHNjKG4sdD1KYyl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPSExLHI9bnVsbCxvPW51bGwscz0hMSxhPSgpPT57aWYobz8udW5zdWJzY3JpYmUoKSxvPW51bGwsaSl7aT0hMTtsZXQgYz1yO3I9bnVsbCxlLm5leHQoYyl9cyYmZS5jb21wbGV0ZSgpfSxsPSgpPT57bz1udWxsLHMmJmUuY29tcGxldGUoKX07dC5zdWJzY3JpYmUoVnQoZSxjPT57aT0hMCxyPWMsb3x8aWkobigpKS5zdWJzY3JpYmUobz1WdChlLGEsbCkpfSwoKT0+e3M9ITAsKCFpfHwhb3x8by5jbG9zZWQpJiZlLmNvbXBsZXRlKCl9KSl9KX0oKCk9Pm5hKG4sdCkpfWZ1bmN0aW9uIHpyKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBvLGk9bnVsbCxyPSExO2k9dC5zdWJzY3JpYmUoVnQoZSx2b2lkIDAsdm9pZCAwLHM9PntvPWlpKG4ocyx6cihuKSh0KSkpLGk/KGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUoZSkpOnI9ITB9KSksciYmKGkudW5zdWJzY3JpYmUoKSxpPW51bGwsby5zdWJzY3JpYmUoZSkpfSl9ZnVuY3Rpb24gZVIoLi4ubil7bGV0IHQ9cmMobik7cmV0dXJuIHQ/ZnVuY3Rpb24oLi4ubil7cmV0dXJuIFVBKG4pfShlUiguLi5uKSxLZCh0KSk6cXQoKGUsaSk9PntLQShbZSwuLi5PQyhuKV0pKGkpfSl9ZnVuY3Rpb24gTGkoLi4ubil7cmV0dXJuIGVSKC4uLm4pfWZ1bmN0aW9uIHdyKG4sdD1KYyl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPW51bGwscz1udWxsLGE9KCk9PntpZihyKXtyLnVuc3Vic2NyaWJlKCkscj1udWxsO2xldCBjPW87bz1udWxsLGkubmV4dChjKX19O2Z1bmN0aW9uIGwoKXtsZXQgYz1zK24sZD10Lm5vdygpO2lmKGQ8YylyZXR1cm4gcj10aGlzLnNjaGVkdWxlKHZvaWQgMCxjLWQpLHZvaWQgaS5hZGQocik7YSgpfWUuc3Vic2NyaWJlKFZ0KGksYz0+e289YyxzPXQubm93KCkscnx8KHI9dC5zY2hlZHVsZShsLG4pLGkuYWRkKHIpKX0sKCk9PnthKCksaS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntvPXI9bnVsbH0pKX0pfWZ1bmN0aW9uIFl0KG4pe3JldHVybiBuPD0wPygpPT5KcjpxdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoVnQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBJXygpe3JldHVybiBxdCgobix0KT0+e24uc3Vic2NyaWJlKFZ0KHQsZmwpKX0pfWZ1bmN0aW9uIGttKG4sdCl7cmV0dXJuIHQ/ZT0+SmQodC5waXBlKFl0KDEpLElfKCkpLGUucGlwZShrbShuKSkpOmhuKChlLGkpPT5uKGUsaSkucGlwZShZdCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gTigoKT0+bil9KGUpKSl9ZnVuY3Rpb24gU2Eobix0PUpjKXtsZXQgZT1uYShuLHQpO3JldHVybiBrbSgoKT0+ZSl9ZnVuY3Rpb24gWW4obix0PWlzKXtyZXR1cm4gbj1uPz9kcmUscXQoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKFZ0KGkscz0+e2xldCBhPXQocyk7KG98fCFuKHIsYSkpJiYobz0hMSxyPWEsaS5uZXh0KHMpKX0pKX0pfWZ1bmN0aW9uIGRyZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBLNChuPXVyZSl7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoVnQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIHVyZSgpe3JldHVybiBuZXcgT219ZnVuY3Rpb24gRkMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoRkMoKGkscik9PmlpKG4oaSxyKSkucGlwZShOKChvLHMpPT50KGksbyxyLHMpKSkpKTpxdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLHM9ITE7ZS5zdWJzY3JpYmUoVnQoaSxhPT57b3x8KG89VnQoaSx2b2lkIDAsKCk9PntvPW51bGwscyYmaS5jb21wbGV0ZSgpfSksaWkobihhLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57cz0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gTEMobix0LGUsaSl7cmV0dXJuIHF0KChyLG8pPT57bGV0IHM7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6cyxjb25uZWN0b3I6aX09dCk6cz10O2xldCBhPW5ldyBNYXAsbD1tPT57YS5mb3JFYWNoKG0pLG0obyl9LGM9bT0+bChiPT5iLmVycm9yKG0pKSxkPTAsdT0hMSxwPW5ldyBNXyhvLG09Pnt0cnl7bGV0IGI9bihtKSxNPWEuZ2V0KGIpO2lmKCFNKXthLnNldChiLE09aT9pKCk6bmV3IEllKTtsZXQgeT1mdW5jdGlvbihtLGIpe2xldCBNPW5ldyBLdCh5PT57ZCsrO2xldCB4PWIuc3Vic2NyaWJlKHkpO3JldHVybigpPT57eC51bnN1YnNjcmliZSgpLDA9PS0tZCYmdSYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBNLmtleT1tLE19KGIsTSk7aWYoby5uZXh0KHkpLGUpe2xldCB4PVZ0KE0sKCk9PntNLmNvbXBsZXRlKCkseD8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+YS5kZWxldGUoYikpO3AuYWRkKGlpKGUoeSkpLnN1YnNjcmliZSh4KSl9fU0ubmV4dChzP3MobSk6bSl9Y2F0Y2goYil7YyhiKX19LCgpPT5sKG09Pm0uY29tcGxldGUoKSksYywoKT0+YS5jbGVhcigpLCgpPT4odT0hMCwwPT09ZCkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24gRm0oKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKFZ0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIENzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBJZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCxkPSExLHU9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGY9KCk9PntwKCkscz1sPXZvaWQgMCxkPXU9ITF9LG09KCk9PntsZXQgYj1zO2YoKSxiPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcXQoKGIsTSk9PntjKyssIXUmJiFkJiZwKCk7bGV0IHk9bD1sPz90KCk7TS5hZGQoKCk9PntjLS0sMD09PWMmJiF1JiYhZCYmKGE9YVIobSxyKSl9KSx5LnN1YnNjcmliZShNKSwhcyYmYz4wJiYocz1uZXcgbWwoe25leHQ6eD0+eS5uZXh0KHgpLGVycm9yOng9Pnt1PSEwLHAoKSxhPWFSKGYsZSx4KSx5LmVycm9yKHgpfSxjb21wbGV0ZTooKT0+e2Q9ITAscCgpLGE9YVIoZixpKSx5LmNvbXBsZXRlKCl9fSksaWkoYikuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBhUihuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBtbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIE1zKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsQ3Moe2Nvbm5lY3RvcjooKT0+bmV3IFJwKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIGlhKG4pe3JldHVybiBrZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gcW4oLi4ubil7bGV0IHQ9b2Mobik7cmV0dXJuIHF0KChlLGkpPT57KHQ/SmQobixlLHQpOkpkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIEpuKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKFZ0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCxkPW8rKztpaShuKGwsZCkpLnN1YnNjcmliZShyPVZ0KGksdT0+aS5uZXh0KHQ/dChsLHUsZCxjKyspOnUpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBxdCgodCxlKT0+e2lpKG4pLnN1YnNjcmliZShWdChlLCgpPT5lLmNvbXBsZXRlKCksZmwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gQV8obix0PSExKXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKFZ0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBOdChuLHQsZSl7bGV0IGk9X24obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/cXQoKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoVnQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOmlzfXZhciBsUj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYWMobix0PUpjLGU9bFIpe2xldCBpPW5hKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1sUil7cmV0dXJuIHF0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLGQ9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoZigpLGMmJmkuY29tcGxldGUoKSl9LHU9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPW09Pmw9aWkobihtKSkuc3Vic2NyaWJlKFZ0KGksZCx1KSksZj0oKT0+e2lmKHMpe3M9ITE7bGV0IG09YTthPW51bGwsaS5uZXh0KG0pLCFjJiZwKG0pfX07ZS5zdWJzY3JpYmUoVnQoaSxtPT57cz0hMCxhPW0sKCFsfHxsLmNsb3NlZCkmJihyP2YoKTpwKG0pKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBCdCguLi5uKXtsZXQgdD1yYyhuKTtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWlpKG5bbF0pLnN1YnNjcmliZShWdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KGlzKSkmJihzPW51bGwpKX0sZmwpKTtlLnN1YnNjcmliZShWdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIHRyKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT10cilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIGNSKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIHBvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChwbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIEFSKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIHByZT10cih7X19mb3J3YXJkX3JlZl9fOnRyfSk7ZnVuY3Rpb24gJG4obil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPSRuLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcG8odGhpcygpKX0sbn1mdW5jdGlvbiBSaShuKXtyZXR1cm4gWUgobik/bigpOm59ZnVuY3Rpb24gWUgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkocHJlKSYmbi5fX2ZvcndhcmRfcmVmX189PT0kbn1mdW5jdGlvbiBYSChuKXtyZXR1cm4gbiYmISFuLlx1MDI3NXByb3ZpZGVyc312YXIgdGI9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiLHl0PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxlKXtzdXBlcihmdW5jdGlvbihuLHQpe3JldHVybmBORzAke01hdGguYWJzKG4pfSR7dD8iOiAiK3QudHJpbSgpOiIifWB9KHQsZSkpLHRoaXMuY29kZT10fX07ZnVuY3Rpb24gVW4obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP246bnVsbD09bj8iIjpTdHJpbmcobil9ZnVuY3Rpb24gTFAobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5uYW1lfHxuLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT1uJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50eXBlP24udHlwZS5uYW1lfHxuLnR5cGUudG9TdHJpbmcoKTpVbihuKX1mdW5jdGlvbiBCUChuLHQpe3Rocm93IG5ldyB5dCgtMjAxLCExKX1mdW5jdGlvbiBRSChuLHQsZSxpKXt0aHJvdyBuZXcgRXJyb3IoYEFTU0VSVElPTiBFUlJPUjogJHtufWArKG51bGw9PWk/IiI6YCBbRXhwZWN0ZWQ9PiAke2V9ICR7aX0gJHt0fSA8PUFjdHVhbF1gKSl9ZnVuY3Rpb24gdWUobil7cmV0dXJue3Rva2VuOm4udG9rZW4scHJvdmlkZWRJbjpuLnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTpuLmZhY3RvcnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBVKG4pe3JldHVybntwcm92aWRlcnM6bi5wcm92aWRlcnN8fFtdLGltcG9ydHM6bi5pbXBvcnRzfHxbXX19ZnVuY3Rpb24gVlAobil7cmV0dXJuICQ0KG4sSkMpfHwkNChuLFpIKX1mdW5jdGlvbiAkNChuLHQpe3JldHVybiBuLmhhc093blByb3BlcnR5KHQpP25bdF06bnVsbH1mdW5jdGlvbiBlSChuKXtyZXR1cm4gbiYmKG4uaGFzT3duUHJvcGVydHkoUlIpfHxuLmhhc093blByb3BlcnR5KF9yZSkpP25bUlJdOm51bGx9dmFyIFBSLEpDPXRyKHsiXHUwMjc1cHJvdiI6dHJ9KSxSUj10cih7Ilx1MDI3NWluaiI6dHJ9KSxaSD10cih7bmdJbmplY3RhYmxlRGVmOnRyfSksX3JlPXRyKHtuZ0luamVjdG9yRGVmOnRyfSkseGk9KCgpPT57cmV0dXJuKG49eGl8fCh4aT17fSkpW24uRGVmYXVsdD0wXT0iRGVmYXVsdCIsbltuLkhvc3Q9MV09Ikhvc3QiLG5bbi5TZWxmPTJdPSJTZWxmIixuW24uU2tpcFNlbGY9NF09IlNraXBTZWxmIixuW24uT3B0aW9uYWw9OF09Ik9wdGlvbmFsIix4aTt2YXIgbn0pKCk7ZnVuY3Rpb24gRWEobil7bGV0IHQ9UFI7cmV0dXJuIFBSPW4sdH1mdW5jdGlvbiBLSChuLHQsZSl7bGV0IGk9VlAobik7cmV0dXJuIGkmJiJyb290Ij09aS5wcm92aWRlZEluP3ZvaWQgMD09PWkudmFsdWU/aS52YWx1ZT1pLmZhY3RvcnkoKTppLnZhbHVlOmUmeGkuT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT10P3Q6dm9pZCBCUChwbyhuKSl9dmFyIE9fLFVyPSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKSxqXz17fSxPUj0iX19OR19ESV9GTEFHX18iLCRDPSJuZ1RlbXBUb2tlblBhdGgiLHlyZT0ibmdUb2tlblBhdGgiLHhyZT0vXG4vZ20sQ3JlPSJcdTAyNzUiLHRIPSJfX3NvdXJjZSI7ZnVuY3Rpb24gTm0obil7bGV0IHQ9T187cmV0dXJuIE9fPW4sdH1mdW5jdGlvbiBNcmUobix0PXhpLkRlZmF1bHQpe2lmKHZvaWQgMD09PU9fKXRocm93IG5ldyB5dCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PU9fP0tIKG4sdm9pZCAwLHQpOk9fLmdldChuLHQmeGkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gayhuLHQ9eGkuRGVmYXVsdCl7cmV0dXJuKFBSfHxNcmUpKFJpKG4pLHQpfWZ1bmN0aW9uIEpIKG4pe3Rocm93IG5ldyB5dCgyMDIsITEpfWZ1bmN0aW9uIGFpKG4sdD14aS5EZWZhdWx0KXtyZXR1cm4gayhuLHdNKHQpKX1mdW5jdGlvbiB3TShuKXtyZXR1cm4gdHlwZW9mIG4+InUifHwibnVtYmVyIj09dHlwZW9mIG4/bjowfChuLm9wdGlvbmFsJiY4KXwobi5ob3N0JiYxKXwobi5zZWxmJiYyKXwobi5za2lwU2VsZiYmNCl9ZnVuY3Rpb24ga1Iobil7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPVJpKG5bZV0pO2lmKEFycmF5LmlzQXJyYXkoaSkpe2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgeXQoOTAwLCExKTtsZXQgcixvPXhpLkRlZmF1bHQ7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBhPWlbc10sbD13cmUoYSk7Im51bWJlciI9PXR5cGVvZiBsPy0xPT09bD9yPWEudG9rZW46b3w9bDpyPWF9dC5wdXNoKGsocixvKSl9ZWxzZSB0LnB1c2goayhpKSl9cmV0dXJuIHR9ZnVuY3Rpb24gbmIobix0KXtyZXR1cm4gbltPUl09dCxuLnByb3RvdHlwZVtPUl09dCxufWZ1bmN0aW9uIHdyZShuKXtyZXR1cm4gbltPUl19ZnVuY3Rpb24gb3Uobil7cmV0dXJue3RvU3RyaW5nOm59LnRvU3RyaW5nKCl9dmFyIGtfPSgoKT0+e3JldHVybihuPWtffHwoa189e30pKVtuLk9uUHVzaD0wXT0iT25QdXNoIixuW24uRGVmYXVsdD0xXT0iRGVmYXVsdCIsa187dmFyIG59KSgpLHJhPSgoKT0+e3JldHVybihuPXJhfHwocmE9e30pKVtuLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsbltuLk5vbmU9Ml09Ik5vbmUiLG5bbi5TaGFkb3dEb209M109IlNoYWRvd0RvbSIscmE7dmFyIG59KSgpLCRjPXt9LFZpPVtdLFNNPXRyKHsiXHUwMjc1Y21wIjp0cn0pLEhQPXRyKHsiXHUwMjc1ZGlyIjp0cn0pLHpQPXRyKHsiXHUwMjc1cGlwZSI6dHJ9KSwkSD10cih7Ilx1MDI3NW1vZCI6dHJ9KSxlZD10cih7Ilx1MDI3NWZhYyI6dHJ9KSxGXz10cih7X19OR19FTEVNRU5UX0lEX186dHJ9KSxUcmU9MDtmdW5jdGlvbiBPKG4pe3JldHVybiBvdSgoKT0+e2xldCB0PXQ1KG4pLGU9ey4uLnQsZGVjbHM6bi5kZWNscyx2YXJzOm4udmFycyx0ZW1wbGF0ZTpuLnRlbXBsYXRlLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOm4uY2hhbmdlRGV0ZWN0aW9uPT09a18uT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczp0LnN0YW5kYWxvbmUmJm4uZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3RvcjpudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8cmEuRW11bGF0ZWQsaWQ6ImMiK1RyZSsrLHN0eWxlczpuLnN0eWxlc3x8VmksXzpudWxsLHNjaGVtYXM6bi5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGx9O241KGUpO2xldCBpPW4uZGVwZW5kZW5jaWVzO3JldHVybiBlLmRpcmVjdGl2ZURlZnM9ZU0oaSwhMSksZS5waXBlRGVmcz1lTShpLCEwKSxlfSl9ZnVuY3Rpb24gaWIobix0LGUpe2xldCBpPW4uXHUwMjc1Y21wO2kuZGlyZWN0aXZlRGVmcz1lTSh0LCExKSxpLnBpcGVEZWZzPWVNKGUsITApfWZ1bmN0aW9uIERyZShuKXtyZXR1cm4gRGEobil8fHR1KG4pfWZ1bmN0aW9uIElyZShuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24gRyhuKXtyZXR1cm4gb3UoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxWaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFZpLGltcG9ydHM6bi5pbXBvcnRzfHxWaSxleHBvcnRzOm4uZXhwb3J0c3x8VmksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIG5IKG4sdCl7aWYobnVsbD09bilyZXR1cm4gJGM7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX1mdW5jdGlvbiB3ZShuKXtyZXR1cm4gb3UoKCk9PntsZXQgdD10NShuKTtyZXR1cm4gbjUodCksdH0pfWZ1bmN0aW9uIEttKG4pe3JldHVybnt0eXBlOm4udHlwZSxuYW1lOm4ubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PW4ucHVyZSxzdGFuZGFsb25lOiEwPT09bi5zdGFuZGFsb25lLG9uRGVzdHJveTpuLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBEYShuKXtyZXR1cm4gbltTTV18fG51bGx9ZnVuY3Rpb24gdHUobil7cmV0dXJuIG5bSFBdfHxudWxsfWZ1bmN0aW9uIG51KG4pe3JldHVybiBuW3pQXXx8bnVsbH1mdW5jdGlvbiBlNShuKXtsZXQgdD1EYShuKXx8dHUobil8fG51KG4pO3JldHVybiBudWxsIT09dCYmdC5zdGFuZGFsb25lfWZ1bmN0aW9uIEdtKG4sdCl7bGV0IGU9blskSF18fG51bGw7aWYoIWUmJiEwPT09dCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtwbyhuKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gZX1mdW5jdGlvbiB0NShuKXtsZXQgdD17fTtyZXR1cm57dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxmYWN0b3J5Om51bGwsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6dCxleHBvcnRBczpuLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1uLnN0YW5kYWxvbmUsc2VsZWN0b3JzOm4uc2VsZWN0b3JzfHxWaSx2aWV3UXVlcnk6bi52aWV3UXVlcnl8fG51bGwsZmVhdHVyZXM6bi5mZWF0dXJlc3x8bnVsbCxzZXRJbnB1dDpudWxsLGZpbmRIb3N0RGlyZWN0aXZlRGVmczpudWxsLGhvc3REaXJlY3RpdmVzOm51bGwsaW5wdXRzOm5IKG4uaW5wdXRzLHQpLG91dHB1dHM6bkgobi5vdXRwdXRzKX19ZnVuY3Rpb24gbjUobil7bi5mZWF0dXJlcz8uZm9yRWFjaCh0PT50KG4pKX1mdW5jdGlvbiBlTShuLHQpe2lmKCFuKXJldHVybiBudWxsO2xldCBlPXQ/bnU6RHJlO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pLm1hcChpPT5lKGkpKS5maWx0ZXIoSXJlKX12YXIgc3U9MCxGbj0xLHJpPTIsR3I9MyxfbD00LEZwPTUsU3M9NixHXz03LEVzPTgsdE09OSxuTT0xMCxvaT0xMSxGUj0xMixXXz0xMyxpSD0xNCxKbT0xNSxibD0xNixyYj0xNyxMbT0xOCxjYz0xOSxFTT0yMCxpNT0yMSxXcj0yMixVUD0xLHI1PTIsalA9NyxpTT04LFdtPTksd3M9MTA7ZnVuY3Rpb24gTnAobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgbltVUF19ZnVuY3Rpb24gbmQobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiEwPT09bltVUF19ZnVuY3Rpb24gR1Aobil7cmV0dXJuIDAhPSg0Jm4uZmxhZ3MpfWZ1bmN0aW9uIFRNKG4pe3JldHVybiBuLmNvbXBvbmVudE9mZnNldD4tMX1mdW5jdGlvbiBETShuKXtyZXR1cm4gMT09KDEmbi5mbGFncyl9ZnVuY3Rpb24gdmwobil7cmV0dXJuISFuLnRlbXBsYXRlfWZ1bmN0aW9uIEFyZShuKXtyZXR1cm4gMCE9KDI1NiZuW3JpXSl9ZnVuY3Rpb24gQnAobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShlZCk/bltlZF06bnVsbH12YXIgTlI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMucHJldmlvdXNWYWx1ZT10LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1pfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19O2Z1bmN0aW9uIEd0KCl7cmV0dXJuIG81fWZ1bmN0aW9uIG81KG4pe3JldHVybiBuLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYobi5zZXRJbnB1dD1QcmUpLFJyZX1mdW5jdGlvbiBScmUoKXtsZXQgbj1hNSh0aGlzKSx0PW4/LmN1cnJlbnQ7aWYodCl7bGV0IGU9bi5wcmV2aW91cztpZihlPT09JGMpbi5wcmV2aW91cz10O2Vsc2UgZm9yKGxldCBpIGluIHQpZVtpXT10W2ldO24uY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXModCl9fWZ1bmN0aW9uIFByZShuLHQsZSxpKXtsZXQgcj10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLG89YTUobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bczVdPXR9KG4se3ByZXZpb3VzOiRjLGN1cnJlbnQ6bnVsbH0pLHM9by5jdXJyZW50fHwoby5jdXJyZW50PXt9KSxhPW8ucHJldmlvdXMsbD1hW3JdO3Nbcl09bmV3IE5SKGwmJmwuY3VycmVudFZhbHVlLHQsYT09PSRjKSxuW2ldPXR9R3QubmdJbmhlcml0PSEwO3ZhciBzNT0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gYTUobil7cmV0dXJuIG5bczVdfHxudWxsfXZhciBUYT1mdW5jdGlvbihuLHQsZSl7fSxsNT0ic3ZnIixjNT0ibWF0aCI7ZnVuY3Rpb24gUmEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bc3VdO3JldHVybiBufWZ1bmN0aW9uIElNKG4sdCl7cmV0dXJuIFJhKHRbbl0pfWZ1bmN0aW9uIG9hKG4sdCl7cmV0dXJuIFJhKHRbbi5pbmRleF0pfWZ1bmN0aW9uIGQ1KG4sdCl7cmV0dXJuIG4uZGF0YVt0XX1mdW5jdGlvbiAkbShuLHQpe3JldHVybiBuW3RdfWZ1bmN0aW9uIGlkKG4sdCl7bGV0IGU9dFtuXTtyZXR1cm4gTnAoZSk/ZTplW3N1XX1mdW5jdGlvbiByTShuKXtyZXR1cm4gNjQ9PSg2NCZuW3JpXSl9ZnVuY3Rpb24gaXUobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gdTUobil7bltMbV09MH1mdW5jdGlvbiBXUChuLHQpe25bRnBdKz10O2xldCBlPW4saT1uW0dyXTtmb3IoO251bGwhPT1pJiYoMT09PXQmJjE9PT1lW0ZwXXx8LTE9PT10JiYwPT09ZVtGcF0pOylpW0ZwXSs9dCxlPWksaT1pW0dyXX12YXIgam49e2xGcmFtZTp2NShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIHA1KCl7cmV0dXJuIGpuLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBqbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRWkoKXtyZXR1cm4gam4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIFgobil7cmV0dXJuIGpuLmxGcmFtZS5jb250ZXh0TFZpZXc9bixuW0VzXX1mdW5jdGlvbiBRKG4pe3JldHVybiBqbi5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsbn1mdW5jdGlvbiBQbygpe2xldCBuPWY1KCk7Zm9yKDtudWxsIT09biYmNjQ9PT1uLnR5cGU7KW49bi5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gZjUoKXtyZXR1cm4gam4ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBxXygpe2xldCBuPWpuLmxGcmFtZSx0PW4uY3VycmVudFROb2RlO3JldHVybiBuLmlzUGFyZW50P3Q6dC5wYXJlbnR9ZnVuY3Rpb24gZGMobix0KXtsZXQgZT1qbi5sRnJhbWU7ZS5jdXJyZW50VE5vZGU9bixlLmlzUGFyZW50PXR9ZnVuY3Rpb24gcVAoKXtyZXR1cm4gam4ubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIFlQKCl7am4ubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIG9zKCl7bGV0IG49am4ubEZyYW1lLHQ9bi5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09dCYmKHQ9bi5iaW5kaW5nUm9vdEluZGV4PW4udFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLHR9ZnVuY3Rpb24gcmQoKXtyZXR1cm4gam4ubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBtNShuKXtyZXR1cm4gam4ubEZyYW1lLmJpbmRpbmdJbmRleD1ufWZ1bmN0aW9uIGVoKCl7cmV0dXJuIGpuLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBvZChuKXtsZXQgdD1qbi5sRnJhbWUsZT10LmJpbmRpbmdJbmRleDtyZXR1cm4gdC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nSW5kZXgrbixlfWZ1bmN0aW9uIGg1KG4pe2puLmxGcmFtZS5pbkkxOG49bn1mdW5jdGlvbiBHcmUobix0KXtsZXQgZT1qbi5sRnJhbWU7ZS5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nUm9vdEluZGV4PW4sTFIodCl9ZnVuY3Rpb24gTFIobil7am4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleD1ufWZ1bmN0aW9uIFhQKG4pe2xldCB0PWpuLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT10P251bGw6blt0XX1mdW5jdGlvbiBnNSgpe3JldHVybiBqbi5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gUVAobil7am4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PW59ZnVuY3Rpb24gcXJlKG4pe2xldCB0PW5bRm5dO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bltTc106bnVsbH1mdW5jdGlvbiBfNShuLHQsZSl7aWYoZSZ4aS5Ta2lwU2VsZil7bGV0IHI9dCxvPW47Zm9yKDshKHI9ci5wYXJlbnQsbnVsbCE9PXJ8fGUmeGkuSG9zdHx8KHI9cXJlKG8pLG51bGw9PT1yfHwobz1vW0ptXSwxMCZyLnR5cGUpKSk7KTtpZihudWxsPT09cilyZXR1cm4hMTt0PXIsbj1vfWxldCBpPWpuLmxGcmFtZT1iNSgpO3JldHVybiBpLmN1cnJlbnRUTm9kZT10LGkubFZpZXc9biwhMH1mdW5jdGlvbiBaUChuKXtsZXQgdD1iNSgpLGU9bltGbl07am4ubEZyYW1lPXQsdC5jdXJyZW50VE5vZGU9ZS5maXJzdENoaWxkLHQubFZpZXc9bix0LnRWaWV3PWUsdC5jb250ZXh0TFZpZXc9bix0LmJpbmRpbmdJbmRleD1lLmJpbmRpbmdTdGFydEluZGV4LHQuaW5JMThuPSExfWZ1bmN0aW9uIGI1KCl7bGV0IG49am4ubEZyYW1lLHQ9bnVsbD09PW4/bnVsbDpuLmNoaWxkO3JldHVybiBudWxsPT09dD92NShuKTp0fWZ1bmN0aW9uIHY1KG4pe2xldCB0PXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6bixjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT1uJiYobi5jaGlsZD10KSx0fWZ1bmN0aW9uIHk1KCl7bGV0IG49am4ubEZyYW1lO3JldHVybiBqbi5sRnJhbWU9bi5wYXJlbnQsbi5jdXJyZW50VE5vZGU9bnVsbCxuLmxWaWV3PW51bGwsbn12YXIgeDU9eTU7ZnVuY3Rpb24gS1AoKXtsZXQgbj15NSgpO24uaXNQYXJlbnQ9ITAsbi50Vmlldz1udWxsLG4uc2VsZWN0ZWRJbmRleD0tMSxuLmNvbnRleHRMVmlldz1udWxsLG4uZWxlbWVudERlcHRoQ291bnQ9MCxuLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxuLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxuLmJpbmRpbmdSb290SW5kZXg9LTEsbi5iaW5kaW5nSW5kZXg9LTEsbi5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIHNzKCl7cmV0dXJuIGpuLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIFZwKG4pe2puLmxGcmFtZS5zZWxlY3RlZEluZGV4PW59ZnVuY3Rpb24ga3IoKXtsZXQgbj1qbi5sRnJhbWU7cmV0dXJuIGQ1KG4udFZpZXcsbi5zZWxlY3RlZEluZGV4KX1mdW5jdGlvbiBObigpe2puLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPWw1fWZ1bmN0aW9uIE9vKCl7am4ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2U9bnVsbH1mdW5jdGlvbiBBTShuLHQpe2ZvcihsZXQgZT10LmRpcmVjdGl2ZVN0YXJ0LGk9dC5kaXJlY3RpdmVFbmQ7ZTxpO2UrKyl7bGV0IG89bi5kYXRhW2VdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6cyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6YSxuZ0FmdGVyVmlld0luaXQ6bCxuZ0FmdGVyVmlld0NoZWNrZWQ6YyxuZ09uRGVzdHJveTpkfT1vO3MmJihuLmNvbnRlbnRIb29rcz8/KG4uY29udGVudEhvb2tzPVtdKSkucHVzaCgtZSxzKSxhJiYoKG4uY29udGVudEhvb2tzPz8obi5jb250ZW50SG9va3M9W10pKS5wdXNoKGUsYSksKG4uY29udGVudENoZWNrSG9va3M/PyhuLmNvbnRlbnRDaGVja0hvb2tzPVtdKSkucHVzaChlLGEpKSxsJiYobi52aWV3SG9va3M/PyhuLnZpZXdIb29rcz1bXSkpLnB1c2goLWUsbCksYyYmKChuLnZpZXdIb29rcz8/KG4udmlld0hvb2tzPVtdKSkucHVzaChlLGMpLChuLnZpZXdDaGVja0hvb2tzPz8obi52aWV3Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxjKSksbnVsbCE9ZCYmKG4uZGVzdHJveUhvb2tzPz8obi5kZXN0cm95SG9va3M9W10pKS5wdXNoKGUsZCl9fWZ1bmN0aW9uIGpDKG4sdCxlKXtDNShuLHQsMyxlKX1mdW5jdGlvbiBHQyhuLHQsZSxpKXsoMyZuW3JpXSk9PT1lJiZDNShuLHQsZSxpKX1mdW5jdGlvbiBkUihuLHQpe2xldCBlPW5bcmldOygzJmUpPT09dCYmKGUmPTIwNDcsZSs9MSxuW3JpXT1lKX1mdW5jdGlvbiBDNShuLHQsZSxpKXtsZXQgbz1pPz8tMSxzPXQubGVuZ3RoLTEsYT0wO2ZvcihsZXQgbD12b2lkIDAhPT1pPzY1NTM1Jm5bTG1dOjA7bDxzO2wrKylpZigibnVtYmVyIj09dHlwZW9mIHRbbCsxXSl7aWYoYT10W2xdLG51bGwhPWkmJmE+PWkpYnJlYWt9ZWxzZSB0W2xdPDAmJihuW0xtXSs9NjU1MzYpLChhPG98fC0xPT1vKSYmKCRyZShuLGUsdCxsKSxuW0xtXT0oNDI5NDkwMTc2MCZuW0xtXSkrbCsyKSxsKyt9ZnVuY3Rpb24gJHJlKG4sdCxlLGkpe2xldCByPWVbaV08MCxvPWVbaSsxXSxhPW5bcj8tZVtpXTplW2ldXTtpZihyKXtpZihuW3JpXT4+MTE8bltMbV0+PjE2JiYoMyZuW3JpXSk9PT10KXtuW3JpXSs9MjA0OCxUYSg0LGEsbyk7dHJ5e28uY2FsbChhKX1maW5hbGx5e1RhKDUsYSxvKX19fWVsc2V7VGEoNCxhLG8pO3RyeXtvLmNhbGwoYSl9ZmluYWxseXtUYSg1LGEsbyl9fX12YXIgam09LTEsSHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuZmFjdG9yeT10LHRoaXMucmVzb2x2aW5nPSExLHRoaXMuY2FuU2VlVmlld1Byb3ZpZGVycz1lLHRoaXMuaW5qZWN0SW1wbD1pfX07ZnVuY3Rpb24gQlIobix0LGUpe2xldCBpPTA7Zm9yKDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpXTtpZigibnVtYmVyIj09dHlwZW9mIHIpe2lmKDAhPT1yKWJyZWFrO2krKztsZXQgbz1lW2krK10scz1lW2krK10sYT1lW2krK107bi5zZXRBdHRyaWJ1dGUodCxzLGEsbyl9ZWxzZXtsZXQgbz1yLHM9ZVsrK2ldO2lvZShvKT9uLnNldFByb3BlcnR5KHQsbyxzKTpuLnNldEF0dHJpYnV0ZSh0LG8scyksaSsrfX1yZXR1cm4gaX1mdW5jdGlvbiBNNShuKXtyZXR1cm4gMz09PW58fDQ9PT1ufHw2PT09bn1mdW5jdGlvbiBpb2Uobil7cmV0dXJuIDY0PT09bi5jaGFyQ29kZUF0KDApfWZ1bmN0aW9uIFlfKG4sdCl7aWYobnVsbCE9PXQmJjAhPT10Lmxlbmd0aClpZihudWxsPT09bnx8MD09PW4ubGVuZ3RoKW49dC5zbGljZSgpO2Vsc2V7bGV0IGU9LTE7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07Im51bWJlciI9PXR5cGVvZiByP2U9cjowPT09ZXx8b0gobixlLHIsbnVsbCwtMT09PWV8fDI9PT1lP3RbKytpXTpudWxsKX19cmV0dXJuIG59ZnVuY3Rpb24gb0gobix0LGUsaSxyKXtsZXQgbz0wLHM9bi5sZW5ndGg7aWYoLTE9PT10KXM9LTE7ZWxzZSBmb3IoO288bi5sZW5ndGg7KXtsZXQgYT1uW28rK107aWYoIm51bWJlciI9PXR5cGVvZiBhKXtpZihhPT09dCl7cz0tMTticmVha31pZihhPnQpe3M9by0xO2JyZWFrfX19Zm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvXTtpZigibnVtYmVyIj09dHlwZW9mIGEpYnJlYWs7aWYoYT09PWUpe2lmKG51bGw9PT1pKXJldHVybiB2b2lkKG51bGwhPT1yJiYobltvKzFdPXIpKTtpZihpPT09bltvKzFdKXJldHVybiB2b2lkKG5bbysyXT1yKX1vKyssbnVsbCE9PWkmJm8rKyxudWxsIT09ciYmbysrfS0xIT09cyYmKG4uc3BsaWNlKHMsMCx0KSxvPXMrMSksbi5zcGxpY2UobysrLDAsZSksbnVsbCE9PWkmJm4uc3BsaWNlKG8rKywwLGkpLG51bGwhPT1yJiZuLnNwbGljZShvKyssMCxyKX1mdW5jdGlvbiB3NShuKXtyZXR1cm4gbiE9PWptfWZ1bmN0aW9uIG9NKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIHNNKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVtKbV0sZS0tO3JldHVybiBpfXZhciBWUj0hMDtmdW5jdGlvbiBhTShuKXtsZXQgdD1WUjtyZXR1cm4gVlI9bix0fXZhciBTNT0yNTUsRTU9NSxzb2U9MCxsYz17fTtmdW5jdGlvbiBsTShuLHQpe2xldCBlPVQ1KG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbRm5dO2kuZmlyc3RDcmVhdGVQYXNzJiYobi5pbmplY3RvckluZGV4PXQubGVuZ3RoLHVSKGkuZGF0YSxuKSx1Uih0LG51bGwpLHVSKGkuYmx1ZXByaW50LG51bGwpKTtsZXQgcj1KUChuLHQpLG89bi5pbmplY3RvckluZGV4O2lmKHc1KHIpKXtsZXQgcz1vTShyKSxhPXNNKHIsdCksbD1hW0ZuXS5kYXRhO2ZvcihsZXQgYz0wO2M8ODtjKyspdFtvK2NdPWFbcytjXXxsW3MrY119cmV0dXJuIHRbbys4XT1yLG99ZnVuY3Rpb24gdVIobix0KXtuLnB1c2goMCwwLDAsMCwwLDAsMCwwLHQpfWZ1bmN0aW9uIFQ1KG4sdCl7cmV0dXJuLTE9PT1uLmluamVjdG9ySW5kZXh8fG4ucGFyZW50JiZuLnBhcmVudC5pbmplY3RvckluZGV4PT09bi5pbmplY3RvckluZGV4fHxudWxsPT09dFtuLmluamVjdG9ySW5kZXgrOF0/LTE6bi5pbmplY3RvckluZGV4fWZ1bmN0aW9uIEpQKG4sdCl7aWYobi5wYXJlbnQmJi0xIT09bi5wYXJlbnQuaW5qZWN0b3JJbmRleClyZXR1cm4gbi5wYXJlbnQuaW5qZWN0b3JJbmRleDtsZXQgZT0wLGk9bnVsbCxyPXQ7Zm9yKDtudWxsIT09cjspe2lmKGk9UDUociksbnVsbD09PWkpcmV0dXJuIGptO2lmKGUrKyxyPXJbSm1dLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuIGptfWZ1bmN0aW9uIEhSKG4sdCxlKXshZnVuY3Rpb24obix0LGUpe2xldCBpOyJzdHJpbmciPT10eXBlb2YgZT9pPWUuY2hhckNvZGVBdCgwKXx8MDplLmhhc093blByb3BlcnR5KEZfKSYmKGk9ZVtGX10pLG51bGw9PWkmJihpPWVbRl9dPXNvZSsrKTtsZXQgcj1pJlM1O3QuZGF0YVtuKyhyPj5FNSldfD0xPDxyfShuLHQsZSl9ZnVuY3Rpb24gRDUobix0LGUpe2lmKGUmeGkuT3B0aW9uYWx8fHZvaWQgMCE9PW4pcmV0dXJuIG47QlAoKX1mdW5jdGlvbiBJNShuLHQsZSxpKXtpZihlJnhpLk9wdGlvbmFsJiZ2b2lkIDA9PT1pJiYoaT1udWxsKSwwPT0oZSYoeGkuU2VsZnx4aS5Ib3N0KSkpe2xldCByPW5bdE1dLG89RWEodm9pZCAwKTt0cnl7cmV0dXJuIHI/ci5nZXQodCxpLGUmeGkuT3B0aW9uYWwpOktIKHQsaSxlJnhpLk9wdGlvbmFsKX1maW5hbGx5e0VhKG8pfX1yZXR1cm4gRDUoaSwwLGUpfWZ1bmN0aW9uIEE1KG4sdCxlLGk9eGkuRGVmYXVsdCxyKXtpZihudWxsIT09bil7aWYoMTAyNCZ0W3JpXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzW3JpXSYmISgyNTYmc1tyaV0pOyl7bGV0IGE9UjUobyxzLGUsaXx4aS5TZWxmLGxjKTtpZihhIT09bGMpcmV0dXJuIGE7bGV0IGw9by5wYXJlbnQ7aWYoIWwpe2xldCBjPXNbaTVdO2lmKGMpe2xldCBkPWMuZ2V0KGUsbGMsaSk7aWYoZCE9PWxjKXJldHVybiBkfWw9UDUocykscz1zW0ptXX1vPWx9cmV0dXJuIHJ9KG4sdCxlLGksbGMpO2lmKHMhPT1sYylyZXR1cm4gc31sZXQgbz1SNShuLHQsZSxpLGxjKTtpZihvIT09bGMpcmV0dXJuIG99cmV0dXJuIEk1KHQsZSxpLHIpfWZ1bmN0aW9uIFI1KG4sdCxlLGkscil7bGV0IG89ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuLmNoYXJDb2RlQXQoMCl8fDA7bGV0IHQ9bi5oYXNPd25Qcm9wZXJ0eShGXyk/bltGX106dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgdD90Pj0wP3QmUzU6dW9lOnR9KGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBvKXtpZighXzUodCxuLGkpKXJldHVybiBpJnhpLkhvc3Q/RDUociwwLGkpOkk1KHQsZSxpLHIpO3RyeXtsZXQgcz1vKGkpO2lmKG51bGwhPXN8fGkmeGkuT3B0aW9uYWwpcmV0dXJuIHM7QlAoKX1maW5hbGx5e3g1KCl9fWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKXtsZXQgcz1udWxsLGE9VDUobix0KSxsPWptLGM9aSZ4aS5Ib3N0P3RbYmxdW1NzXTpudWxsO2ZvcigoLTE9PT1hfHxpJnhpLlNraXBTZWxmKSYmKGw9LTE9PT1hP0pQKG4sdCk6dFthKzhdLGwhPT1qbSYmYUgoaSwhMSk/KHM9dFtGbl0sYT1vTShsKSx0PXNNKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCBkPXRbRm5dO2lmKHNIKG8sYSxkLmRhdGEpKXtsZXQgdT1jb2UoYSx0LGUscyxpLGMpO2lmKHUhPT1sYylyZXR1cm4gdX1sPXRbYSs4XSxsIT09am0mJmFIKGksdFtGbl0uZGF0YVthKzhdPT09YykmJnNIKG8sYSx0KT8ocz1kLGE9b00obCksdD1zTShsLHQpKTphPS0xfX1yZXR1cm4gcn1mdW5jdGlvbiBjb2Uobix0LGUsaSxyLG8pe2xldCBzPXRbRm5dLGE9cy5kYXRhW24rOF0sZD1XQyhhLHMsZSxudWxsPT1pP1RNKGEpJiZWUjppIT1zJiYwIT0oMyZhLnR5cGUpLHImeGkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09ZD96cCh0LHMsZCxhKTpsY31mdW5jdGlvbiBXQyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCxkPW8+PjIwLHA9cj9hK2Q6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPWk/YTphK2Q7ZjxwO2YrKyl7bGV0IG09c1tmXTtpZihmPGwmJmU9PT1tfHxmPj1sJiZtLnR5cGU9PT1lKXJldHVybiBmfWlmKHIpe2xldCBmPXNbbF07aWYoZiYmdmwoZikmJmYudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24genAobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEhwfShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgeXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShMUChvW2VdKSk7bGV0IGE9YU0ocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/RWEocy5pbmplY3RJbXBsKTpudWxsO181KG4saSx4aS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1vNSh0KTsoZS5wcmVPcmRlckhvb2tzPz8oZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rcz8/KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3M/PyhlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rcz8/KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3M/PyhlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZFYShsKSxhTShhKSxzLnJlc29sdmluZz0hMSx4NSgpfX1yZXR1cm4gcn1mdW5jdGlvbiBzSChuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj5FNSldJjE8PG4pfWZ1bmN0aW9uIGFIKG4sdCl7cmV0dXJuIShuJnhpLlNlbGZ8fG4meGkuSG9zdCYmdCl9dmFyIExwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdE5vZGU9dCx0aGlzLl9sVmlldz1lfWdldCh0LGUsaSl7cmV0dXJuIEE1KHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LHQsd00oaSksZSl9fTtmdW5jdGlvbiB1b2UoKXtyZXR1cm4gbmV3IExwKFBvKCksWmUoKSl9ZnVuY3Rpb24gWG4obil7cmV0dXJuIG91KCgpPT57bGV0IHQ9bi5wcm90b3R5cGUuY29uc3RydWN0b3IsZT10W2VkXXx8elIodCksaT1PYmplY3QucHJvdG90eXBlLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO3ImJnIhPT1pOyl7bGV0IG89cltlZF18fHpSKHIpO2lmKG8mJm8hPT1lKXJldHVybiBvO3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpfXJldHVybiBvPT5uZXcgb30pfWZ1bmN0aW9uIHpSKG4pe3JldHVybiBZSChuKT8oKT0+e2xldCB0PXpSKFJpKG4pKTtyZXR1cm4gdCYmdCgpfTpCcChuKX1mdW5jdGlvbiBQNShuKXtsZXQgdD1uW0ZuXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bltTc106bnVsbH1mdW5jdGlvbiB5byhuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZigiY2xhc3MiPT09dClyZXR1cm4gbi5jbGFzc2VzO2lmKCJzdHlsZSI9PT10KXJldHVybiBuLnN0eWxlcztsZXQgZT1uLmF0dHJzO2lmKGUpe2xldCBpPWUubGVuZ3RoLHI9MDtmb3IoO3I8aTspe2xldCBvPWVbcl07aWYoTTUobykpYnJlYWs7aWYoMD09PW8pcis9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2Ygbylmb3IocisrO3I8aSYmInN0cmluZyI9PXR5cGVvZiBlW3JdOylyKys7ZWxzZXtpZihvPT09dClyZXR1cm4gZVtyKzFdO3IrPTJ9fX1yZXR1cm4gbnVsbH0oUG8oKSxuKX12YXIgQm09Il9fYW5ub3RhdGlvbnNfXyIsVm09Il9fcGFyYW1ldGVyc19fIixIbT0iX19wcm9wX19tZXRhZGF0YV9fIjtmdW5jdGlvbiBvYihuLHQsZSxpLHIpe3JldHVybiBvdSgoKT0+e2xldCBvPSRQKHQpO2Z1bmN0aW9uIHMoLi4uYSl7aWYodGhpcyBpbnN0YW5jZW9mIHMpcmV0dXJuIG8uY2FsbCh0aGlzLC4uLmEpLHRoaXM7bGV0IGw9bmV3IHMoLi4uYSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiByJiZyKGQsLi4uYSksKGQuaGFzT3duUHJvcGVydHkoQm0pP2RbQm1dOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLEJtLHt2YWx1ZTpbXX0pW0JtXSkucHVzaChsKSxpJiZpKGQpLGR9fXJldHVybiBlJiYocy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLHMucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4scy5hbm5vdGF0aW9uQ2xzPXMsc30pfWZ1bmN0aW9uICRQKG4pe3JldHVybiBmdW5jdGlvbiguLi5lKXtpZihuKXtsZXQgaT1uKC4uLmUpO2ZvcihsZXQgciBpbiBpKXRoaXNbcl09aVtyXX19fWZ1bmN0aW9uIHRoKG4sdCxlKXtyZXR1cm4gb3UoKCk9PntsZXQgaT0kUCh0KTtmdW5jdGlvbiByKC4uLm8pe2lmKHRoaXMgaW5zdGFuY2VvZiByKXJldHVybiBpLmFwcGx5KHRoaXMsbyksdGhpcztsZXQgcz1uZXcgciguLi5vKTtyZXR1cm4gYS5hbm5vdGF0aW9uPXMsYTtmdW5jdGlvbiBhKGwsYyxkKXtsZXQgdT1sLmhhc093blByb3BlcnR5KFZtKT9sW1ZtXTpPYmplY3QuZGVmaW5lUHJvcGVydHkobCxWbSx7dmFsdWU6W119KVtWbV07Zm9yKDt1Lmxlbmd0aDw9ZDspdS5wdXNoKG51bGwpO3JldHVybih1W2RdPXVbZF18fFtdKS5wdXNoKHMpLGx9fXJldHVybiBlJiYoci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLHIucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sci5hbm5vdGF0aW9uQ2xzPXIscn0pfWZ1bmN0aW9uIGF1KG4sdCxlLGkpe3JldHVybiBvdSgoKT0+e2xldCByPSRQKHQpO2Z1bmN0aW9uIG8oLi4ucyl7aWYodGhpcyBpbnN0YW5jZW9mIG8pcmV0dXJuIHIuYXBwbHkodGhpcyxzKSx0aGlzO2xldCBhPW5ldyBvKC4uLnMpO3JldHVybiBmdW5jdGlvbihjLGQpe2xldCB1PWMuY29uc3RydWN0b3IscD11Lmhhc093blByb3BlcnR5KEhtKT91W0htXTpPYmplY3QuZGVmaW5lUHJvcGVydHkodSxIbSx7dmFsdWU6e319KVtIbV07cFtkXT1wLmhhc093blByb3BlcnR5KGQpJiZwW2RdfHxbXSxwW2RdLnVuc2hpZnQoYSksaSYmaShjLGQsLi4ucyl9fXJldHVybiBlJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPW4sby5hbm5vdGF0aW9uQ2xzPW8sb30pfXZhciBmb2U9dGgoIkF0dHJpYnV0ZSIsbj0+KHthdHRyaWJ1dGVOYW1lOm4sX19OR19FTEVNRU5UX0lEX186KCk9PnlvKG4pfSkpLGllPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZGVzYz10LHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWU6dm9pZCAwIT09ZSYmKHRoaXMuXHUwMjc1cHJvdj11ZSh7dG9rZW46dGhpcyxwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX0scW09KG5ldyBpZSgiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpLGNsYXNze30pO2Z1bmN0aW9uIElhKG4pe2xldCB0PVVyLm5nO2lmKHQmJnQuXHUwMjc1Y29tcGlsZXJGYWNhZGUpcmV0dXJuIHQuXHUwMjc1Y29tcGlsZXJGYWNhZGU7dGhyb3cgbmV3IEVycm9yKCJKSVQgY29tcGlsZXIgdW5hdmFpbGFibGUiKX1hdSgiQ29udGVudENoaWxkcmVuIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiExLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiExLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEwLC4uLnR9KSxxbSksYXUoIkNvbnRlbnRDaGlsZCIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMCxpc1ZpZXdRdWVyeTohMSxkZXNjZW5kYW50czohMCwuLi50fSkscW0pLGF1KCJWaWV3Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLHFtKSxhdSgiVmlld0NoaWxkIiwobix0KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiEwLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxxbSk7dmFyIG1vZT1GdW5jdGlvbjtmdW5jdGlvbiBSXyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiAkZChuKXtyZXR1cm4gbi5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9ZnVuY3Rpb24gZU8obix0KXtuLmZvckVhY2goZT0+QXJyYXkuaXNBcnJheShlKT9lTyhlLHQpOnQoZSkpfWZ1bmN0aW9uIGs1KG4sdCxlKXt0Pj1uLmxlbmd0aD9uLnB1c2goZSk6bi5zcGxpY2UodCwwLGUpfWZ1bmN0aW9uIGNNKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoLTE/bi5wb3AoKTpuLnNwbGljZSh0LDEpWzBdfWZ1bmN0aW9uIE5fKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuO2krKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gc2Eobix0LGUpe2xldCBpPXNiKG4sdCk7cmV0dXJuIGk+PTA/blsxfGldPWU6KGk9fmksZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bi5sZW5ndGg7aWYocj09dCluLnB1c2goZSxpKTtlbHNlIGlmKDE9PT1yKW4ucHVzaChpLG5bMF0pLG5bMF09ZTtlbHNle2ZvcihyLS0sbi5wdXNoKG5bci0xXSxuW3JdKTtyPnQ7KW5bcl09bltyLTJdLHItLTtuW3RdPWUsblt0KzFdPWl9fShuLGksdCxlKSksaX1mdW5jdGlvbiBwUihuLHQpe2xldCBlPXNiKG4sdCk7aWYoZT49MClyZXR1cm4gblsxfGVdfWZ1bmN0aW9uIHNiKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0wLHI9bi5sZW5ndGg+PjE7Zm9yKDtyIT09aTspe2xldCBvPWkrKHItaT4+MSkscz1uW288PDFdO2lmKHQ9PT1zKXJldHVybiBvPDwxO3M+dD9yPW86aT1vKzF9cmV0dXJufihyPDwxKX0obix0KX12YXIgYm9lPS9eZnVuY3Rpb25ccytcUytcKFwpXHMqe1tcc1xTXStcLmFwcGx5XCh0aGlzLFxzKihhcmd1bWVudHN8KD86W14oKV0rXChcW1xdLCk/W14oKV0rXChhcmd1bWVudHNcKS4qKVwpLyx2b2U9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7Lyx5b2U9L15jbGFzc1xzK1tBLVphLXpcZCRfXSpccypleHRlbmRzXHMrW157XSt7W1xzXFNdKmNvbnN0cnVjdG9yXHMqXCgvLHhvZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKFwpXHMqe1tefV0qc3VwZXJcKFwuXC5cLmFyZ3VtZW50c1wpLyxVUj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZWZsZWN0PXR8fFVyLlJlZmxlY3R9ZmFjdG9yeSh0KXtyZXR1cm4oLi4uZSk9Pm5ldyB0KC4uLmUpfV96aXBUeXBlc0FuZEFubm90YXRpb25zKHQsZSl7bGV0IGk7aT1OXyh0eXBlb2YgdD4idSI/ZS5sZW5ndGg6dC5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl09dHlwZW9mIHQ+InUiP1tdOnRbcl0mJnRbcl0hPU9iamVjdD9bdFtyXV06W10sZSYmbnVsbCE9ZVtyXSYmKGlbcl09aVtyXS5jb25jYXQoZVtyXSkpO3JldHVybiBpfV9vd25QYXJhbWV0ZXJzKHQsZSl7bGV0IGk9dC50b1N0cmluZygpO2lmKGJvZS50ZXN0KG49aSl8fHhvZS50ZXN0KG4pfHx2b2UudGVzdChuKSYmIXlvZS50ZXN0KG4pKXJldHVybiBudWxsO3ZhciBuO2lmKHQucGFyYW1ldGVycyYmdC5wYXJhbWV0ZXJzIT09ZS5wYXJhbWV0ZXJzKXJldHVybiB0LnBhcmFtZXRlcnM7bGV0IHI9dC5jdG9yUGFyYW1ldGVycztpZihyJiZyIT09ZS5jdG9yUGFyYW1ldGVycyl7bGV0IGE9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cigpOnIsbD1hLm1hcChkPT5kJiZkLnR5cGUpLGM9YS5tYXAoZD0+ZCYmZlIoZC5kZWNvcmF0b3JzKSk7cmV0dXJuIHRoaXMuX3ppcFR5cGVzQW5kQW5ub3RhdGlvbnMobCxjKX1sZXQgbz10Lmhhc093blByb3BlcnR5KFZtKSYmdFtWbV0scz10aGlzLl9yZWZsZWN0JiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhJiZ0aGlzLl9yZWZsZWN0LmdldE93bk1ldGFkYXRhKCJkZXNpZ246cGFyYW10eXBlcyIsdCk7cmV0dXJuIHN8fG8/dGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhzLG8pOk5fKHQubGVuZ3RoKX1wYXJhbWV0ZXJzKHQpe2lmKCFSXyh0KSlyZXR1cm5bXTtsZXQgZT1CQyh0KSxpPXRoaXMuX293blBhcmFtZXRlcnModCxlKTtyZXR1cm4haSYmZSE9PU9iamVjdCYmKGk9dGhpcy5wYXJhbWV0ZXJzKGUpKSxpfHxbXX1fb3duQW5ub3RhdGlvbnModCxlKXtpZih0LmFubm90YXRpb25zJiZ0LmFubm90YXRpb25zIT09ZS5hbm5vdGF0aW9ucyl7bGV0IGk9dC5hbm5vdGF0aW9ucztyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaSYmaS5hbm5vdGF0aW9ucyYmKGk9aS5hbm5vdGF0aW9ucyksaX1yZXR1cm4gdC5kZWNvcmF0b3JzJiZ0LmRlY29yYXRvcnMhPT1lLmRlY29yYXRvcnM/ZlIodC5kZWNvcmF0b3JzKTp0Lmhhc093blByb3BlcnR5KEJtKT90W0JtXTpudWxsfWFubm90YXRpb25zKHQpe2lmKCFSXyh0KSlyZXR1cm5bXTtsZXQgZT1CQyh0KSxpPXRoaXMuX293bkFubm90YXRpb25zKHQsZSl8fFtdO3JldHVybihlIT09T2JqZWN0P3RoaXMuYW5ub3RhdGlvbnMoZSk6W10pLmNvbmNhdChpKX1fb3duUHJvcE1ldGFkYXRhKHQsZSl7aWYodC5wcm9wTWV0YWRhdGEmJnQucHJvcE1ldGFkYXRhIT09ZS5wcm9wTWV0YWRhdGEpe2xldCBpPXQucHJvcE1ldGFkYXRhO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLnByb3BNZXRhZGF0YSYmKGk9aS5wcm9wTWV0YWRhdGEpLGl9aWYodC5wcm9wRGVjb3JhdG9ycyYmdC5wcm9wRGVjb3JhdG9ycyE9PWUucHJvcERlY29yYXRvcnMpe2xldCBpPXQucHJvcERlY29yYXRvcnMscj17fTtyZXR1cm4gT2JqZWN0LmtleXMoaSkuZm9yRWFjaChvPT57cltvXT1mUihpW29dKX0pLHJ9cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoSG0pP3RbSG1dOm51bGx9cHJvcE1ldGFkYXRhKHQpe2lmKCFSXyh0KSlyZXR1cm57fTtsZXQgZT1CQyh0KSxpPXt9O2lmKGUhPT1PYmplY3Qpe2xldCBvPXRoaXMucHJvcE1ldGFkYXRhKGUpO09iamVjdC5rZXlzKG8pLmZvckVhY2gocz0+e2lbc109b1tzXX0pfWxldCByPXRoaXMuX293blByb3BNZXRhZGF0YSh0LGUpO3JldHVybiByJiZPYmplY3Qua2V5cyhyKS5mb3JFYWNoKG89PntsZXQgcz1bXTtpLmhhc093blByb3BlcnR5KG8pJiZzLnB1c2goLi4uaVtvXSkscy5wdXNoKC4uLnJbb10pLGlbb109c30pLGl9b3duUHJvcE1ldGFkYXRhKHQpe3JldHVybiBSXyh0KSYmdGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsQkModCkpfHx7fX1oYXNMaWZlY3ljbGVIb29rKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtb2UmJmUgaW4gdC5wcm90b3R5cGV9fTtmdW5jdGlvbiBmUihuKXtyZXR1cm4gbj9uLm1hcCh0PT5uZXcoMCx0LnR5cGUuYW5ub3RhdGlvbkNscykoLi4udC5hcmdzP3QuYXJnczpbXSkpOltdfWZ1bmN0aW9uIEJDKG4pe2xldCB0PW4ucHJvdG90eXBlP09iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSk6bnVsbDtyZXR1cm4odD90LmNvbnN0cnVjdG9yOm51bGwpfHxPYmplY3R9dmFyIG5oPW5iKHRoKCJJbmplY3QiLG49Pih7dG9rZW46bn0pKSwtMSksVHM9bmIodGgoIk9wdGlvbmFsIiksOCksTW9lPW5iKHRoKCJTZWxmIiksMiksc2Q9bmIodGgoIlNraXBTZWxmIiksNCksd29lPW5iKHRoKCJIb3N0IiksMSksbEg9bnVsbDtmdW5jdGlvbiB0Tygpe3JldHVybiBsSD1sSHx8bmV3IFVSfWZ1bmN0aW9uIFJNKG4pe3JldHVybiBGNSh0TygpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIEY1KG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIFRzfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIHNkfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIE1vZXx8IlNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNlbGY9ITA7ZWxzZSBpZihpIGluc3RhbmNlb2Ygd29lfHwiSG9zdCI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuaG9zdD0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBuaCl0LnRva2VuPWkudG9rZW47ZWxzZSBpZihpIGluc3RhbmNlb2YgZm9lKXtpZih2b2lkIDA9PT1pLmF0dHJpYnV0ZU5hbWUpdGhyb3cgbmV3IHl0KDIwNCwhMSk7dC5hdHRyaWJ1dGU9aS5hdHRyaWJ1dGVOYW1lfWVsc2UgdC50b2tlbj1pfWVsc2UgdC50b2tlbj12b2lkIDA9PT1ufHxBcnJheS5pc0FycmF5KG4pJiYwPT09bi5sZW5ndGg/bnVsbDpuO3JldHVybiB0fSh0KSl9dmFyIFhfPW5ldyBNYXAsTjU9bmV3IFNldDtmdW5jdGlvbiBMNShuKXtyZXR1cm4hIShuLnRlbXBsYXRlVXJsJiYhbi5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKXx8bi5zdHlsZVVybHMmJm4uc3R5bGVVcmxzLmxlbmd0aCl9dmFyIGNIPW5ldyBNYXAsUG9lPSEwO2Z1bmN0aW9uIEI1KG4sdCl7KGZ1bmN0aW9uKG4sdCxlKXtpZih0JiZ0IT09ZSYmUG9lKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1vZHVsZSByZWdpc3RlcmVkIGZvciAke259IC0gJHtwbyh0KX0gdnMgJHtwbyh0Lm5hbWUpfWApfSkodCxjSC5nZXQodCl8fG51bGwsbiksY0guc2V0KHQsbil9dmFyIGpSLEFhPSgoKT0+e3JldHVybihuPUFhfHwoQWE9e30pKVtuLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixuW24uRGFzaENhc2U9Ml09IkRhc2hDYXNlIixBYTt2YXIgbn0pKCksa29lPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csRm9lPS8oPHw+KS8sTm9lPSJcdTIwMGIkMVx1MjAwYiIsVjU9bmV3IE1hcCxCb2U9MCxkSD0iX19uZ0NvbnRleHRfXyI7ZnVuY3Rpb24gdWMobix0KXtOcCh0KT8obltkSF09dFtFTV0sZnVuY3Rpb24obil7VjUuc2V0KG5bRU1dLG4pfSh0KSk6bltkSF09dH1mdW5jdGlvbiBuTyhuLHQpe3JldHVybiBqUihuLHQpfWZ1bmN0aW9uIGlPKG4pe2xldCB0PW5bR3JdO3JldHVybiBuZCh0KT90W0dyXTp0fWZ1bmN0aW9uIHJPKG4pe3JldHVybiBINShuW1dfXSl9ZnVuY3Rpb24gb08obil7cmV0dXJuIEg1KG5bX2xdKX1mdW5jdGlvbiBINShuKXtmb3IoO251bGwhPT1uJiYhbmQobik7KW49bltfbF07cmV0dXJuIG59ZnVuY3Rpb24gem0obix0LGUsaSxyKXtpZihudWxsIT1pKXtsZXQgbyxzPSExO25kKGkpP289aTpOcChpKSYmKHM9ITAsaT1pW3N1XSk7bGV0IGE9UmEoaSk7MD09PW4mJm51bGwhPT1lP251bGw9PXI/cTUodCxlLGEpOlVwKHQsZSxhLHJ8fG51bGwsITApOjE9PT1uJiZudWxsIT09ZT9VcCh0LGUsYSxyfHxudWxsLCEwKToyPT09bj9sTyh0LGEscyk6Mz09PW4mJnQuZGVzdHJveU5vZGUoYSksbnVsbCE9byYmZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lW2pQXTtvIT09UmEoZSkmJnptKHQsbixpLG8scik7Zm9yKGxldCBhPXdzO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbD1lW2FdO2FiKGxbRm5dLGwsbix0LGksbyl9fSh0LG4sbyxlLHIpfX1mdW5jdGlvbiBzTyhuLHQpe3JldHVybiBuLmNyZWF0ZVRleHQodCl9ZnVuY3Rpb24gejUobix0LGUpe24uc2V0VmFsdWUodCxlKX1mdW5jdGlvbiBqb2Uobix0KXtyZXR1cm4gbi5jcmVhdGVDb21tZW50KGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2Uoa29lLHQ9PnQucmVwbGFjZShGb2UsTm9lKSl9KHQpKX1mdW5jdGlvbiBhTyhuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIFU1KG4sdCl7bGV0IGU9bltXbV0saT1lLmluZGV4T2YodCkscj10W0dyXTs1MTImdFtyaV0mJih0W3JpXSY9LTUxMyxXUChyLC0xKSksZS5zcGxpY2UoaSwxKX1mdW5jdGlvbiBHUihuLHQpe2lmKG4ubGVuZ3RoPD13cylyZXR1cm47bGV0IGU9d3MrdCxpPW5bZV07aWYoaSl7bGV0IHI9aVtyYl07bnVsbCE9PXImJnIhPT1uJiZVNShyLGkpLHQ+MCYmKG5bZS0xXVtfbF09aVtfbF0pO2xldCBvPWNNKG4sd3MrdCk7IWZ1bmN0aW9uKG4sdCl7YWIobix0LHRbb2ldLDIsbnVsbCxudWxsKSx0W3N1XT1udWxsLHRbU3NdPW51bGx9KGlbRm5dLGkpO2xldCBzPW9bY2NdO251bGwhPT1zJiZzLmRldGFjaFZpZXcob1tGbl0pLGlbR3JdPW51bGwsaVtfbF09bnVsbCxpW3JpXSY9LTY1fXJldHVybiBpfWZ1bmN0aW9uIGo1KG4sdCl7aWYoISgxMjgmdFtyaV0pKXtsZXQgZT10W29pXTtlLmRlc3Ryb3lOb2RlJiZhYihuLHQsZSwzLG51bGwsbnVsbCksZnVuY3Rpb24obil7bGV0IHQ9bltXX107aWYoIXQpcmV0dXJuIG1SKG5bRm5dLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYoTnAodCkpZT10W1dfXTtlbHNle2xldCBpPXRbd3NdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0W19sXSYmdCE9PW47KU5wKHQpJiZtUih0W0ZuXSx0KSx0PXRbR3JdO251bGw9PT10JiYodD1uKSxOcCh0KSYmbVIodFtGbl0sdCksZT10JiZ0W19sXX10PWV9fSh0KX19ZnVuY3Rpb24gbVIobix0KXtpZighKDEyOCZ0W3JpXSkpe3RbcmldJj0tNjUsdFtyaV18PTEyOCxmdW5jdGlvbihuLHQpe2xldCBlO2lmKG51bGwhPW4mJm51bGwhPShlPW4uZGVzdHJveUhvb2tzKSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPXRbZVtpXV07aWYoIShyIGluc3RhbmNlb2YgSHApKXtsZXQgbz1lW2krMV07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrPTIpe2xldCBhPXJbb1tzXV0sbD1vW3MrMV07VGEoNCxhLGwpO3RyeXtsLmNhbGwoYSl9ZmluYWxseXtUYSg1LGEsbCl9fWVsc2V7VGEoNCxyLG8pO3RyeXtvLmNhbGwocil9ZmluYWxseXtUYSg1LHIsbyl9fX19fShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jbGVhbnVwLGk9dFtHX10scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBzPWVbbyszXTtzPj0wP2lbcj1zXSgpOmlbcj0tc10udW5zdWJzY3JpYmUoKSxvKz0yfWVsc2V7bGV0IHM9aVtyPWVbbysxXV07ZVtvXS5jYWxsKHMpfWlmKG51bGwhPT1pKXtmb3IobGV0IG89cisxO288aS5sZW5ndGg7bysrKSgwLGlbb10pKCk7dFtHX109bnVsbH19KG4sdCksMT09PXRbRm5dLnR5cGUmJnRbb2ldLmRlc3Ryb3koKTtsZXQgZT10W3JiXTtpZihudWxsIT09ZSYmbmQodFtHcl0pKXtlIT09dFtHcl0mJlU1KGUsdCk7bGV0IGk9dFtjY107bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7VjUuZGVsZXRlKG5bRU1dKX0odCl9fWZ1bmN0aW9uIEc1KG4sdCxlKXtyZXR1cm4gVzUobix0LnBhcmVudCxlKX1mdW5jdGlvbiBXNShuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlW3N1XTt7bGV0e2NvbXBvbmVudE9mZnNldDpyfT1pO2lmKHI+LTEpe2xldHtlbmNhcHN1bGF0aW9uOm99PW4uZGF0YVtpLmRpcmVjdGl2ZVN0YXJ0K3JdO2lmKG89PT1yYS5Ob25lfHxvPT09cmEuRW11bGF0ZWQpcmV0dXJuIG51bGx9cmV0dXJuIG9hKGksZSl9fWZ1bmN0aW9uIFVwKG4sdCxlLGkscil7bi5pbnNlcnRCZWZvcmUodCxlLGkscil9ZnVuY3Rpb24gcTUobix0LGUpe24uYXBwZW5kQ2hpbGQodCxlKX1mdW5jdGlvbiB1SChuLHQsZSxpLHIpe251bGwhPT1pP1VwKG4sdCxlLGkscik6cTUobix0LGUpfWZ1bmN0aW9uIFBNKG4sdCl7cmV0dXJuIG4ucGFyZW50Tm9kZSh0KX1mdW5jdGlvbiBZNShuLHQsZSl7cmV0dXJuIFE1KG4sdCxlKX1mdW5jdGlvbiBYNShuLHQsZSl7cmV0dXJuIDQwJm4udHlwZT9vYShuLGUpOm51bGx9dmFyIFdSLFZDLFlSLEhDLFE1PVg1O2Z1bmN0aW9uIFo1KG4sdCl7UTU9bixXUj10fWZ1bmN0aW9uIE9NKG4sdCxlLGkpe2xldCByPUc1KG4saSx0KSxvPXRbb2ldLGE9WTUoaS5wYXJlbnR8fHRbU3NdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKXVIKG8scixlW2xdLGEsITEpO2Vsc2UgdUgobyxyLGUsYSwhMSk7dm9pZCAwIT09V1ImJldSKG8saSx0LGUscil9ZnVuY3Rpb24gcUMobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gb2EodCxuKTtpZig0JmUpcmV0dXJuIHFSKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gcUMobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gbmQocik/cVIoLTEscik6UmEocil9fWlmKDMyJmUpcmV0dXJuIG5PKHQsbikoKXx8UmEoblt0LmluZGV4XSk7e2xldCBpPUs1KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpxQyhpTyhuW2JsXSksaSk6cUMobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBLNShuLHQpe3JldHVybiBudWxsIT09dD9uW2JsXVtTc10ucHJvamVjdGlvblt0LnByb2plY3Rpb25dOm51bGx9ZnVuY3Rpb24gcVIobix0KXtsZXQgZT13cytuKzE7aWYoZTx0Lmxlbmd0aCl7bGV0IGk9dFtlXSxyPWlbRm5dLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PXIpcmV0dXJuIHFDKGkscil9cmV0dXJuIHRbalBdfWZ1bmN0aW9uIGxPKG4sdCxlKXtsZXQgaT1QTShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBjTyhuLHQsZSxpLHIsbyxzKXtmb3IoO251bGwhPWU7KXtsZXQgYT1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKHMmJjA9PT10JiYoYSYmdWMoUmEoYSksaSksZS5mbGFnc3w9MiksMzIhPSgzMiZlLmZsYWdzKSlpZig4JmwpY08obix0LGUuY2hpbGQsaSxyLG8sITEpLHptKHQsbixyLGEsbyk7ZWxzZSBpZigzMiZsKXtsZXQgZCxjPW5PKGUsaSk7Zm9yKDtkPWMoKTspem0odCxuLHIsZCxvKTt6bSh0LG4scixhLG8pfWVsc2UgMTYmbD9KNShuLHQsaSxlLHIsbyk6em0odCxuLHIsYSxvKTtlPXM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIGFiKG4sdCxlLGkscixvKXtjTyhlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBKNShuLHQsZSxpLHIsbyl7bGV0IHM9ZVtibF0sbD1zW1NzXS5wcm9qZWN0aW9uW2kucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl6bSh0LG4scixsW2NdLG8pO2Vsc2UgY08obix0LGwsc1tHcl0scixvLCEwKX1mdW5jdGlvbiAkNShuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIGV6KG4sdCxlKXtsZXR7bWVyZ2VkQXR0cnM6aSxjbGFzc2VzOnIsc3R5bGVzOm99PWU7bnVsbCE9PWkmJkJSKG4sdCxpKSxudWxsIT09ciYmJDUobix0LHIpLG51bGwhPT1vJiZmdW5jdGlvbihuLHQsZSl7bi5zZXRBdHRyaWJ1dGUodCwic3R5bGUiLGUpfShuLHQsbyl9ZnVuY3Rpb24gdHooKXtpZih2b2lkIDA9PT1WQyYmKFZDPW51bGwsVXIudHJ1c3RlZFR5cGVzKSl0cnl7VkM9VXIudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6bj0+bixjcmVhdGVTY3JpcHQ6bj0+bixjcmVhdGVTY3JpcHRVUkw6bj0+bn0pfWNhdGNoe31yZXR1cm4gVkN9ZnVuY3Rpb24gaWgobil7cmV0dXJuIHR6KCk/LmNyZWF0ZUhUTUwobil8fG59ZnVuY3Rpb24gaXooKXtyZXR1cm4gdm9pZCAwIT09WVI/WVI6dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudDp2b2lkIDB9ZnVuY3Rpb24gZE8oKXtpZih2b2lkIDA9PT1IQyYmKEhDPW51bGwsVXIudHJ1c3RlZFR5cGVzKSl0cnl7SEM9VXIudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBIQ31mdW5jdGlvbiBwSChuKXtyZXR1cm4gZE8oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBmSChuKXtyZXR1cm4gZE8oKT8uY3JlYXRlU2NyaXB0KG4pfHxufWZ1bmN0aW9uIG1IKG4pe3JldHVybiBkTygpPy5jcmVhdGVTY3JpcHRVUkwobil8fG59dmFyIHRkPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT10fXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7dGJ9KWB9fSxYUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIkhUTUwifX0sUVI9Y2xhc3MgZXh0ZW5kcyB0ZHtnZXRUeXBlTmFtZSgpe3JldHVybiJTdHlsZSJ9fSxaUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIlNjcmlwdCJ9fSxLUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIlVSTCJ9fSxKUj1jbGFzcyBleHRlbmRzIHRke2dldFR5cGVOYW1lKCl7cmV0dXJuIlJlc291cmNlVVJMIn19O2Z1bmN0aW9uIERzKG4pe3JldHVybiBuIGluc3RhbmNlb2YgdGQ/bi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Om59ZnVuY3Rpb24geGwobix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHRkJiZuLmdldFR5cGVOYW1lKCl8fG51bGx9KG4pO2lmKG51bGwhPWUmJmUhPT10KXtpZigiUmVzb3VyY2VVUkwiPT09ZSYmIlVSTCI9PT10KXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWlyZWQgYSBzYWZlICR7dH0sIGdvdCBhICR7ZX0gKHNlZSAke3RifSlgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gY3oobil7bGV0IHQ9bmV3IGVQKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGloKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyAkUih0KTp0fXZhciAkUj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhpaCh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxlUD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0Iil9Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9aWgodCksZX19LGxzZT0vXig/IWphdmFzY3JpcHQ6KSg/OlthLXowLTkrLi1dKzp8W14mOlwvPyNdKig/OltcLz8jXXwkKSkvaTtmdW5jdGlvbiBsYihuKXtyZXR1cm4obj1TdHJpbmcobikpLm1hdGNoKGxzZSk/bjoidW5zYWZlOiIrbn1mdW5jdGlvbiBhZChuKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbi5zcGxpdCgiLCIpKXRbZV09ITA7cmV0dXJuIHR9ZnVuY3Rpb24gY2IoLi4ubil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09ITApO3JldHVybiB0fXZhciB6Qyxkej1hZCgiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLHV6PWFkKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIikscHo9YWQoInJwLHJ0IiksY3NlPWNiKHB6LHV6KSxkc2U9Y2IodXosYWQoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLHVzZT1jYihweixhZCgiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVyZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLHRQPWNiKGR6LGRzZSx1c2UsY3NlKSx1Tz1hZCgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIikscHNlPWFkKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVmYXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJvbGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxmc2U9YWQoImFyaWEtYWN0aXZlZGVzY2VuZGFudCxhcmlhLWF0b21pYyxhcmlhLWF1dG9jb21wbGV0ZSxhcmlhLWJ1c3ksYXJpYS1jaGVja2VkLGFyaWEtY29sY291bnQsYXJpYS1jb2xpbmRleCxhcmlhLWNvbHNwYW4sYXJpYS1jb250cm9scyxhcmlhLWN1cnJlbnQsYXJpYS1kZXNjcmliZWRieSxhcmlhLWRldGFpbHMsYXJpYS1kaXNhYmxlZCxhcmlhLWRyb3BlZmZlY3QsYXJpYS1lcnJvcm1lc3NhZ2UsYXJpYS1leHBhbmRlZCxhcmlhLWZsb3d0byxhcmlhLWdyYWJiZWQsYXJpYS1oYXNwb3B1cCxhcmlhLWhpZGRlbixhcmlhLWludmFsaWQsYXJpYS1rZXlzaG9ydGN1dHMsYXJpYS1sYWJlbCxhcmlhLWxhYmVsbGVkYnksYXJpYS1sZXZlbCxhcmlhLWxpdmUsYXJpYS1tb2RhbCxhcmlhLW11bHRpbGluZSxhcmlhLW11bHRpc2VsZWN0YWJsZSxhcmlhLW9yaWVudGF0aW9uLGFyaWEtb3ducyxhcmlhLXBsYWNlaG9sZGVyLGFyaWEtcG9zaW5zZXQsYXJpYS1wcmVzc2VkLGFyaWEtcmVhZG9ubHksYXJpYS1yZWxldmFudCxhcmlhLXJlcXVpcmVkLGFyaWEtcm9sZWRlc2NyaXB0aW9uLGFyaWEtcm93Y291bnQsYXJpYS1yb3dpbmRleCxhcmlhLXJvd3NwYW4sYXJpYS1zZWxlY3RlZCxhcmlhLXNldHNpemUsYXJpYS1zb3J0LGFyaWEtdmFsdWVtYXgsYXJpYS12YWx1ZW1pbixhcmlhLXZhbHVlbm93LGFyaWEtdmFsdWV0ZXh0IiksZno9Y2IodU8scHNlLGZzZSksbXNlPWFkKCJzY3JpcHQsc3R5bGUsdGVtcGxhdGUiKSxuUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXNhbml0aXplQ2hpbGRyZW4odCl7bGV0IGU9dC5maXJzdENoaWxkLGk9ITA7Zm9yKDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/aT10aGlzLnN0YXJ0RWxlbWVudChlKTplLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhlLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsaSYmZS5maXJzdENoaWxkKWU9ZS5maXJzdENoaWxkO2Vsc2UgZm9yKDtlOyl7ZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoZSk7bGV0IHI9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLm5leHRTaWJsaW5nKTtpZihyKXtlPXI7YnJlYWt9ZT10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUucGFyZW50Tm9kZSl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoIXRQLmhhc093blByb3BlcnR5KGUpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhbXNlLmhhc093blByb3BlcnR5KGUpO3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aS5pdGVtKHIpLHM9by5uYW1lLGE9cy50b0xvd2VyQ2FzZSgpO2lmKCFmei5oYXNPd25Qcm9wZXJ0eShhKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IGw9by52YWx1ZTt1T1thXSYmKGw9bGIobCkpLHRoaXMuYnVmLnB1c2goIiAiLHMsJz0iJyxoSChsKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dFAuaGFzT3duUHJvcGVydHkoZSkmJiFkei5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKHQpe3RoaXMuYnVmLnB1c2goaEgodCkpfWNoZWNrQ2xvYmJlcmVkRWxlbWVudCh0LGUpe2lmKGUmJih0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKT09PU5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgZWxlbWVudCBpcyBjbG9iYmVyZWQ6ICR7dC5vdXRlckhUTUx9YCk7cmV0dXJuIGV9fSxoc2U9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLGdzZT0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gaEgobil7cmV0dXJuIG4ucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoaHNlLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoZ3NlLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIHBPKG4sdCl7bGV0IGU9bnVsbDt0cnl7ekM9ekN8fGN6KG4pO2xldCBpPXQ/U3RyaW5nKHQpOiIiO2U9ekMuZ2V0SW5lcnRCb2R5RWxlbWVudChpKTtsZXQgcj01LG89aTtkb3tpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7ci0tLGk9byxvPWUuaW5uZXJIVE1MLGU9ekMuZ2V0SW5lcnRCb2R5RWxlbWVudChpKX13aGlsZShpIT09byk7cmV0dXJuIGloKChuZXcgblApLnNhbml0aXplQ2hpbGRyZW4oaVAoZSl8fGUpKX1maW5hbGx5e2lmKGUpe2xldCBpPWlQKGUpfHxlO2Zvcig7aS5maXJzdENoaWxkOylpLnJlbW92ZUNoaWxkKGkuZmlyc3RDaGlsZCl9fX1mdW5jdGlvbiBpUChuKXtyZXR1cm4iY29udGVudCJpbiBuJiZmdW5jdGlvbihuKXtyZXR1cm4gbi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09bi5ub2RlTmFtZX0obik/bi5jb250ZW50Om51bGx9dmFyIGpyPSgoKT0+e3JldHVybihuPWpyfHwoanI9e30pKVtuLk5PTkU9MF09Ik5PTkUiLG5bbi5IVE1MPTFdPSJIVE1MIixuW24uU1RZTEU9Ml09IlNUWUxFIixuW24uU0NSSVBUPTNdPSJTQ1JJUFQiLG5bbi5VUkw9NF09IlVSTCIsbltuLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixqcjt2YXIgbn0pKCk7ZnVuY3Rpb24gZk8obil7bGV0IHQ9ZGIoKTtyZXR1cm4gdD9wSCh0LnNhbml0aXplKGpyLkhUTUwsbil8fCIiKTp4bChuLCJIVE1MIik/cEgoRHMobikpOnBPKGl6KCksVW4obikpfWZ1bmN0aW9uIGthKG4pe2xldCB0PWRiKCk7cmV0dXJuIHQ/dC5zYW5pdGl6ZShqci5VUkwsbil8fCIiOnhsKG4sIlVSTCIpP0RzKG4pOmxiKFVuKG4pKX1mdW5jdGlvbiBteihuKXtsZXQgdD1kYigpO2lmKHQpcmV0dXJuIG1IKHQuc2FuaXRpemUoanIuUkVTT1VSQ0VfVVJMLG4pfHwiIik7aWYoeGwobiwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gbUgoRHMobikpO3Rocm93IG5ldyB5dCg5MDQsITEpfWZ1bmN0aW9uIGRiKCl7bGV0IG49WmUoKTtyZXR1cm4gbiYmbltGUl19dmFyIGtNPW5ldyBpZSgiRU5WSVJPTk1FTlRfSU5JVElBTElaRVIiKSxoej1uZXcgaWUoIklOSkVDVE9SIiwtMSksZ3o9bmV3IGllKCJJTkpFQ1RPUl9ERUZfVFlQRVMiKSxkTT1jbGFzc3tnZXQodCxlPWpfKXtpZihlPT09al8pe2xldCBpPW5ldyBFcnJvcihgTnVsbEluamVjdG9yRXJyb3I6IE5vIHByb3ZpZGVyIGZvciAke3BvKHQpfSFgKTt0aHJvdyBpLm5hbWU9Ik51bGxJbmplY3RvckVycm9yIixpfXJldHVybiBlfX07ZnVuY3Rpb24gd3NlKC4uLm4pe3JldHVybnsiXHUwMjc1cHJvdmlkZXJzIjpfeigwLG4pLCJcdTAyNzVmcm9tTmdNb2R1bGUiOiEwfX1mdW5jdGlvbiBfeihuLC4uLnQpe2xldCByLGU9W10saT1uZXcgU2V0O3JldHVybiBlTyh0LG89PntsZXQgcz1vO3JQKHMsZSxbXSxpKSYmKHJ8fChyPVtdKSxyLnB1c2gocykpfSksdm9pZCAwIT09ciYmYnoocixlKSxlfWZ1bmN0aW9uIGJ6KG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldHtwcm92aWRlcnM6cn09bltlXTttTyhyLG89Pnt0LnB1c2gobyl9KX19ZnVuY3Rpb24gclAobix0LGUsaSl7aWYoIShuPVJpKG4pKSlyZXR1cm4hMTtsZXQgcj1udWxsLG89ZUgobikscz0hbyYmRGEobik7aWYob3x8cyl7aWYocyYmIXMuc3RhbmRhbG9uZSlyZXR1cm4hMTtyPW59ZWxzZXtsZXQgbD1uLm5nTW9kdWxlO2lmKG89ZUgobCksIW8pcmV0dXJuITE7cj1sfWxldCBhPWkuaGFzKHIpO2lmKHMpe2lmKGEpcmV0dXJuITE7aWYoaS5hZGQocikscy5kZXBlbmRlbmNpZXMpe2xldCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBzLmRlcGVuZGVuY2llcz9zLmRlcGVuZGVuY2llcygpOnMuZGVwZW5kZW5jaWVzO2ZvcihsZXQgYyBvZiBsKXJQKGMsdCxlLGkpfX1lbHNle2lmKCFvKXJldHVybiExO3tpZihudWxsIT1vLmltcG9ydHMmJiFhKXtsZXQgYztpLmFkZChyKTt0cnl7ZU8oby5pbXBvcnRzLGQ9PntyUChkLHQsZSxpKSYmKGN8fChjPVtdKSxjLnB1c2goZCkpfSl9ZmluYWxseXt9dm9pZCAwIT09YyYmYnooYyx0KX1pZighYSl7bGV0IGM9QnAocil8fCgoKT0+bmV3IHIpO3QucHVzaCh7cHJvdmlkZTpyLHVzZUZhY3Rvcnk6YyxkZXBzOlZpfSx7cHJvdmlkZTpneix1c2VWYWx1ZTpyLG11bHRpOiEwfSx7cHJvdmlkZTprTSx1c2VWYWx1ZTooKT0+ayhyKSxtdWx0aTohMH0pfWxldCBsPW8ucHJvdmlkZXJzO251bGw9PWx8fGF8fG1PKGwsZD0+e3QucHVzaChkKX0pfX1yZXR1cm4gciE9PW4mJnZvaWQgMCE9PW4ucHJvdmlkZXJzfWZ1bmN0aW9uIG1PKG4sdCl7Zm9yKGxldCBlIG9mIG4pWEgoZSkmJihlPWUuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5pc0FycmF5KGUpP21PKGUsdCk6dChlKX12YXIgU3NlPXRyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTp0cn0pO2Z1bmN0aW9uIHZ6KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZTc2UgaW4gbn1mdW5jdGlvbiBZbShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgaFIsTk09bmV3IGllKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksWUM9e30sSXNlPXt9O2Z1bmN0aW9uIGhPKCl7cmV0dXJuIHZvaWQgMD09PWhSJiYoaFI9bmV3IGRNKSxoUn12YXIgcGM9Y2xhc3N7fSx1TT1jbGFzcyBleHRlbmRzIHBje2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxzUCh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KGh6LFVtKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQocGMsVW0odm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KE5NKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChnei5tdWx0aSxWaSx4aS5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9Tm0odGhpcyksaT1FYSh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7Tm0oZSksRWEoaSl9fWdldCh0LGU9al8saT14aS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGk9d00oaSk7bGV0IHI9Tm0odGhpcyksbz1FYSh2b2lkIDApO3RyeXtpZighKGkmeGkuU2tpcFNlbGYpKXtsZXQgYT10aGlzLnJlY29yZHMuZ2V0KHQpO2lmKHZvaWQgMD09PWEpe2xldCBsPSgiZnVuY3Rpb24iPT10eXBlb2Yobj10KXx8Im9iamVjdCI9PXR5cGVvZiBuJiZuIGluc3RhbmNlb2YgaWUpJiZWUCh0KTthPWwmJnRoaXMuaW5qZWN0YWJsZURlZkluU2NvcGUobCk/VW0ob1AodCksWUMpOm51bGwsdGhpcy5yZWNvcmRzLnNldCh0LGEpfWlmKG51bGwhPWEpcmV0dXJuIHRoaXMuaHlkcmF0ZSh0LGEpfXJldHVybihpJnhpLlNlbGY/aE8oKTp0aGlzLnBhcmVudCkuZ2V0KHQsZT1pJnhpLk9wdGlvbmFsJiZlPT09al8/bnVsbDplKX1jYXRjaChzKXtpZigiTnVsbEluamVjdG9yRXJyb3IiPT09cy5uYW1lKXtpZigoc1skQ109c1skQ118fFtdKS51bnNoaWZ0KHBvKHQpKSxyKXRocm93IHM7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bJENdO3Rocm93IHRbdEhdJiZyLnVuc2hpZnQodFt0SF0pLG4ubWVzc2FnZT1mdW5jdGlvbihuLHQsZSxpPW51bGwpe249biYmIlxuIj09PW4uY2hhckF0KDApJiZuLmNoYXJBdCgxKT09Q3JlP24uc2xpY2UoMik6bjtsZXQgcj1wbyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAocG8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpwbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZSh4cmUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksblt5cmVdPXIsblskQ109bnVsbCxufShzLHQsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IHN9ZmluYWxseXtFYShvKSxObShyKX12YXIgbn1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtsZXQgdD1ObSh0aGlzKSxlPUVhKHZvaWQgMCk7dHJ5e2xldCBpPXRoaXMuZ2V0KGtNLm11bHRpLFZpLHhpLlNlbGYpO2ZvcihsZXQgciBvZiBpKXIoKX1maW5hbGx5e05tKHQpLEVhKGUpfX10b1N0cmluZygpe2xldCB0PVtdLGU9dGhpcy5yZWNvcmRzO2ZvcihsZXQgaSBvZiBlLmtleXMoKSl0LnB1c2gocG8oaSkpO3JldHVybmBSM0luamVjdG9yWyR7dC5qb2luKCIsICIpfV1gfWFzc2VydE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgeXQoMjA1LCExKX1wcm9jZXNzUHJvdmlkZXIodCl7bGV0IGU9WW0odD1SaSh0KSk/dDpSaSh0JiZ0LnByb3ZpZGUpLGk9ZnVuY3Rpb24obil7cmV0dXJuIHZ6KG4pP1VtKHZvaWQgMCxuLnVzZVZhbHVlKTpVbSh5eihuKSxZQyl9KHQpO2lmKFltKHQpfHwhMCE9PXQubXVsdGkpdGhpcy5yZWNvcmRzLmdldChlKTtlbHNle2xldCByPXRoaXMucmVjb3Jkcy5nZXQoZSk7cnx8KHI9VW0odm9pZCAwLFlDLCEwKSxyLmZhY3Rvcnk9KCk9PmtSKHIubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoZSxyKSksZT10LHIubXVsdGkucHVzaCh0KX10aGlzLnJlY29yZHMuc2V0KGUsaSl9aHlkcmF0ZSh0LGUpe3JldHVybiBlLnZhbHVlPT09WUMmJihlLnZhbHVlPUlzZSxlLnZhbHVlPWUuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGUudmFsdWUmJmUudmFsdWUmJm51bGwhPT0obj1lLnZhbHVlKSYmIm9iamVjdCI9PXR5cGVvZiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5uZ09uRGVzdHJveSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoZS52YWx1ZSksZS52YWx1ZTt2YXIgbn1pbmplY3RhYmxlRGVmSW5TY29wZSh0KXtpZighdC5wcm92aWRlZEluKXJldHVybiExO2xldCBlPVJpKHQucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyJhbnkiPT09ZXx8dGhpcy5zY29wZXMuaGFzKGUpOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXMoZSl9fTtmdW5jdGlvbiBvUChuKXtsZXQgdD1WUChuKSxlPW51bGwhPT10P3QuZmFjdG9yeTpCcChuKTtpZihudWxsIT09ZSlyZXR1cm4gZTtpZihuIGluc3RhbmNlb2YgaWUpdGhyb3cgbmV3IHl0KDIwNCwhMSk7aWYobiBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uLmxlbmd0aDtpZih0PjApdGhyb3cgTl8odCwiPyIpLG5ldyB5dCgyMDQsITEpO2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBuJiYobltKQ118fG5bWkhdKXx8bnVsbH0obik7cmV0dXJuIG51bGwhPT1lPygpPT5lLmZhY3Rvcnkobik6KCk9Pm5ldyBufShuKTt0aHJvdyBuZXcgeXQoMjA0LCExKX1mdW5jdGlvbiB5eihuLHQsZSl7bGV0IGk7aWYoWW0obikpe2xldCByPVJpKG4pO3JldHVybiBCcChyKXx8b1Aocil9aWYodnoobikpaT0oKT0+Umkobi51c2VWYWx1ZSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VGYWN0b3J5KX0obikpaT0oKT0+bi51c2VGYWN0b3J5KC4uLmtSKG4uZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uKG4pe3JldHVybiEoIW58fCFuLnVzZUV4aXN0aW5nKX0obikpaT0oKT0+ayhSaShuLnVzZUV4aXN0aW5nKSk7ZWxzZXtsZXQgcj1SaShuJiYobi51c2VDbGFzc3x8bi5wcm92aWRlKSk7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEhbi5kZXBzfShuKSlyZXR1cm4gQnAocil8fG9QKHIpO2k9KCk9Pm5ldyByKC4uLmtSKG4uZGVwcykpfXJldHVybiBpfWZ1bmN0aW9uIFVtKG4sdCxlPSExKXtyZXR1cm57ZmFjdG9yeTpuLHZhbHVlOnQsbXVsdGk6ZT9bXTp2b2lkIDB9fWZ1bmN0aW9uIHNQKG4sdCl7Zm9yKGxldCBlIG9mIG4pQXJyYXkuaXNBcnJheShlKT9zUChlLHQpOmUmJlhIKGUpP3NQKGUuXHUwMjc1cHJvdmlkZXJzLHQpOnQoZSl9dmFyIGFQPWNsYXNze30scE09Y2xhc3N7fSxsUD1jbGFzc3tyZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXt0aHJvdyBmdW5jdGlvbihuKXtsZXQgdD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cG8obil9LiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzP2ApO3JldHVybiB0Lm5nQ29tcG9uZW50PW4sdH0odCl9fSxmbz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5OVUxMPW5ldyBsUCxufSkoKTtmdW5jdGlvbiBMc2UoKXtyZXR1cm4gcmgoUG8oKSxaZSgpKX1mdW5jdGlvbiByaChuLHQpe3JldHVybiBuZXcgTWUob2Eobix0KSl9dmFyIE1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5uYXRpdmVFbGVtZW50PWV9fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPUxzZSxufSkoKTtmdW5jdGlvbiBCc2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNZT9uLm5hdGl2ZUVsZW1lbnQ6bn12YXIgZmM9Y2xhc3N7fSxtYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1aZSgpLGU9aWQoUG8oKS5pbmRleCxuKTtyZXR1cm4oTnAoZSk/ZTpuKVtvaV19KCksbn0pKCksSHNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLHlsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LHpzZT1uZXcgeWwoIjE1LjIuOSIpLGdSPXt9LFVzZT0ibmdPcmlnaW5hbEVycm9yIjtmdW5jdGlvbiBfUihuKXtyZXR1cm4gbltVc2VdfXZhciBycz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJvcih0KXtsZXQgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KTt0aGlzLl9jb25zb2xlLmVycm9yKCJFUlJPUiIsdCksZSYmdGhpcy5fY29uc29sZS5lcnJvcigiT1JJR0lOQUwgRVJST1IiLGUpfV9maW5kT3JpZ2luYWxFcnJvcih0KXtsZXQgZT10JiZfUih0KTtmb3IoO2UmJl9SKGUpOyllPV9SKGUpO3JldHVybiBlfHxudWxsfX07ZnVuY3Rpb24gaGMobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudH1mdW5jdGlvbiBYQyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uP24oKTpufWZ1bmN0aW9uIHh6KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBDej0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIFdzZShuLHQsZSl7bGV0IGk9MCxyPSEwO2Zvcig7aTxuLmxlbmd0aDspe2xldCBvPW5baSsrXTtpZigic3RyaW5nIj09dHlwZW9mIG8mJnIpe2xldCBzPW5baSsrXTtpZihlJiYiY2xhc3MiPT09byYmLTEhPT14eihzLnRvTG93ZXJDYXNlKCksdCwwKSlyZXR1cm4hMH1lbHNle2lmKDE9PT1vKXtmb3IoO2k8bi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Yobz1uW2krK10pOylpZihvLnRvTG93ZXJDYXNlKCk9PT10KXJldHVybiEwO3JldHVybiExfSJudW1iZXIiPT10eXBlb2YgbyYmKHI9ITEpfX1yZXR1cm4hMX1mdW5jdGlvbiBNeihuKXtyZXR1cm4gND09PW4udHlwZSYmbi52YWx1ZSE9PUN6fWZ1bmN0aW9uIHFzZShuLHQsZSl7cmV0dXJuIHQ9PT0oNCE9PW4udHlwZXx8ZT9uLnZhbHVlOkN6KX1mdW5jdGlvbiBZc2Uobix0LGUpe2xldCBpPTQscj1uLmF0dHJzfHxbXSxvPWZ1bmN0aW9uKG4pe2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCsrKWlmKE01KG5bdF0pKXJldHVybiB0O3JldHVybiBuLmxlbmd0aH0ocikscz0hMTtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigibnVtYmVyIiE9dHlwZW9mIGwpe2lmKCFzKWlmKDQmaSl7aWYoaT0yfDEmaSwiIiE9PWwmJiFxc2UobixsLGUpfHwiIj09PWwmJjE9PT10Lmxlbmd0aCl7aWYoaGwoaSkpcmV0dXJuITE7cz0hMH19ZWxzZXtsZXQgYz04Jmk/bDp0WysrYV07aWYoOCZpJiZudWxsIT09bi5hdHRycyl7aWYoIVdzZShuLmF0dHJzLGMsZSkpe2lmKGhsKGkpKXJldHVybiExO3M9ITB9Y29udGludWV9bGV0IHU9WHNlKDgmaT8iY2xhc3MiOmwscixNeihuKSxlKTtpZigtMT09PXUpe2lmKGhsKGkpKXJldHVybiExO3M9ITA7Y29udGludWV9aWYoIiIhPT1jKXtsZXQgcDtwPXU+bz8iIjpyW3UrMV0udG9Mb3dlckNhc2UoKTtsZXQgZj04Jmk/cDpudWxsO2lmKGYmJi0xIT09eHooZixjLDApfHwyJmkmJmMhPT1wKXtpZihobChpKSlyZXR1cm4hMTtzPSEwfX19fWVsc2V7aWYoIXMmJiFobChpKSYmIWhsKGwpKXJldHVybiExO2lmKHMmJmhsKGwpKWNvbnRpbnVlO3M9ITEsaT1sfDEmaX19cmV0dXJuIGhsKGkpfHxzfWZ1bmN0aW9uIGhsKG4pe3JldHVybiAwPT0oMSZuKX1mdW5jdGlvbiBYc2Uobix0LGUsaSl7aWYobnVsbD09PXQpcmV0dXJuLTE7bGV0IHI9MDtpZihpfHwhZSl7bGV0IG89ITE7Zm9yKDtyPHQubGVuZ3RoOyl7bGV0IHM9dFtyXTtpZihzPT09bilyZXR1cm4gcjtpZigzPT09c3x8Nj09PXMpbz0hMDtlbHNle2lmKDE9PT1zfHwyPT09cyl7bGV0IGE9dFsrK3JdO2Zvcig7InN0cmluZyI9PXR5cGVvZiBhOylhPXRbKytyXTtjb250aW51ZX1pZig0PT09cylicmVhaztpZigwPT09cyl7cis9NDtjb250aW51ZX19cis9bz8xOjJ9cmV0dXJuLTF9cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5pbmRleE9mKDQpO2lmKGU+LTEpZm9yKGUrKztlPG4ubGVuZ3RoOyl7bGV0IGk9bltlXTtpZigibnVtYmVyIj09dHlwZW9mIGkpcmV0dXJuLTE7aWYoaT09PXQpcmV0dXJuIGU7ZSsrfXJldHVybi0xfSh0LG4pfWZ1bmN0aW9uIHd6KG4sdCxlPSExKXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKylpZihZc2Uobix0W2ldLGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEpzZShuLHQpe2U6Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV07aWYobi5sZW5ndGg9PT1pLmxlbmd0aCl7Zm9yKGxldCByPTA7cjxuLmxlbmd0aDtyKyspaWYobltyXSE9PWlbcl0pY29udGludWUgZTtyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gZ0gobix0KXtyZXR1cm4gbj8iOm5vdCgiK3QudHJpbSgpKyIpIjp0fWZ1bmN0aW9uICRzZShuKXtsZXQgdD1uWzBdLGU9MSxpPTIscj0iIixvPSExO2Zvcig7ZTxuLmxlbmd0aDspe2xldCBzPW5bZV07aWYoInN0cmluZyI9PXR5cGVvZiBzKWlmKDImaSl7bGV0IGE9blsrK2VdO3IrPSJbIitzKyhhLmxlbmd0aD4wPyc9IicrYSsnIic6IiIpKyJdIn1lbHNlIDgmaT9yKz0iLiIrczo0JmkmJihyKz0iICIrcyk7ZWxzZSIiIT09ciYmIWhsKHMpJiYodCs9Z0gobyxyKSxyPSIiKSxpPXMsbz1vfHwhaGwoaSk7ZSsrfXJldHVybiIiIT09ciYmKHQrPWdIKG8scikpLHR9dmFyIEhuPXt9O2Z1bmN0aW9uIHYobil7U3ooRWkoKSxaZSgpLHNzKCkrbiwhMSl9ZnVuY3Rpb24gU3oobix0LGUsaSl7aWYoIWkpaWYoMz09KDMmdFtyaV0pKXtsZXQgbz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmakModCxvLGUpfWVsc2V7bGV0IG89bi5wcmVPcmRlckhvb2tzO251bGwhPT1vJiZHQyh0LG8sMCxlKX1WcChlKX12YXIgX0g9eyJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp1ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWluamVjdCI6aywiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiOkpILHJlc29sdmVGb3J3YXJkUmVmOlJpfTt2YXIgaWFlPXRyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTp0cn0pO2Z1bmN0aW9uIGJIKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUNsYXNzfWZ1bmN0aW9uIHZIKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUZhY3Rvcnl9dmFyIEV6PW9iKCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwobix0KT0+ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtuLmhhc093blByb3BlcnR5KEpDKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sSkMse2dldDooKT0+KG51bGw9PT1lJiYoZT1JYSgpLmNvbXBpbGVJbmplY3RhYmxlKF9ILGBuZzovLy8ke24ubmFtZX0vXHUwMjc1cHJvdi5qc2AsZnVuY3Rpb24obix0KXtsZXQgZT10fHx7cHJvdmlkZWRJbjpudWxsfSxpPXtuYW1lOm4ubmFtZSx0eXBlOm4sdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOmUucHJvdmlkZWRJbn07cmV0dXJuKGJIKGUpfHx2SChlKSkmJnZvaWQgMCE9PWUuZGVwcyYmKGkuZGVwcz1GNShlLmRlcHMpKSxiSChlKT9pLnVzZUNsYXNzPWUudXNlQ2xhc3M6ZnVuY3Rpb24obil7cmV0dXJuIGlhZSBpbiBufShlKT9pLnVzZVZhbHVlPWUudXNlVmFsdWU6dkgoZSk/aS51c2VGYWN0b3J5PWUudXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VFeGlzdGluZ30oZSkmJihpLnVzZUV4aXN0aW5nPWUudXNlRXhpc3RpbmcpLGl9KG4sdCkpKSxlKX0pLG4uaGFzT3duUHJvcGVydHkoZWQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixlZCx7Z2V0OigpPT57aWYobnVsbD09PWkpe2xldCByPUlhKCk7aT1yLmNvbXBpbGVGYWN0b3J5KF9ILGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpSTShuKSx0YXJnZXQ6ci5GYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gaX0sY29uZmlndXJhYmxlOiEwfSl9KG4sdCkpO2Z1bmN0aW9uIHlIKG4sdD1udWxsLGU9bnVsbCxpKXtsZXQgcj1UeihuLHQsZSxpKTtyZXR1cm4gci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxyfWZ1bmN0aW9uIFR6KG4sdD1udWxsLGU9bnVsbCxpLHI9bmV3IFNldCl7bGV0IG89W2V8fFZpLHdzZShuKV07cmV0dXJuIGk9aXx8KCJvYmplY3QiPT10eXBlb2Ygbj92b2lkIDA6cG8obikpLG5ldyB1TShvLHR8fGhPKCksaXx8bnVsbCxyKX12YXIgTWk9KCgpPT57Y2xhc3MgbntzdGF0aWMgY3JlYXRlKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4geUgoe25hbWU6IiJ9LGksZSwiIik7e2xldCByPWUubmFtZT8/IiI7cmV0dXJuIHlIKHtuYW1lOnJ9LGUucGFyZW50LGUucHJvdmlkZXJzLHIpfX19cmV0dXJuIG4uVEhST1dfSUZfTk9UX0ZPVU5EPWpfLG4uTlVMTD1uZXcgZE0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+ayhoeil9KSxuLl9fTkdfRUxFTUVOVF9JRF9fPS0xLG59KSgpLExfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7aWYodGhpcy50b2tlbj10LHRoaXMuaWQ9ZSwhdCl0aHJvdyBuZXcgeXQoMjA4LCExKTt0aGlzLmRpc3BsYXlOYW1lPXBvKHRoaXMudG9rZW4pfXN0YXRpYyBnZXQodCl7cmV0dXJuIHhILmdldChSaSh0KSl9c3RhdGljIGdldCBudW1iZXJPZktleXMoKXtyZXR1cm4geEgubnVtYmVyT2ZLZXlzfX0seEg9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fYWxsS2V5cz1uZXcgTWFwfWdldCh0KXtpZih0IGluc3RhbmNlb2YgTF8pcmV0dXJuIHQ7aWYodGhpcy5fYWxsS2V5cy5oYXModCkpcmV0dXJuIHRoaXMuX2FsbEtleXMuZ2V0KHQpO2xldCBlPW5ldyBMXyh0LExfLm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19O2Z1bmN0aW9uIEMobix0PXhpLkRlZmF1bHQpe2xldCBlPVplKCk7cmV0dXJuIG51bGw9PT1lP2sobix0KTpBNShQbygpLGUsUmkobiksdCl9ZnVuY3Rpb24gSXMoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX1mdW5jdGlvbiBEeihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgbz1lW2krMV07aWYoLTEhPT1vKXtsZXQgcz1uLmRhdGFbb107UVAoZVtpXSkscy5jb250ZW50UXVlcmllcygyLHRbb10sbyl9fX1mdW5jdGlvbiBMTShuLHQsZSxpLHIsbyxzLGEsbCxjLGQpe2xldCB1PXQuYmx1ZXByaW50LnNsaWNlKCk7cmV0dXJuIHVbc3VdPXIsdVtyaV09NzZ8aSwobnVsbCE9PWR8fG4mJjEwMjQmbltyaV0pJiYodVtyaV18PTEwMjQpLHU1KHUpLHVbR3JdPXVbSm1dPW4sdVtFc109ZSx1W25NXT1zfHxuJiZuW25NXSx1W29pXT1hfHxuJiZuW29pXSx1W0ZSXT1sfHxuJiZuW0ZSXXx8bnVsbCx1W3RNXT1jfHxuJiZuW3RNXXx8bnVsbCx1W1NzXT1vLHVbRU1dPUJvZSsrLHVbaTVdPWQsdVtibF09Mj09dC50eXBlP25bYmxdOnUsdX1mdW5jdGlvbiBvaChuLHQsZSxpLHIpe2xldCBvPW4uZGF0YVt0XTtpZihudWxsPT09bylvPWdPKG4sdCxlLGksciksam4ubEZyYW1lLmluSTE4biYmKG8uZmxhZ3N8PTMyKTtlbHNlIGlmKDY0Jm8udHlwZSl7by50eXBlPWUsby52YWx1ZT1pLG8uYXR0cnM9cjtsZXQgcz1xXygpO28uaW5qZWN0b3JJbmRleD1udWxsPT09cz8tMTpzLmluamVjdG9ySW5kZXh9cmV0dXJuIGRjKG8sITApLG99ZnVuY3Rpb24gZ08obix0LGUsaSxyKXtsZXQgbz1mNSgpLHM9cVAoKSxsPW4uZGF0YVt0XT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJue3R5cGU6ZSxpbmRleDppLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp0P3QuaW5qZWN0b3JJbmRleDotMSxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAscz9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYocz9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCxsLnByZXY9bykpLGx9ZnVuY3Rpb24gdWIobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBfTyhuLHQsZSl7WlAodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZwUCgxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmSXoobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZEeihuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnBQKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKVJhZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFtyaV0mPS01LEtQKCl9fWZ1bmN0aW9uIEJNKG4sdCxlLGkpe2xldCByPXRbcmldO2lmKDEyOCE9KDEyOCZyKSl7WlAodCk7dHJ5e3U1KHQpLG01KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1lJiZJeihuLHQsZSwyLGkpO2xldCBzPTM9PSgzJnIpO2lmKHMpe2xldCBjPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1jJiZqQyh0LGMsbnVsbCl9ZWxzZXtsZXQgYz1uLnByZU9yZGVySG9va3M7bnVsbCE9PWMmJkdDKHQsYywwLG51bGwpLGRSKHQsMCl9aWYoZnVuY3Rpb24obil7Zm9yKGxldCB0PXJPKG4pO251bGwhPT10O3Q9b08odCkpe2lmKCF0W3I1XSljb250aW51ZTtsZXQgZT10W1dtXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXTswPT0oNTEyJnJbcmldKSYmV1AocltHcl0sMSkscltyaV18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9ck8obik7bnVsbCE9PXQ7dD1vTyh0KSlmb3IobGV0IGU9d3M7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pW0ZuXTtyTShpKSYmQk0ocixpLHIudGVtcGxhdGUsaVtFc10pfX0odCksbnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJkR6KG4sdCkscyl7bGV0IGM9bi5jb250ZW50Q2hlY2tIb29rcztudWxsIT09YyYmakModCxjKX1lbHNle2xldCBjPW4uY29udGVudEhvb2tzO251bGwhPT1jJiZHQyh0LGMsMSksZFIodCwxKX0hZnVuY3Rpb24obix0KXtsZXQgZT1uLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09ZSl0cnl7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV07aWYocjwwKVZwKH5yKTtlbHNle2xldCBvPXIscz1lWysraV0sYT1lWysraV07R3JlKHMsbyksYSgyLHRbb10pfX19ZmluYWxseXtWcCgtMSl9fShuLHQpO2xldCBhPW4uY29tcG9uZW50cztudWxsIT09YSYmZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylBYWUobix0W2VdKX0odCxhKTtsZXQgbD1uLnZpZXdRdWVyeTtpZihudWxsIT09bCYmcFAoMixsLGkpLHMpe2xldCBjPW4udmlld0NoZWNrSG9va3M7bnVsbCE9PWMmJmpDKHQsYyl9ZWxzZXtsZXQgYz1uLnZpZXdIb29rcztudWxsIT09YyYmR0ModCxjLDIpLGRSKHQsMil9ITA9PT1uLmZpcnN0VXBkYXRlUGFzcyYmKG4uZmlyc3RVcGRhdGVQYXNzPSExKSx0W3JpXSY9LTQxLDUxMiZ0W3JpXSYmKHRbcmldJj0tNTEzLFdQKHRbR3JdLC0xKSl9ZmluYWxseXtLUCgpfX19ZnVuY3Rpb24gSXoobix0LGUsaSxyKXtsZXQgbz1zcygpLHM9MiZpO3RyeXtWcCgtMSkscyYmdC5sZW5ndGg+V3ImJlN6KG4sdCxXciwhMSksVGEocz8yOjAsciksZShpLHIpfWZpbmFsbHl7VnAobyksVGEocz8zOjEscil9fWZ1bmN0aW9uIGJPKG4sdCxlKXtpZihHUCh0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IHM9bi5kYXRhW29dO3MuY29udGVudFF1ZXJpZXMmJnMuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gdk8obix0LGUpeyFwNSgpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO1RNKGUpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9b2EodCxuKSxyPUF6KGUpLG89bltuTV0scz1WTShuLExNKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09c30odCxlLG4uZGF0YVtyK2UuY29tcG9uZW50T2Zmc2V0XSksbi5maXJzdENyZWF0ZVBhc3N8fGxNKGUsdCksdWMoaSx0KTtsZXQgcz1lLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBhPXI7YTxvO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9enAodCxuLGEsZSk7dWMoYyx0KSxudWxsIT09cyYmRWFlKDAsYS1yLGMsbCwwLHMpLHZsKGwpJiYoaWQoZS5pbmRleCx0KVtFc109enAodCxuLGEsZSkpfX0obix0LGUsb2EoZSx0KSksNjQ9PSg2NCZlLmZsYWdzKSYmT3oobix0LGUpKX1mdW5jdGlvbiB5TyhuLHQsZT1vYSl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgcz1pW28rMV0sYT0tMT09PXM/ZSh0LG4pOm5bc107bltyKytdPWF9fX1mdW5jdGlvbiBBeihuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9eE8oMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIHhPKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPVdyK2ksdT1kK3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkhuKTtyZXR1cm4gZX0oZCx1KSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwW0ZuXT17dHlwZTpuLGJsdWVwcmludDpwLHRlbXBsYXRlOmUscXVlcmllczpudWxsLHZpZXdRdWVyeTphLGRlY2xUTm9kZTp0LGRhdGE6cC5zbGljZSgpLmZpbGwobnVsbCxkKSxiaW5kaW5nU3RhcnRJbmRleDpkLGV4cGFuZG9TdGFydEluZGV4OnUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVlcmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6byxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIHM/cygpOnMsZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6bCxjb25zdHM6ZixpbmNvbXBsZXRlRmlyc3RQYXNzOiExfX1mdW5jdGlvbiBSeihuLHQsZSxpKXtsZXQgcj1Oeih0KTtudWxsPT09ZT9yLnB1c2goaSk6KHIucHVzaChlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmTHoobikucHVzaChpLHIubGVuZ3RoLTEpKX1mdW5jdGlvbiBDSChuLHQsZSxpKXtmb3IobGV0IHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIpKXtlPW51bGw9PT1lP3t9OmU7bGV0IG89bltyXTtudWxsPT09aT9NSChlLHQscixvKTppLmhhc093blByb3BlcnR5KHIpJiZNSChlLHQsaVtyXSxvKX1yZXR1cm4gZX1mdW5jdGlvbiBNSChuLHQsZSxpKXtuLmhhc093blByb3BlcnR5KGUpP25bZV0ucHVzaCh0LGkpOm5bZV09W3QsaV19ZnVuY3Rpb24gYWEobix0LGUsaSxyLG8scyxhKXtsZXQgZCxsPW9hKHQsZSksYz10LmlucHV0czshYSYmbnVsbCE9YyYmKGQ9Y1tpXSk/KFNPKG4sZSxkLGksciksVE0odCkmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9aWQodCxuKTsxNiZlW3JpXXx8KGVbcmldfD0zMil9KGUsdC5pbmRleCkpOjMmdC50eXBlJiYoaT1mdW5jdGlvbihuKXtyZXR1cm4iY2xhc3MiPT09bj8iY2xhc3NOYW1lIjoiZm9yIj09PW4/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PW4/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09bj8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bj8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1uPyJ0YWJJbmRleCI6bn0oaSkscj1udWxsIT1zP3Mocix0LnZhbHVlfHwiIixpKTpyLG8uc2V0UHJvcGVydHkobCxpLHIpKX1mdW5jdGlvbiBDTyhuLHQsZSxpKXtpZihwNSgpKXtsZXQgcyxhLHI9bnVsbD09PWk/bnVsbDp7IiI6LTF9LG89ZnVuY3Rpb24obix0KXtsZXQgZT1uLmRpcmVjdGl2ZVJlZ2lzdHJ5LGk9bnVsbCxyPW51bGw7aWYoZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXTtpZih3eih0LHMuc2VsZWN0b3JzLCExKSlpZihpfHwoaT1bXSksdmwocykpaWYobnVsbCE9PXMuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtsZXQgYT1bXTtyPXJ8fG5ldyBNYXAscy5maW5kSG9zdERpcmVjdGl2ZURlZnMocyxhLHIpLGkudW5zaGlmdCguLi5hLHMpLGRQKG4sdCxhLmxlbmd0aCl9ZWxzZSBpLnVuc2hpZnQocyksZFAobix0LDApO2Vsc2Ugcj1yfHxuZXcgTWFwLHMuZmluZEhvc3REaXJlY3RpdmVEZWZzPy4ocyxpLHIpLGkucHVzaChzKX1yZXR1cm4gbnVsbD09PWk/bnVsbDpbaSxyXX0obixlKTtudWxsPT09bz9zPWE9bnVsbDpbcyxhXT1vLG51bGwhPT1zJiZQeihuLHQsZSxzLHIsYSksciYmZnVuY3Rpb24obix0LGUpe2lmKHQpe2xldCBpPW4ubG9jYWxOYW1lcz1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpe2xldCBvPWVbdFtyKzFdXTtpZihudWxsPT1vKXRocm93IG5ldyB5dCgtMzAxLCExKTtpLnB1c2godFtyXSxvKX19fShlLGkscil9ZS5tZXJnZWRBdHRycz1ZXyhlLm1lcmdlZEF0dHJzLGUuYXR0cnMpfWZ1bmN0aW9uIFB6KG4sdCxlLGkscixvKXtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKylIUihsTShlLHQpLG4saVtjXS50eXBlKTshZnVuY3Rpb24obix0LGUpe24uZmxhZ3N8PTEsbi5kaXJlY3RpdmVTdGFydD10LG4uZGlyZWN0aXZlRW5kPXQrZSxuLnByb3ZpZGVySW5kZXhlcz10fShlLG4uZGF0YS5sZW5ndGgsaS5sZW5ndGgpO2ZvcihsZXQgYz0wO2M8aS5sZW5ndGg7YysrKXtsZXQgZD1pW2NdO2QucHJvdmlkZXJzUmVzb2x2ZXImJmQucHJvdmlkZXJzUmVzb2x2ZXIoZCl9bGV0IHM9ITEsYT0hMSxsPXViKG4sdCxpLmxlbmd0aCxudWxsKTtmb3IobGV0IGM9MDtjPGkubGVuZ3RoO2MrKyl7bGV0IGQ9aVtjXTtlLm1lcmdlZEF0dHJzPVlfKGUubWVyZ2VkQXR0cnMsZC5ob3N0QXR0cnMpLHdhZShuLGUsdCxsLGQpLENhZShsLGQsciksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD00KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTY0KTtsZXQgdT1kLnR5cGUucHJvdG90eXBlOyFzJiYodS5uZ09uQ2hhbmdlc3x8dS5uZ09uSW5pdHx8dS5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJIb29rcz8/KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goZS5pbmRleCkscz0hMCksIWEmJih1Lm5nT25DaGFuZ2VzfHx1Lm5nRG9DaGVjaykmJigobi5wcmVPcmRlckNoZWNrSG9va3M/PyhuLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2goZS5pbmRleCksYT0hMCksbCsrfSFmdW5jdGlvbihuLHQsZSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQsbz1uLmRhdGEscz10LmF0dHJzLGE9W10sbD1udWxsLGM9bnVsbDtmb3IobGV0IGQ9dC5kaXJlY3RpdmVTdGFydDtkPHI7ZCsrKXtsZXQgdT1vW2RdLHA9ZT9lLmdldCh1KTpudWxsLG09cD9wLm91dHB1dHM6bnVsbDtsPUNIKHUuaW5wdXRzLGQsbCxwP3AuaW5wdXRzOm51bGwpLGM9Q0godS5vdXRwdXRzLGQsYyxtKTtsZXQgYj1udWxsPT09bHx8bnVsbD09PXN8fE16KHQpP251bGw6VGFlKGwsZCxzKTthLnB1c2goYil9bnVsbCE9PWwmJihsLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYodC5mbGFnc3w9OCksbC5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSYmKHQuZmxhZ3N8PTE2KSksdC5pbml0aWFsSW5wdXRzPWEsdC5pbnB1dHM9bCx0Lm91dHB1dHM9Y30obixlLG8pfWZ1bmN0aW9uIE96KG4sdCxlKXtsZXQgaT1lLmRpcmVjdGl2ZVN0YXJ0LHI9ZS5kaXJlY3RpdmVFbmQsbz1lLmluZGV4LHM9am4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDt0cnl7VnAobyk7Zm9yKGxldCBhPWk7YTxyO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9dFthXTtMUihhKSwobnVsbCE9PWwuaG9zdEJpbmRpbmdzfHwwIT09bC5ob3N0VmFyc3x8bnVsbCE9PWwuaG9zdEF0dHJzKSYmdmFlKGwsYyl9fWZpbmFsbHl7VnAoLTEpLExSKHMpfX1mdW5jdGlvbiB2YWUobix0KXtudWxsIT09bi5ob3N0QmluZGluZ3MmJm4uaG9zdEJpbmRpbmdzKDEsdCl9ZnVuY3Rpb24gZFAobix0LGUpe3QuY29tcG9uZW50T2Zmc2V0PWUsKG4uY29tcG9uZW50cz8/KG4uY29tcG9uZW50cz1bXSkpLnB1c2godC5pbmRleCl9ZnVuY3Rpb24gQ2FlKG4sdCxlKXtpZihlKXtpZih0LmV4cG9ydEFzKWZvcihsZXQgaT0wO2k8dC5leHBvcnRBcy5sZW5ndGg7aSsrKWVbdC5leHBvcnRBc1tpXV09bjt2bCh0KSYmKGVbIiJdPW4pfX1mdW5jdGlvbiB3YWUobix0LGUsaSxyKXtuLmRhdGFbaV09cjtsZXQgbz1yLmZhY3Rvcnl8fChyLmZhY3Rvcnk9QnAoci50eXBlKSkscz1uZXcgSHAobyx2bChyKSxDKTtuLmJsdWVwcmludFtpXT1zLGVbaV09cyxmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXIuaG9zdEJpbmRpbmdzO2lmKG8pe2xldCBzPW4uaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT1zJiYocz1uLmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7bGV0IGE9fnQuaW5kZXg7KGZ1bmN0aW9uKG4pe2xldCB0PW4ubGVuZ3RoO2Zvcig7dD4wOyl7bGV0IGU9blstLXRdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmZTwwKXJldHVybiBlfXJldHVybiAwfSkocykhPWEmJnMucHVzaChhKSxzLnB1c2goZSxpLG8pfX0obix0LGksdWIobixlLHIuaG9zdFZhcnMsSG4pLHIpfWZ1bmN0aW9uIGdjKG4sdCxlLGkscixvKXtsZXQgcz1vYShuLHQpO01PKHRbb2ldLHMsbyxuLnZhbHVlLGUsaSxyKX1mdW5jdGlvbiBNTyhuLHQsZSxpLHIsbyxzKXtpZihudWxsPT1vKW4ucmVtb3ZlQXR0cmlidXRlKHQscixlKTtlbHNle2xldCBhPW51bGw9PXM/VW4obyk6cyhvLGl8fCIiLHIpO24uc2V0QXR0cmlidXRlKHQscixhLGUpfX1mdW5jdGlvbiBFYWUobix0LGUsaSxyLG8pe2xldCBzPW9bdF07aWYobnVsbCE9PXMpe2xldCBhPWkuc2V0SW5wdXQ7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDspe2xldCBjPXNbbCsrXSxkPXNbbCsrXSx1PXNbbCsrXTtudWxsIT09YT9pLnNldElucHV0KGUsdSxjLGQpOmVbZF09dX19fWZ1bmN0aW9uIFRhZShuLHQsZSl7bGV0IGk9bnVsbCxyPTA7Zm9yKDtyPGUubGVuZ3RoOyl7bGV0IG89ZVtyXTtpZigwIT09bylpZig1IT09byl7aWYoIm51bWJlciI9PXR5cGVvZiBvKWJyZWFrO2lmKG4uaGFzT3duUHJvcGVydHkobykpe251bGw9PT1pJiYoaT1bXSk7bGV0IHM9bltvXTtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErPTIpaWYoc1thXT09PXQpe2kucHVzaChvLHNbYSsxXSxlW3IrMV0pO2JyZWFrfX1yKz0yfWVsc2Ugcis9MjtlbHNlIHIrPTR9cmV0dXJuIGl9ZnVuY3Rpb24ga3oobix0LGUsaSl7cmV0dXJuW24sITAsITEsdCxudWxsLDAsaSxlLG51bGwsbnVsbF19ZnVuY3Rpb24gQWFlKG4sdCl7bGV0IGU9aWQodCxuKTtpZihyTShlKSl7bGV0IGk9ZVtGbl07NDgmZVtyaV0/Qk0oaSxlLGkudGVtcGxhdGUsZVtFc10pOmVbRnBdPjAmJnVQKGUpfX1mdW5jdGlvbiB1UChuKXtmb3IobGV0IGk9ck8obik7bnVsbCE9PWk7aT1vTyhpKSlmb3IobGV0IHI9d3M7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYock0obykpaWYoNTEyJm9bcmldKXtsZXQgcz1vW0ZuXTtCTShzLG8scy50ZW1wbGF0ZSxvW0VzXSl9ZWxzZSBvW0ZwXT4wJiZ1UChvKX1sZXQgZT1uW0ZuXS5jb21wb25lbnRzO2lmKG51bGwhPT1lKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1pZChlW2ldLG4pO3JNKHIpJiZyW0ZwXT4wJiZ1UChyKX19ZnVuY3Rpb24gUmFlKG4sdCl7bGV0IGU9aWQodCxuKSxpPWVbRm5dOyhmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT10Lmxlbmd0aDtlPG4uYmx1ZXByaW50Lmxlbmd0aDtlKyspdC5wdXNoKG4uYmx1ZXByaW50W2VdKX0pKGksZSksX08oaSxlLGVbRXNdKX1mdW5jdGlvbiBWTShuLHQpe3JldHVybiBuW1dfXT9uW2lIXVtfbF09dDpuW1dfXT10LG5baUhdPXQsdH1mdW5jdGlvbiB3TyhuKXtmb3IoO247KXtuW3JpXXw9MzI7bGV0IHQ9aU8obik7aWYoQXJlKG4pJiYhdClyZXR1cm4gbjtuPXR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRnoobix0LGUsaT0hMCl7bGV0IHI9dFtuTV07ci5iZWdpbiYmci5iZWdpbigpO3RyeXtCTShuLHQsbi50ZW1wbGF0ZSxlKX1jYXRjaChzKXt0aHJvdyBpJiZWeih0LHMpLHN9ZmluYWxseXtyLmVuZCYmci5lbmQoKX19ZnVuY3Rpb24gcFAobix0LGUpe1FQKDApLHQobixlKX1mdW5jdGlvbiBOeihuKXtyZXR1cm4gbltHX118fChuW0dfXT1bXSl9ZnVuY3Rpb24gTHoobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gQnoobix0LGUpe3JldHVybihudWxsPT09bnx8dmwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bVVBdKXJldHVybiBuO249bltzdV19cmV0dXJuIG51bGx9KGVbdC5pbmRleF0pKSxlW29pXX1mdW5jdGlvbiBWeihuLHQpe2xldCBlPW5bdE1dLGk9ZT9lLmdldChycyxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gU08obix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IHM9ZVtvKytdLGE9ZVtvKytdLGw9dFtzXSxjPW4uZGF0YVtzXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLGEpOmxbYV09cn19ZnVuY3Rpb24gbGQobix0LGUpe2xldCBpPUlNKHQsbik7ejUobltvaV0saSxlKX1mdW5jdGlvbiBmTShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBhPXRbc107Im51bWJlciI9PXR5cGVvZiBhP289YToxPT1vP3I9QVIocixhKToyPT1vJiYoaT1BUihpLGErIjogIit0Wysrc10rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gUUMobix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKFJhKG8pKSxuZChvKSlmb3IobGV0IGE9d3M7YTxvLmxlbmd0aDthKyspe2xldCBsPW9bYV0sYz1sW0ZuXS5maXJzdENoaWxkO251bGwhPT1jJiZRQyhsW0ZuXSxsLGMsaSl9bGV0IHM9ZS50eXBlO2lmKDgmcylRQyhuLHQsZS5jaGlsZCxpKTtlbHNlIGlmKDMyJnMpe2xldCBsLGE9bk8oZSx0KTtmb3IoO2w9YSgpOylpLnB1c2gobCl9ZWxzZSBpZigxNiZzKXtsZXQgYT1LNSh0LGUpO2lmKEFycmF5LmlzQXJyYXkoYSkpaS5wdXNoKC4uLmEpO2Vsc2V7bGV0IGw9aU8odFtibF0pO1FDKGxbRm5dLGwsYSxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciBqcD1jbGFzc3tnZXQgcm9vdE5vZGVzKCl7bGV0IHQ9dGhpcy5fbFZpZXcsZT10W0ZuXTtyZXR1cm4gUUMoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Y29uc3RydWN0b3IodCxlKXt0aGlzLl9sVmlldz10LHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1lLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W0VzXX1zZXQgY29udGV4dCh0KXt0aGlzLl9sVmlld1tFc109dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1tyaV0pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7bGV0IHQ9dGhpcy5fbFZpZXdbR3JdO2lmKG5kKHQpKXtsZXQgZT10W2lNXSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihHUih0LGkpLGNNKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWo1KHRoaXMuX2xWaWV3W0ZuXSx0aGlzLl9sVmlldyl9b25EZXN0cm95KHQpe1J6KHRoaXMuX2xWaWV3W0ZuXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe3dPKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3W3JpXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbcmldfD02NH1kZXRlY3RDaGFuZ2VzKCl7RnoodGhpcy5fbFZpZXdbRm5dLHRoaXMuX2xWaWV3LHRoaXMuY29udGV4dCl9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyB5dCg5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt2YXIgdDt0aGlzLl9hcHBSZWY9bnVsbCxhYih0aGlzLl9sVmlld1tGbl0sdD10aGlzLl9sVmlldyx0W29pXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IHl0KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxmUD1jbGFzcyBleHRlbmRzIGpwe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztGeih0W0ZuXSx0LHRbRXNdLCExKX1jaGVja05vQ2hhbmdlcygpe31nZXQgY29udGV4dCgpe3JldHVybiBudWxsfX0sbU09Y2xhc3MgZXh0ZW5kcyBmb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubmdNb2R1bGU9dH1yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXtsZXQgZT1EYSh0KTtyZXR1cm4gbmV3IGhNKGUsdGhpcy5uZ01vZHVsZSl9fTtmdW5jdGlvbiB3SChuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbiluLmhhc093blByb3BlcnR5KGUpJiZ0LnB1c2goe3Byb3BOYW1lOm5bZV0sdGVtcGxhdGVOYW1lOmV9KTtyZXR1cm4gdH12YXIgaE09Y2xhc3MgZXh0ZW5kcyBwTXtnZXQgaW5wdXRzKCl7cmV0dXJuIHdIKHRoaXMuY29tcG9uZW50RGVmLmlucHV0cyl9Z2V0IG91dHB1dHMoKXtyZXR1cm4gd0godGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAoJHNlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWNyZWF0ZSh0LGUsaSxyKXtsZXQgbz0ocj1yfHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YgcGM/cjpyPy5pbmplY3RvcjtvJiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYobz10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iobyl8fG8pO2xldCBzPW8/bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pbmplY3Rvcj10LHRoaXMucGFyZW50SW5qZWN0b3I9ZX1nZXQodCxlLGkpe2k9d00oaSk7bGV0IHI9dGhpcy5pbmplY3Rvci5nZXQodCxnUixpKTtyZXR1cm4gciE9PWdSfHxlPT09Z1I/cjp0aGlzLnBhcmVudEluamVjdG9yLmdldCh0LGUsaSl9fSh0LG8pOnQsYT1zLmdldChmYyxudWxsKTtpZihudWxsPT09YSl0aHJvdyBuZXcgeXQoNDA3LCExKTtsZXQgYixNLGw9cy5nZXQoSHNlLG51bGwpLGM9YS5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxkPXRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIsdT1pP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5zZWxlY3RSb290RWxlbWVudCh0LGU9PT1yYS5TaGFkb3dEb20pfShjLGksdGhpcy5jb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbik6YU8oYyxkLGZ1bmN0aW9uKG4pe2xldCB0PW4udG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PXQ/bDU6Im1hdGgiPT09dD9jNTpudWxsfShkKSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixmPXhPKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLG09TE0obnVsbCxmLG51bGwscCxudWxsLG51bGwsYSxjLGwscyxudWxsKTtaUChtKTt0cnl7bGV0IHgseT10aGlzLmNvbXBvbmVudERlZixSPW51bGw7eS5maW5kSG9zdERpcmVjdGl2ZURlZnM/KHg9W10sUj1uZXcgTWFwLHkuZmluZEhvc3REaXJlY3RpdmVEZWZzKHkseCxSKSx4LnB1c2goeSkpOng9W3ldO2xldCBBPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bltGbl0saT1XcjtyZXR1cm4gbltpXT10LG9oKGUsaSwyLCIjaG9zdCIsbnVsbCl9KG0sdSksVj1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsPXJbRm5dOyFmdW5jdGlvbihuLHQsZSxpKXtmb3IobGV0IHIgb2Ygbil0Lm1lcmdlZEF0dHJzPVlfKHQubWVyZ2VkQXR0cnMsci5ob3N0QXR0cnMpO251bGwhPT10Lm1lcmdlZEF0dHJzJiYoZk0odCx0Lm1lcmdlZEF0dHJzLCEwKSxudWxsIT09ZSYmZXooaSxlLHQpKX0oaSxuLHQscyk7bGV0IGM9by5jcmVhdGVSZW5kZXJlcih0LGUpLGQ9TE0ocixBeihlKSxudWxsLGUub25QdXNoPzMyOjE2LHJbbi5pbmRleF0sbixvLGMsbnVsbCxudWxsLG51bGwpO3JldHVybiBsLmZpcnN0Q3JlYXRlUGFzcyYmZFAobCxuLGkubGVuZ3RoLTEpLFZNKHIsZCkscltuLmluZGV4XT1kfShBLHUseSx4LG0sYSxjKTtNPWQ1KGYsV3IpLHUmJmZ1bmN0aW9uKG4sdCxlLGkpe2lmKGkpQlIobixlLFsibmctdmVyc2lvbiIsenNlLmZ1bGxdKTtlbHNle2xldHthdHRyczpyLGNsYXNzZXM6b309ZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXSxpPTEscj0yO2Zvcig7aTxuLmxlbmd0aDspe2xldCBvPW5baV07aWYoInN0cmluZyI9PXR5cGVvZiBvKTI9PT1yPyIiIT09byYmdC5wdXNoKG8sblsrK2ldKTo4PT09ciYmZS5wdXNoKG8pO2Vsc2V7aWYoIWhsKHIpKWJyZWFrO3I9b31pKyt9cmV0dXJue2F0dHJzOnQsY2xhc3NlczplfX0odC5zZWxlY3RvcnNbMF0pO3ImJkJSKG4sZSxyKSxvJiZvLmxlbmd0aD4wJiYkNShuLGUsby5qb2luKCIgIikpfX0oYyx5LHUsaSksdm9pZCAwIT09ZSYmZnVuY3Rpb24obix0LGUpe2xldCBpPW4ucHJvamVjdGlvbj1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpLnB1c2gobnVsbCE9bz9BcnJheS5mcm9tKG8pOm51bGwpfX0oTSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxlKSxiPWZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz1QbygpLGE9cltGbl0sbD1vYShzLHIpO1B6KGEscixzLGUsbnVsbCxpKTtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKyl1Yyh6cChyLGEscy5kaXJlY3RpdmVTdGFydCtkLHMpLHIpO096KGEscixzKSxsJiZ1YyhsLHIpO2xldCBjPXpwKHIsYSxzLmRpcmVjdGl2ZVN0YXJ0K3MuY29tcG9uZW50T2Zmc2V0LHMpO2lmKG5bRXNdPXJbRXNdPWMsbnVsbCE9PW8pZm9yKGxldCBkIG9mIG8pZChjLHQpO3JldHVybiBiTyhhLHMsbiksY30oVix5LHgsUixtLFtIYWVdKSxfTyhmLG0sbnVsbCl9ZmluYWxseXtLUCgpfXJldHVybiBuZXcgaFAodGhpcy5jb21wb25lbnRUeXBlLGIscmgoTSxtKSxtLE0pfX0saFA9Y2xhc3MgZXh0ZW5kcyBhUHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgZlAociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztTTyhvW0ZuXSxvLHIsdCxlKSx3TyhpZCh0aGlzLl90Tm9kZS5pbmRleCxvKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgTHAodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX07ZnVuY3Rpb24gSGFlKCl7bGV0IG49UG8oKTtBTShaZSgpW0ZuXSxuKX1mdW5jdGlvbiBIeihuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiBLZShuKXtsZXQgdD1IeihuLnR5cGUpLGU9ITAsaT1bbl07Zm9yKDt0Oyl7bGV0IHI7aWYodmwobikpcj10Llx1MDI3NWNtcHx8dC5cdTAyNzVkaXI7ZWxzZXtpZih0Llx1MDI3NWNtcCl0aHJvdyBuZXcgeXQoOTAzLCExKTtyPXQuXHUwMjc1ZGlyfWlmKHIpe2lmKGUpe2kucHVzaChyKTtsZXQgcz1uO3MuaW5wdXRzPWJSKG4uaW5wdXRzKSxzLmRlY2xhcmVkSW5wdXRzPWJSKG4uZGVjbGFyZWRJbnB1dHMpLHMub3V0cHV0cz1iUihuLm91dHB1dHMpO2xldCBhPXIuaG9zdEJpbmRpbmdzO2EmJkdhZShuLGEpO2xldCBsPXIudmlld1F1ZXJ5LGM9ci5jb250ZW50UXVlcmllcztpZihsJiZVYWUobixsKSxjJiZqYWUobixjKSxjUihuLmlucHV0cyxyLmlucHV0cyksY1Iobi5kZWNsYXJlZElucHV0cyxyLmRlY2xhcmVkSW5wdXRzKSxjUihuLm91dHB1dHMsci5vdXRwdXRzKSx2bChyKSYmci5kYXRhLmFuaW1hdGlvbil7bGV0IGQ9bi5kYXRhO2QuYW5pbWF0aW9uPShkLmFuaW1hdGlvbnx8W10pLmNvbmNhdChyLmRhdGEuYW5pbWF0aW9uKX19bGV0IG89ci5mZWF0dXJlcztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKXtsZXQgYT1vW3NdO2EmJmEubmdJbmhlcml0JiZhKG4pLGE9PT1LZSYmKGU9ITEpfX10PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0hZnVuY3Rpb24obil7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPW5baV07ci5ob3N0VmFycz10Kz1yLmhvc3RWYXJzLHIuaG9zdEF0dHJzPVlfKHIuaG9zdEF0dHJzLGU9WV8oZSxyLmhvc3RBdHRycykpfX0oaSl9ZnVuY3Rpb24gYlIobil7cmV0dXJuIG49PT0kYz97fTpuPT09Vmk/W106bn1mdW5jdGlvbiBVYWUobix0KXtsZXQgZT1uLnZpZXdRdWVyeTtuLnZpZXdRdWVyeT1lPyhpLHIpPT57dChpLHIpLGUoaSxyKX06dH1mdW5jdGlvbiBqYWUobix0KXtsZXQgZT1uLmNvbnRlbnRRdWVyaWVzO24uY29udGVudFF1ZXJpZXM9ZT8oaSxyLG8pPT57dChpLHIsbyksZShpLHIsbyl9OnR9ZnVuY3Rpb24gR2FlKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ3M7bi5ob3N0QmluZGluZ3M9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9dmFyIFdhZT1bInByb3ZpZGVyc1Jlc29sdmVyIl0scWFlPVsidGVtcGxhdGUiLCJkZWNscyIsImNvbnN0cyIsInZhcnMiLCJvblB1c2giLCJuZ0NvbnRlbnRTZWxlY3RvcnMiLCJzdHlsZXMiLCJlbmNhcHN1bGF0aW9uIiwic2NoZW1hcyJdO2Z1bmN0aW9uIHp6KG4sdCxlKXtpZihudWxsIT09bi5ob3N0RGlyZWN0aXZlcylmb3IobGV0IGkgb2Ygbi5ob3N0RGlyZWN0aXZlcyl7bGV0IHI9dHUoaS5kaXJlY3RpdmUpO1FhZShyLmRlY2xhcmVkSW5wdXRzLGkuaW5wdXRzKSx6eihyLHQsZSksZS5zZXQocixpKSx0LnB1c2gocil9fWZ1bmN0aW9uIFNIKG4pe2lmKHZvaWQgMD09PW58fDA9PT1uLmxlbmd0aClyZXR1cm4gJGM7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKz0yKXRbbltlXV09bltlKzFdO3JldHVybiB0fWZ1bmN0aW9uIFFhZShuLHQpe2ZvcihsZXQgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW3RbZV1dPW5bZV0pfWZ1bmN0aW9uIFV6KG4pe3JldHVybiEhRU8obikmJihBcnJheS5pc0FycmF5KG4pfHwhKG4gaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gbil9ZnVuY3Rpb24gRU8obil7cmV0dXJuIG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2Ygbil9ZnVuY3Rpb24gX2Mobix0LGUpe3JldHVybiBuW3RdPWV9ZnVuY3Rpb24gcGIobix0KXtyZXR1cm4gblt0XX1mdW5jdGlvbiBVbyhuLHQsZSl7cmV0dXJuIU9iamVjdC5pcyhuW3RdLGUpJiYoblt0XT1lLCEwKX1mdW5jdGlvbiBHcChuLHQsZSxpKXtsZXQgcj1VbyhuLHQsZSk7cmV0dXJuIFVvKG4sdCsxLGkpfHxyfWZ1bmN0aW9uIEhNKG4sdCxlLGkscil7bGV0IG89R3Aobix0LGUsaSk7cmV0dXJuIFVvKG4sdCsyLHIpfHxvfWZ1bmN0aW9uIFBhKG4sdCxlLGkscixvKXtsZXQgcz1HcChuLHQsZSxpKTtyZXR1cm4gR3Aobix0KzIscixvKXx8c31mdW5jdGlvbiBCZShuLHQsZSxpKXtsZXQgcj1aZSgpO3JldHVybiBVbyhyLGVoKCksdCkmJihFaSgpLGdjKGtyKCkscixuLHQsZSxpKSksQmV9ZnVuY3Rpb24gc2gobix0KXtsZXQgZT0hMSxpPXJkKCk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKWU9VW8obixpKyssdFtvXSl8fGU7aWYobTUoaSksIWUpcmV0dXJuIEhuO2xldCByPXRbMF07Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKXIrPVVuKHRbb10pK3RbbysxXTtyZXR1cm4gcn1mdW5jdGlvbiBhaChuLHQsZSxpKXtyZXR1cm4gVW8obixlaCgpLGUpP3QrVW4oZSkraTpIbn1mdW5jdGlvbiBsaChuLHQsZSxpLHIsbyl7bGV0IGE9R3AobixyZCgpLGUscik7cmV0dXJuIG9kKDIpLGE/dCtVbihlKStpK1VuKHIpK286SG59ZnVuY3Rpb24gY2gobix0LGUsaSxyLG8scyxhKXtsZXQgYz1ITShuLHJkKCksZSxyLHMpO3JldHVybiBvZCgzKSxjP3QrVW4oZSkraStVbihyKStvK1VuKHMpK2E6SG59ZnVuY3Rpb24gZGgobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9UGEobixyZCgpLGUscixzLGwpO3JldHVybiBvZCg0KSx1P3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYzpIbn1mdW5jdGlvbiB1aChuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSl7bGV0IHA9cmQoKSxmPVBhKG4scCxlLHIscyxsKTtyZXR1cm4gZj1VbyhuLHArNCxkKXx8ZixvZCg1KSxmP3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYytVbihkKSt1OkhufWZ1bmN0aW9uIHBoKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZil7bGV0IG09cmQoKSxiPVBhKG4sbSxlLHIscyxsKTtyZXR1cm4gYj1HcChuLG0rNCxkLHApfHxiLG9kKDYpLGI/dCtVbihlKStpK1VuKHIpK28rVW4ocykrYStVbihsKStjK1VuKGQpK3UrVW4ocCkrZjpIbn1mdW5jdGlvbiBmaChuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiKXtsZXQgTT1yZCgpLHk9UGEobixNLGUscixzLGwpO3JldHVybiB5PUhNKG4sTSs0LGQscCxtKXx8eSxvZCg3KSx5P3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYytVbihkKSt1K1VuKHApK2YrVW4obSkrYjpIbn1mdW5jdGlvbiBtaChuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSl7bGV0IHg9cmQoKSxSPVBhKG4seCxlLHIscyxsKTtyZXR1cm4gUj1QYShuLHgrNCxkLHAsbSxNKXx8UixvZCg4KSxSP3QrVW4oZSkraStVbihyKStvK1VuKHMpK2ErVW4obCkrYytVbihkKSt1K1VuKHApK2YrVW4obSkrYitVbihNKSt5OkhufWZ1bmN0aW9uIFMobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9RWkoKSxkPW4rV3IsdT1jLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCl7bGV0IGM9dC5jb25zdHMsZD1vaCh0LG4sNCxzfHxudWxsLGl1KGMsYSkpO0NPKHQsZSxkLGl1KGMsbCkpLEFNKHQsZCk7bGV0IHU9ZC50Vmlldz14TygyLGQsaSxyLG8sdC5kaXJlY3RpdmVSZWdpc3RyeSx0LnBpcGVSZWdpc3RyeSxudWxsLHQuc2NoZW1hcyxjKTtyZXR1cm4gbnVsbCE9PXQucXVlcmllcyYmKHQucXVlcmllcy50ZW1wbGF0ZSh0LGQpLHUucXVlcmllcz10LnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhkKSksZH0oZCxjLGwsdCxlLGkscixvLHMpOmMuZGF0YVtkXTtkYyh1LCExKTtsZXQgcD1sW29pXS5jcmVhdGVDb21tZW50KCIiKTtPTShjLGwscCx1KSx1YyhwLGwpLFZNKGwsbFtkXT1reihwLGwscCx1KSksRE0odSkmJnZPKGMsbCx1KSxudWxsIT1zJiZ5TyhsLHUsYSl9ZnVuY3Rpb24gaXQobil7cmV0dXJuICRtKGpuLmxGcmFtZS5jb250ZXh0TFZpZXcsV3Irbil9ZnVuY3Rpb24gXyhuLHQsZSl7bGV0IGk9WmUoKTtyZXR1cm4gVW8oaSxlaCgpLHQpJiZhYShFaSgpLGtyKCksaSxuLHQsaVtvaV0sZSwhMSksX31mdW5jdGlvbiBnUChuLHQsZSxpLHIpe2xldCBzPXI/ImNsYXNzIjoic3R5bGUiO1NPKG4sZSx0LmlucHV0c1tzXSxzLGkpfWZ1bmN0aW9uIGgobix0LGUsaSl7bGV0IHI9WmUoKSxvPUVpKCkscz1XcituLGE9cltvaV0sbD1vLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9dC5jb25zdHMsbD1vaCh0LG4sMixpLGl1KHMscikpO3JldHVybiBDTyh0LGUsbCxpdShzLG8pKSxudWxsIT09bC5hdHRycyYmZk0obCxsLmF0dHJzLCExKSxudWxsIT09bC5tZXJnZWRBdHRycyYmZk0obCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsbCksbH0ocyxvLHIsdCxlLGkpOm8uZGF0YVtzXSxjPXJbc109YU8oYSx0LGpuLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxkPURNKGwpO3JldHVybiBkYyhsLCEwKSxleihhLGMsbCksMzIhPSgzMiZsLmZsYWdzKSYmT00obyxyLGMsbCksMD09PWpuLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmdWMoYyxyKSxqbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxkJiYodk8obyxyLGwpLGJPKG8sbCxyKSksbnVsbCE9PWkmJnlPKHIsbCksaH1mdW5jdGlvbiBnKCl7bGV0IG49UG8oKTtxUCgpP1lQKCk6KG49bi5wYXJlbnQsZGMobiwhMSkpO2xldCB0PW47am4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50LS07bGV0IGU9RWkoKTtyZXR1cm4gZS5maXJzdENyZWF0ZVBhc3MmJihBTShlLG4pLEdQKG4pJiZlLnF1ZXJpZXMuZWxlbWVudEVuZChuKSksbnVsbCE9dC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX0odCkmJmdQKGUsdCxaZSgpLHQuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT10LnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmZ1AoZSx0LFplKCksdC5zdHlsZXNXaXRob3V0SG9zdCwhMSksZ31mdW5jdGlvbiBQKG4sdCxlLGkpe3JldHVybiBoKG4sdCxlLGkpLGcoKSxQfWZ1bmN0aW9uIE90KG4sdCxlKXtsZXQgaT1aZSgpLHI9RWkoKSxvPW4rV3Iscz1yLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXQuY29uc3RzLHM9aXUobyxpKSxhPW9oKHQsbiw4LCJuZy1jb250YWluZXIiLHMpO3JldHVybiBudWxsIT09cyYmZk0oYSxzLCEwKSxDTyh0LGUsYSxpdShvLHIpKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsYSksYX0obyxyLGksdCxlKTpyLmRhdGFbb107ZGMocywhMCk7bGV0IGE9aVtvXT1pW29pXS5jcmVhdGVDb21tZW50KCIiKTtyZXR1cm4gT00ocixpLGEscyksdWMoYSxpKSxETShzKSYmKHZPKHIsaSxzKSxiTyhyLHMsaSkpLG51bGwhPWUmJnlPKGkscyksT3R9ZnVuY3Rpb24ga3QoKXtsZXQgbj1QbygpLHQ9RWkoKTtyZXR1cm4gcVAoKT9ZUCgpOihuPW4ucGFyZW50LGRjKG4sITEpKSx0LmZpcnN0Q3JlYXRlUGFzcyYmKEFNKHQsbiksR1AobikmJnQucXVlcmllcy5lbGVtZW50RW5kKG4pKSxrdH1mdW5jdGlvbiBsaShuLHQsZSl7cmV0dXJuIE90KG4sdCxlKSxrdCgpLGxpfWZ1bmN0aW9uIGdlKCl7cmV0dXJuIFplKCl9ZnVuY3Rpb24gaGgobil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi50aGVufWZ1bmN0aW9uIFRPKG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uc3Vic2NyaWJlfXZhciBETz1UTztmdW5jdGlvbiBJKG4sdCxlLGkpe2xldCByPVplKCksbz1FaSgpLHM9UG8oKTtyZXR1cm4gSnoobyxyLHJbb2ldLHMsbix0LGkpLEl9ZnVuY3Rpb24gek0obix0KXtsZXQgZT1QbygpLGk9WmUoKSxyPUVpKCk7cmV0dXJuIEp6KHIsaSxCeihYUChyLmRhdGEpLGUsaSksZSxuLHQpLHpNfWZ1bmN0aW9uIEp6KG4sdCxlLGkscixvLHMpe2xldCBhPURNKGkpLGM9bi5maXJzdENyZWF0ZVBhc3MmJkx6KG4pLGQ9dFtFc10sdT1Oeih0KSxwPSEwO2lmKDMmaS50eXBlfHxzKXtsZXQgYj1vYShpLHQpLE09cz9zKGIpOmIseT11Lmxlbmd0aCx4PXM/QT0+cyhSYShBW2kuaW5kZXhdKSk6aS5pbmRleCxSPW51bGw7aWYoIXMmJmEmJihSPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW4uY2xlYW51cDtpZihudWxsIT1yKWZvcihsZXQgbz0wO288ci5sZW5ndGgtMTtvKz0yKXtsZXQgcz1yW29dO2lmKHM9PT1lJiZyW28rMV09PT1pKXtsZXQgYT10W0dfXSxsPXJbbysyXTtyZXR1cm4gYS5sZW5ndGg+bD9hW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBzJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09UikoUi5fX25nTGFzdExpc3RlbmVyRm5fX3x8UikuX19uZ05leHRMaXN0ZW5lckZuX189byxSLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8scD0hMTtlbHNle289VEgoaSx0LGQsbywhMSk7bGV0IEE9ZS5saXN0ZW4oTSxyLG8pO3UucHVzaChvLEEpLGMmJmMucHVzaChyLHgseSx5KzEpfX1lbHNlIG89VEgoaSx0LGQsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYocCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgYj1tLmxlbmd0aDtpZihiKWZvcihsZXQgTT0wO008YjtNKz0yKXtsZXQgVj10W21bTV1dW21bTSsxXV0uc3Vic2NyaWJlKG8pLHRlPXUubGVuZ3RoO3UucHVzaChvLFYpLGMmJmMucHVzaChyLGkuaW5kZXgsdGUsLSh0ZSsxKSl9fX1mdW5jdGlvbiBFSChuLHQsZSxpKXt0cnl7cmV0dXJuIFRhKDYsdCxlKSwhMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIFZ6KG4sciksITF9ZmluYWxseXtUYSg3LHQsZSl9fWZ1bmN0aW9uIFRIKG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3dPKG4uY29tcG9uZW50T2Zmc2V0Pi0xP2lkKG4uaW5kZXgsdCk6dCk7bGV0IGw9RUgodCxlLGkscyksYz1vLl9fbmdOZXh0TGlzdGVuZXJGbl9fO2Zvcig7YzspbD1FSCh0LGUsYyxzKSYmbCxjPWMuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIHImJiExPT09bCYmKHMucHJldmVudERlZmF1bHQoKSxzLnJldHVyblZhbHVlPSExKSxsfX1mdW5jdGlvbiB3KG49MSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybihqbi5sRnJhbWUuY29udGV4dExWaWV3PWZ1bmN0aW9uKG4sdCl7Zm9yKDtuPjA7KXQ9dFtKbV0sbi0tO3JldHVybiB0fShuLGpuLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtFc119KG4pfWZ1bmN0aW9uIG5sZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT93eihuLG8sITApOkpzZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIERuKG4pe2xldCB0PVplKClbYmxdW1NzXTtpZighdC5wcm9qZWN0aW9uKXtsZXQgaT10LnByb2plY3Rpb249Tl8obj9uLmxlbmd0aDoxLG51bGwpLHI9aS5zbGljZSgpLG89dC5jaGlsZDtmb3IoO251bGwhPT1vOyl7bGV0IHM9bj9ubGUobyxuKTowO251bGwhPT1zJiYocltzXT9yW3NdLnByb2plY3Rpb25OZXh0PW86aVtzXT1vLHJbc109byksbz1vLm5leHR9fX1mdW5jdGlvbiB6dChuLHQ9MCxlKXtsZXQgaT1aZSgpLHI9RWkoKSxvPW9oKHIsV3IrbiwxNixudWxsLGV8fG51bGwpO251bGw9PT1vLnByb2plY3Rpb24mJihvLnByb2plY3Rpb249dCksWVAoKSwzMiE9KDMyJm8uZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7SjUodFtvaV0sMCx0LGUsRzUobixlLHQpLFk1KGUucGFyZW50fHx0W1NzXSxlLHQpKX0ocixpLG8pfWZ1bmN0aW9uIFdpKG4sdCxlKXtyZXR1cm4gZmIobiwiIix0LCIiLGUpLFdpfWZ1bmN0aW9uIGZiKG4sdCxlLGkscil7bGV0IG89WmUoKSxzPWFoKG8sdCxlLGkpO3JldHVybiBzIT09SG4mJmFhKEVpKCksa3IoKSxvLG4scyxvW29pXSxyLCExKSxmYn1mdW5jdGlvbiBVTShuLHQsZSxpLHIsbyxzKXtsZXQgYT1aZSgpLGw9bGgoYSx0LGUsaSxyLG8pO3JldHVybiBsIT09SG4mJmFhKEVpKCksa3IoKSxhLG4sbCxhW29pXSxzLCExKSxVTX1mdW5jdGlvbiBVQyhuLHQpe3JldHVybiBuPDwxN3x0PDwyfWZ1bmN0aW9uIFdwKG4pe3JldHVybiBuPj4xNyYzMjc2N31mdW5jdGlvbiBfUChuKXtyZXR1cm4gMnxufWZ1bmN0aW9uIFhtKG4pe3JldHVybigxMzEwNjgmbik+PjJ9ZnVuY3Rpb24gdlIobix0KXtyZXR1cm4tMTMxMDY5Jm58dDw8Mn1mdW5jdGlvbiBiUChuKXtyZXR1cm4gMXxufWZ1bmN0aW9uIERIKG4sdCxlLGkscil7bGV0IG89bltlKzFdLHM9bnVsbD09PXQsYT1pP1dwKG8pOlhtKG8pLGw9ITE7Zm9yKDswIT09YSYmKCExPT09bHx8cyk7KXtsZXQgZD1uW2ErMV07bGxlKG5bYV0sdCkmJihsPSEwLG5bYSsxXT1pP2JQKGQpOl9QKGQpKSxhPWk/V3AoZCk6WG0oZCl9bCYmKG5bZSsxXT1pP19QKG8pOmJQKG8pKX1mdW5jdGlvbiBsbGUobix0KXtyZXR1cm4gbnVsbD09PW58fG51bGw9PXR8fChBcnJheS5pc0FycmF5KG4pP25bMV06bik9PT10fHwhKCFBcnJheS5pc0FycmF5KG4pfHwic3RyaW5nIiE9dHlwZW9mIHQpJiZzYihuLHQpPj0wfXZhciB1bz17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVFbmQ6MH07ZnVuY3Rpb24gc1Uobil7cmV0dXJuIG4uc3Vic3RyaW5nKHVvLmtleSx1by5rZXlFbmQpfWZ1bmN0aW9uIGNsZShuKXtyZXR1cm4gbi5zdWJzdHJpbmcodW8udmFsdWUsdW8udmFsdWVFbmQpfWZ1bmN0aW9uIGFVKG4sdCl7bGV0IGU9dW8udGV4dEVuZDtyZXR1cm4gZT09PXQ/LTE6KHQ9dW8ua2V5RW5kPWZ1bmN0aW9uKG4sdCxlKXtmb3IoO3Q8ZSYmbi5jaGFyQ29kZUF0KHQpPjMyOyl0Kys7cmV0dXJuIHR9KG4sdW8ua2V5PXQsZSksUW0obix0LGUpKX1mdW5jdGlvbiBsVShuLHQpe2xldCBlPXVvLnRleHRFbmQsaT11by5rZXk9UW0obix0LGUpO3JldHVybiBlPT09aT8tMTooaT11by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2xldCBpO2Zvcig7dDxlJiYoNDU9PT0oaT1uLmNoYXJDb2RlQXQodCkpfHw5NT09PWl8fCgtMzMmaSk+PTY1JiYoLTMzJmkpPD05MHx8aT49NDgmJmk8PTU3KTspdCsrO3JldHVybiB0fShuLGksZSksaT1JSChuLGksZSksaT11by52YWx1ZT1RbShuLGksZSksaT11by52YWx1ZUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9LTEscj0tMSxvPS0xLHM9dCxhPXM7Zm9yKDtzPGU7KXtsZXQgbD1uLmNoYXJDb2RlQXQocysrKTtpZig1OT09PWwpcmV0dXJuIGE7MzQ9PT1sfHwzOT09PWw/YT1zPUFIKG4sbCxzLGUpOnQ9PT1zLTQmJjg1PT09byYmODI9PT1yJiY3Nj09PWkmJjQwPT09bD9hPXM9QUgobiw0MSxzLGUpOmw+MzImJihhPXMpLG89cixyPWksaT0tMzMmbH1yZXR1cm4gYX0obixpLGUpLElIKG4saSxlKSl9ZnVuY3Rpb24gY1Uobil7dW8ua2V5PTAsdW8ua2V5RW5kPTAsdW8udmFsdWU9MCx1by52YWx1ZUVuZD0wLHVvLnRleHRFbmQ9bi5sZW5ndGh9ZnVuY3Rpb24gUW0obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk8PTMyOyl0Kys7cmV0dXJuIHR9ZnVuY3Rpb24gSUgobix0LGUsaSl7cmV0dXJuKHQ9UW0obix0LGUpKTxlJiZ0KyssdH1mdW5jdGlvbiBBSChuLHQsZSxpKXtsZXQgcj0tMSxvPWU7Zm9yKDtvPGk7KXtsZXQgcz1uLmNoYXJDb2RlQXQobysrKTtpZihzPT10JiY5MiE9PXIpcmV0dXJuIG87cj05Mj09cyYmOTI9PT1yPzA6c310aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gVHQobix0LGUpe3JldHVybiBDbChuLHQsZSwhMSksVHR9ZnVuY3Rpb24gbnQobix0KXtyZXR1cm4gQ2wobix0LG51bGwsITApLG50fWZ1bmN0aW9uIEZhKG4pe01sKHBVLGhsZSxuLCExKX1mdW5jdGlvbiBobGUobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIGNVKG4pLGxVKG4sUW0obiwwLHVvLnRleHRFbmQpKX0odCk7ZT49MDtlPWxVKHQsZSkpcFUobixzVSh0KSxjbGUodCkpfWZ1bmN0aW9uIEFzKG4pe01sKHhsZSxiYyxuLCEwKX1mdW5jdGlvbiBiYyhuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gY1UobiksYVUobixRbShuLDAsdW8udGV4dEVuZCkpfSh0KTtlPj0wO2U9YVUodCxlKSlzYShuLHNVKHQpLCEwKX1mdW5jdGlvbiBDbChuLHQsZSxpKXtsZXQgcj1aZSgpLG89RWkoKSxzPW9kKDIpO28uZmlyc3RVcGRhdGVQYXNzJiZ1VShvLG4scyxpKSx0IT09SG4mJlVvKHIscyx0KSYmZlUobyxvLmRhdGFbc3MoKV0scixyW29pXSxuLHJbcysxXT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1ufHwiIj09PW58fCgic3RyaW5nIj09dHlwZW9mIHQ/bis9dDoib2JqZWN0Ij09dHlwZW9mIG4mJihuPXBvKERzKG4pKSkpLG59KHQsZSksaSxzKX1mdW5jdGlvbiBNbChuLHQsZSxpKXtsZXQgcj1FaSgpLG89b2QoMik7ci5maXJzdFVwZGF0ZVBhc3MmJnVVKHIsbnVsbCxvLGkpO2xldCBzPVplKCk7aWYoZSE9PUhuJiZVbyhzLG8sZSkpe2xldCBhPXIuZGF0YVtzcygpXTtpZihtVShhLGkpJiYhZFUocixvKSl7bGV0IGw9aT9hLmNsYXNzZXNXaXRob3V0SG9zdDphLnN0eWxlc1dpdGhvdXRIb3N0O251bGwhPT1sJiYoZT1BUihsLGV8fCIiKSksZ1AocixhLHMsZSxpKX1lbHNlIWZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSl7cj09PUhuJiYocj1WaSk7bGV0IGw9MCxjPTAsZD0wPHIubGVuZ3RoP3JbMF06bnVsbCx1PTA8by5sZW5ndGg/b1swXTpudWxsO2Zvcig7bnVsbCE9PWR8fG51bGwhPT11Oyl7bGV0IGIscD1sPHIubGVuZ3RoP3JbbCsxXTp2b2lkIDAsZj1jPG8ubGVuZ3RoP29bYysxXTp2b2lkIDAsbT1udWxsO2Q9PT11PyhsKz0yLGMrPTIscCE9PWYmJihtPXUsYj1mKSk6bnVsbD09PXV8fG51bGwhPT1kJiZkPHU/KGwrPTIsbT1kKTooYys9MixtPXUsYj1mKSxudWxsIT09bSYmZlUobix0LGUsaSxtLGIscyxhKSxkPWw8ci5sZW5ndGg/cltsXTpudWxsLHU9YzxvLmxlbmd0aD9vW2NdOm51bGx9fShyLGEscyxzW29pXSxzW28rMV0sc1tvKzFdPWZ1bmN0aW9uKG4sdCxlKXtpZihudWxsPT1lfHwiIj09PWUpcmV0dXJuIFZpO2xldCBpPVtdLHI9RHMoZSk7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyluKGkscltvXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHIpZm9yKGxldCBvIGluIHIpci5oYXNPd25Qcm9wZXJ0eShvKSYmbihpLG8scltvXSk7ZWxzZSJzdHJpbmciPT10eXBlb2YgciYmdChpLHIpO3JldHVybiBpfShuLHQsZSksaSxvKX19ZnVuY3Rpb24gZFUobix0KXtyZXR1cm4gdD49bi5leHBhbmRvU3RhcnRJbmRleH1mdW5jdGlvbiB1VShuLHQsZSxpKXtsZXQgcj1uLmRhdGE7aWYobnVsbD09PXJbZSsxXSl7bGV0IG89cltzcygpXSxzPWRVKG4sZSk7bVUobyxpKSYmbnVsbD09PXQmJiFzJiYodD0hMSksdD1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1YUChuKSxvPWk/dC5yZXNpZHVhbENsYXNzZXM6dC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09cikwPT09KGk/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncykmJihlPVFfKGU9eVIobnVsbCxuLHQsZSxpKSx0LmF0dHJzLGkpLG89bnVsbCk7ZWxzZXtsZXQgcz10LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09c3x8bltzXSE9PXIpaWYoZT15UihyLG4sdCxlLGkpLG51bGw9PT1vKXtsZXQgbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9ZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1YbShpKSlyZXR1cm4gbltXcChpKV19KG4sdCxpKTt2b2lkIDAhPT1sJiZBcnJheS5pc0FycmF5KGwpJiYobD15UihudWxsLG4sdCxsWzFdLGkpLGw9UV8obCx0LmF0dHJzLGkpLGZ1bmN0aW9uKG4sdCxlLGkpe25bV3AoZT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKV09aX0obix0LGksbCkpfWVsc2Ugbz1mdW5jdGlvbihuLHQsZSl7bGV0IGkscj10LmRpcmVjdGl2ZUVuZDtmb3IobGV0IG89MSt0LmRpcmVjdGl2ZVN0eWxpbmdMYXN0O288cjtvKyspaT1RXyhpLG5bb10uaG9zdEF0dHJzLGUpO3JldHVybiBRXyhpLHQuYXR0cnMsZSl9KG4sdCxpKX1yZXR1cm4gdm9pZCAwIT09byYmKGk/dC5yZXNpZHVhbENsYXNzZXM9bzp0LnJlc2lkdWFsU3R5bGVzPW8pLGV9KHIsbyx0LGkpLGZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz1vP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MsYT1XcChzKSxsPVhtKHMpO25baV09ZTtsZXQgZCxjPSExO2lmKEFycmF5LmlzQXJyYXkoZSk/KGQ9ZVsxXSwobnVsbD09PWR8fHNiKGUsZCk+MCkmJihjPSEwKSk6ZD1lLHIpaWYoMCE9PWwpe2xldCBwPVdwKG5bYSsxXSk7bltpKzFdPVVDKHAsYSksMCE9PXAmJihuW3ArMV09dlIobltwKzFdLGkpKSxuW2ErMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gMTMxMDcxJm58dDw8MTd9KG5bYSsxXSxpKX1lbHNlIG5baSsxXT1VQyhhLDApLDAhPT1hJiYoblthKzFdPXZSKG5bYSsxXSxpKSksYT1pO2Vsc2UgbltpKzFdPVVDKGwsMCksMD09PWE/YT1pOm5bbCsxXT12UihuW2wrMV0saSksbD1pO2MmJihuW2krMV09X1AobltpKzFdKSksREgobixkLGksITApLERIKG4sZCxpLCExKSxmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPXI/bi5yZXNpZHVhbENsYXNzZXM6bi5yZXNpZHVhbFN0eWxlcztudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIHQmJnNiKG8sdCk+PTAmJihlW2krMV09YlAoZVtpKzFdKSl9KHQsZCxuLGksbykscz1VQyhhLGwpLG8/dC5jbGFzc0JpbmRpbmdzPXM6dC5zdHlsZUJpbmRpbmdzPXN9KHIsbyx0LGUscyxpKX19ZnVuY3Rpb24geVIobix0LGUsaSxyKXtsZXQgbz1udWxsLHM9ZS5kaXJlY3RpdmVFbmQsYT1lLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2ZvcigtMT09PWE/YT1lLmRpcmVjdGl2ZVN0YXJ0OmErKzthPHMmJihvPXRbYV0saT1RXyhpLG8uaG9zdEF0dHJzLHIpLG8hPT1uKTspYSsrO3JldHVybiBudWxsIT09biYmKGUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9YSksaX1mdW5jdGlvbiBRXyhuLHQsZSl7bGV0IGk9ZT8xOjIscj0tMTtpZihudWxsIT09dClmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTsibnVtYmVyIj09dHlwZW9mIHM/cj1zOnI9PT1pJiYoQXJyYXkuaXNBcnJheShuKXx8KG49dm9pZCAwPT09bj9bXTpbIiIsbl0pLHNhKG4scywhIWV8fHRbKytvXSkpfXJldHVybiB2b2lkIDA9PT1uP251bGw6bn1mdW5jdGlvbiBwVShuLHQsZSl7c2Eobix0LERzKGUpKX1mdW5jdGlvbiB4bGUobix0LGUpe2xldCBpPVN0cmluZyh0KTsiIiE9PWkmJiFpLmluY2x1ZGVzKCIgIikmJnNhKG4saSxlKX1mdW5jdGlvbiBmVShuLHQsZSxpLHIsbyxzLGEpe2lmKCEoMyZ0LnR5cGUpKXJldHVybjtsZXQgbD1uLmRhdGEsYz1sW2ErMV0sZD1mdW5jdGlvbihuKXtyZXR1cm4gMT09KDEmbil9KGMpP1JIKGwsdCxlLHIsWG0oYykscyk6dm9pZCAwO2dNKGQpfHwoZ00obyl8fGZ1bmN0aW9uKG4pe3JldHVybiAyPT0oMiZuKX0oYykmJihvPVJIKGwsbnVsbCxlLHIsYSxzKSksZnVuY3Rpb24obix0LGUsaSxyKXtpZih0KXI/bi5hZGRDbGFzcyhlLGkpOm4ucmVtb3ZlQ2xhc3MoZSxpKTtlbHNle2xldCBvPS0xPT09aS5pbmRleE9mKCItIik/dm9pZCAwOkFhLkRhc2hDYXNlO251bGw9PXI/bi5yZW1vdmVTdHlsZShlLGksbyk6KCJzdHJpbmciPT10eXBlb2YgciYmci5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYocj1yLnNsaWNlKDAsLTEwKSxvfD1BYS5JbXBvcnRhbnQpLG4uc2V0U3R5bGUoZSxpLHIsbykpfX0oaSxzLElNKHNzKCksZSkscixvKSl9ZnVuY3Rpb24gUkgobix0LGUsaSxyLG8pe2xldCBhLHM9bnVsbD09PXQ7Zm9yKDtyPjA7KXtsZXQgbD1uW3JdLGM9QXJyYXkuaXNBcnJheShsKSxkPWM/bFsxXTpsLHU9bnVsbD09PWQscD1lW3IrMV07cD09PUhuJiYocD11P1ZpOnZvaWQgMCk7bGV0IGY9dT9wUihwLGkpOmQ9PT1pP3A6dm9pZCAwO2lmKGMmJiFnTShmKSYmKGY9cFIobCxpKSksZ00oZikmJihhPWYscykpcmV0dXJuIGE7bGV0IG09bltyKzFdO3I9cz9XcChtKTpYbShtKX1pZihudWxsIT09dCl7bGV0IGw9bz90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO251bGwhPWwmJihhPXBSKGwsaSkpfXJldHVybiBhfWZ1bmN0aW9uIGdNKG4pe3JldHVybiB2b2lkIDAhPT1ufWZ1bmN0aW9uIG1VKG4sdCl7cmV0dXJuIDAhPShuLmZsYWdzJih0Pzg6MTYpKX1mdW5jdGlvbiBUKG4sdD0iIil7bGV0IGU9WmUoKSxpPUVpKCkscj1uK1dyLG89aS5maXJzdENyZWF0ZVBhc3M/b2goaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPXNPKGVbb2ldLHQpO09NKGksZSxzLG8pLGRjKG8sITEpfWZ1bmN0aW9uIGJ0KG4pe3JldHVybiBIZSgiIixuLCIiKSxidH1mdW5jdGlvbiBIZShuLHQsZSl7bGV0IGk9WmUoKSxyPWFoKGksbix0LGUpO3JldHVybiByIT09SG4mJmxkKGksc3MoKSxyKSxIZX1mdW5jdGlvbiBsdShuLHQsZSxpLHIpe2xldCBvPVplKCkscz1saChvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1IbiYmbGQobyxzcygpLHMpLGx1fWZ1bmN0aW9uIGpNKG4sdCxlLGkscixvLHMpe2xldCBhPVplKCksbD1jaChhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09SG4mJmxkKGEsc3MoKSxsKSxqTX1mdW5jdGlvbiBtYihuLHQsZSl7TWwoc2EsYmMsYWgoWmUoKSxuLHQsZSksITApfWZ1bmN0aW9uIGpvKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBVbyhpLGVoKCksdCkmJmFhKEVpKCksa3IoKSxpLG4sdCxpW29pXSxlLCEwKSxqb31mdW5jdGlvbiBHTShuLHQsZSl7bGV0IGk9WmUoKTtpZihVbyhpLGVoKCksdCkpe2xldCBvPUVpKCkscz1rcigpO2FhKG8scyxpLG4sdCxCeihYUChvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIEdNfXZhciBPcD12b2lkIDAsVWxlPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sT3BdLFtbIkFNIiwiUE0iXSxPcCxPcF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sT3AsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLE9wLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsT3AsInsxfSAnYXQnIHswfSIsT3BdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0seFI9e307ZnVuY3Rpb24gUnMobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1QSCh0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPVBIKGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIFVsZTt0aHJvdyBuZXcgeXQoNzAxLCExKX1mdW5jdGlvbiBQSChuKXtyZXR1cm4gbiBpbiB4Unx8KHhSW25dPVVyLm5nJiZVci5uZy5jb21tb24mJlVyLm5nLmNvbW1vbi5sb2NhbGVzJiZVci5uZy5jb21tb24ubG9jYWxlc1tuXSkseFJbbl19dmFyIGdyPSgoKT0+e3JldHVybihuPWdyfHwoZ3I9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixncjt2YXIgbn0pKCksR2xlPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgX009ImVuLVVTIixSVT17bWFya2VyOiJlbGVtZW50In0sUFU9e21hcmtlcjoiSUNVIn0sZ2w9KCgpPT57cmV0dXJuKG49Z2x8fChnbD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIsZ2w7dmFyIG59KSgpLE9VPV9NO2Z1bmN0aW9uIGtVKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP1g1KG4sMCxlKTpSYShlW3JdKX1mdW5jdGlvbiBGVShuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmLTE9PT10LmNvbXBvbmVudE9mZnNldClmb3IobGV0IGw9MTtsPG8ubGVuZ3RoO2wrKylVcChuLHMsZVtvW2xdXSxhLCExKX19ZnVuY3Rpb24gTlUobix0KXtpZihuLnB1c2godCksbi5sZW5ndGg+MSlmb3IobGV0IGU9bi5sZW5ndGgtMjtlPj0wO2UtLSl7bGV0IGk9bltlXTtMVShpKXx8UWxlKGksdCkmJm51bGw9PT1abGUoaSkmJktsZShpLHQuaW5kZXgpfX1mdW5jdGlvbiBMVShuKXtyZXR1cm4hKDY0Jm4udHlwZSl9ZnVuY3Rpb24gUWxlKG4sdCl7cmV0dXJuIExVKHQpfHxuLmluZGV4PnQuaW5kZXh9ZnVuY3Rpb24gWmxlKG4pe2xldCB0PW4uaW5zZXJ0QmVmb3JlSW5kZXg7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dFswXTp0fWZ1bmN0aW9uIEtsZShuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7QXJyYXkuaXNBcnJheShlKT9lWzBdPXQ6KFo1KGtVLEZVKSxuLmluc2VydEJlZm9yZUluZGV4PXQpfWZ1bmN0aW9uIEJfKG4sdCl7bGV0IGU9bi5kYXRhW3RdO3JldHVybiBudWxsPT09ZXx8InN0cmluZyI9PXR5cGVvZiBlP251bGw6ZS5oYXNPd25Qcm9wZXJ0eSgiY3VycmVudENhc2VMVmlld0luZGV4Iik/ZTplLnZhbHVlfWZ1bmN0aW9uIGVjZShuLHQsZSl7bGV0IGk9Z08obixlLDY0LG51bGwsbnVsbCk7cmV0dXJuIE5VKHQsaSksaX1mdW5jdGlvbiBXTShuLHQpe2xldCBlPXRbbi5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO3JldHVybiBudWxsPT09ZT9lOmU8MD9+ZTplfWZ1bmN0aW9uIHRjZShuKXtyZXR1cm4gbj4+PjE3fWZ1bmN0aW9uIG5jZShuKXtyZXR1cm4oMTMxMDcwJm4pPj4+MX12YXIgWl89MCxWXz0wO2Z1bmN0aW9uIEJVKG4sdCxlLGkpe2xldCBzLHI9ZVtvaV0sbz1udWxsO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtsZXQgbD10W2FdO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7bGV0IGM9dFsrK2FdO251bGw9PT1lW2NdJiYoZVtjXT1zTyhyLGwpKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgbClzd2l0Y2goMSZsKXtjYXNlIDA6bGV0IGQsdSxjPXRjZShsKTtpZihudWxsPT09byYmKG89YyxzPVBNKHIsaSkpLGM9PT1vPyhkPWksdT1zKTooZD1udWxsLHU9UmEoZVtjXSkpLG51bGwhPT11KXtsZXQgYj1uY2UobCk7VXAocix1LGVbYl0sZCwhMSk7bGV0IHk9Ql8obixiKTtpZihudWxsIT09eSYmIm9iamVjdCI9PXR5cGVvZiB5KXtsZXQgeD1XTSh5LGUpO251bGwhPT14JiZCVShuLHkuY3JlYXRlW3hdLGUsZVt5LmFuY2hvcklkeF0pfX1icmVhaztjYXNlIDE6bGV0IGY9dFsrK2FdLG09dFsrK2FdO01PKHIsSU0obD4+PjEsZSksbnVsbCxudWxsLGYsbSxudWxsKX1lbHNlIHN3aXRjaChsKXtjYXNlIFBVOmxldCBjPXRbKythXSxkPXRbKythXTtudWxsPT09ZVtkXSYmdWMoZVtkXT1qb2UocixjKSxlKTticmVhaztjYXNlIFJVOmxldCB1PXRbKythXSxwPXRbKythXTtudWxsPT09ZVtwXSYmdWMoZVtwXT1hTyhyLHUsbnVsbCksZSl9fX1mdW5jdGlvbiBWVShuLHQsZSxpLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dLGE9ZVsrK29dO2lmKHMmcil7bGV0IGw9IiI7Zm9yKGxldCBjPW8rMTtjPD1vK2E7YysrKXtsZXQgZD1lW2NdO2lmKCJzdHJpbmciPT10eXBlb2YgZClsKz1kO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBkKWlmKGQ8MClsKz1Vbih0W2ktZF0pO2Vsc2V7bGV0IHU9ZD4+PjI7c3dpdGNoKDMmZCl7Y2FzZSAxOmxldCBwPWVbKytjXSxmPWVbKytjXSxtPW4uZGF0YVt1XTsic3RyaW5nIj09dHlwZW9mIG0/TU8odFtvaV0sdFt1XSxudWxsLG0scCxsLGYpOmFhKG4sbSx0LHAsbCx0W29pXSxmLCExKTticmVhaztjYXNlIDA6bGV0IGI9dFt1XTtudWxsIT09YiYmejUodFtvaV0sYixsKTticmVhaztjYXNlIDI6YWNlKG4sQl8obix1KSx0LGwpO2JyZWFrO2Nhc2UgMzpPSChuLEJfKG4sdSksaSx0KX19fX1lbHNle2xldCBsPWVbbysxXTtpZihsPjAmJjM9PSgzJmwpKXtsZXQgZD1CXyhuLGw+Pj4yKTt0W2QuY3VycmVudENhc2VMVmlld0luZGV4XTwwJiZPSChuLGQsaSx0KX19bys9YX19ZnVuY3Rpb24gT0gobix0LGUsaSl7bGV0IHI9aVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF07aWYobnVsbCE9PXIpe2xldCBvPVpfO3I8MCYmKHI9aVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09fnIsbz0tMSksVlUobixpLHQudXBkYXRlW3JdLGUsbyl9fWZ1bmN0aW9uIGFjZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQpe2xldCBlPW4uY2FzZXMuaW5kZXhPZih0KTtpZigtMT09PWUpc3dpdGNoKG4udHlwZSl7Y2FzZSAxOntsZXQgaT1mdW5jdGlvbihuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiBScyhuKVtnci5QbHVyYWxDYXNlXX0odCkocGFyc2VJbnQobiwxMCkpLGk9R2xlW2VdO3JldHVybiB2b2lkIDAhPT1pP2k6Im90aGVyIn0odCxPVSk7ZT1uLmNhc2VzLmluZGV4T2YoaSksLTE9PT1lJiYib3RoZXIiIT09aSYmKGU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpKTticmVha31jYXNlIDA6ZT1uLmNhc2VzLmluZGV4T2YoIm90aGVyIil9cmV0dXJuLTE9PT1lP251bGw6ZX0odCxpKTtpZihXTSh0LGUpIT09ciYmKEhVKG4sdCxlKSxlW3QuY3VycmVudENhc2VMVmlld0luZGV4XT1udWxsPT09cj9udWxsOn5yLG51bGwhPT1yKSl7bGV0IHM9ZVt0LmFuY2hvcklkeF07cyYmQlUobix0LmNyZWF0ZVtyXSxlLHMpfX1mdW5jdGlvbiBIVShuLHQsZSl7bGV0IGk9V00odCxlKTtpZihudWxsIT09aSl7bGV0IHI9dC5yZW1vdmVbaV07Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107aWYocz4wKXtsZXQgYT1JTShzLGUpO251bGwhPT1hJiZsTyhlW29pXSxhKX1lbHNlIEhVKG4sQl8obix+cyksZSl9fX1mdW5jdGlvbiBjY2UoKXtsZXQgZSxpLG49W10sdD0tMTtmdW5jdGlvbiBvKGEsbCl7dD0wO2xldCBjPVdNKGEsbCk7aT1udWxsIT09Yz9hLnJlbW92ZVtjXTpWaX1mdW5jdGlvbiBzKCl7aWYodDxpLmxlbmd0aCl7bGV0IGE9aVt0KytdO3JldHVybiBhPjA/ZVthXToobi5wdXNoKHQsaSksbyhlW0ZuXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgYk09L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2ksZGNlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSx1Y2U9L1x1ZmZmZChcZCspXHVmZmZkLyx6VT0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sSF89Ilx1ZmZmZCIscGNlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxmY2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLG1jZT0vXHVFNTAwL2c7ZnVuY3Rpb24gVVUobix0LGUsaSxyLG8scyl7bGV0IGE9dWIobixpLDEsbnVsbCksbD1hPDxnbC5TSElGVCxjPXFfKCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9Z2wuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1nbC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PWpSJiYoalI9bigpKX0oY2NlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IGQ9Z08obixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO05VKGUsZCk7bGV0IHU9ZC5pbmRleDtyZXR1cm4gZGMoZCwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KFo1KGtVLEZVKSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmUUgoIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLHUpLGR9ZnVuY3Rpb24gX2NlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goYk0pLGw9VVUobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZ6XyhyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gel8obix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoYk0pLGQ9MDtmb3IobGV0IHU9MDt1PGMubGVuZ3RoO3UrKyl7bGV0IHA9Y1t1XTtpZigxJnUpe2xldCBmPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWYpLGR8PWpVKGYpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT1kLG5bYV09bi5sZW5ndGgtbCxkfWZ1bmN0aW9uIHZjZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24galUobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIGtIKG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1wY2UuZXhlYyhuKSk7KXI/dFswXT09PWAke0hffS8qJHtvfSR7SF99YCYmKGk9dC5pbmRleCxyPSExKTooZSs9bi5zdWJzdHJpbmcoaSx0LmluZGV4K3RbMF0ubGVuZ3RoKSxvPXRbMV0scj0hMCk7cmV0dXJuIGUrPW4uc2xpY2UoaSksZX1mdW5jdGlvbiBHVShuLHQsZSxpLHIsbyl7bGV0IHM9MCxhPXt0eXBlOnIudHlwZSxjdXJyZW50Q2FzZUxWaWV3SW5kZXg6dWIobix0LDEsbnVsbCksYW5jaG9ySWR4Om8sY2FzZXM6W10sY3JlYXRlOltdLHJlbW92ZTpbXSx1cGRhdGU6W119OyhmdW5jdGlvbihuLHQsZSl7bi5wdXNoKGpVKHQubWFpbkJpbmRpbmcpLDIsLTEtdC5tYWluQmluZGluZyxlPDwyfDIpfSkoZSxyLG8pLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmRhdGFbdF07bnVsbD09PWk/bi5kYXRhW3RdPWU6aS52YWx1ZT1lfShuLG8sYSk7bGV0IGw9ci52YWx1ZXM7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCBkPWxbY10sdT1bXTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGY9ZFtwXTtpZigic3RyaW5nIiE9dHlwZW9mIGYpe2xldCBtPXUucHVzaChmKS0xO2RbcF09YFx4M2MhLS1cdWZmZmQke219XHVmZmZkLS1ceDNlYH19cz1NY2UobixhLHQsZSxpLHIuY2FzZXNbY10sZC5qb2luKCIiKSx1KXxzfXMmJmZ1bmN0aW9uKG4sdCxlKXtuLnB1c2godCwxLGU8PDJ8Myl9KGUscyxvKX1mdW5jdGlvbiBDY2Uobil7bGV0IHQ9W10sZT1bXSxpPTEscj0wLG89dlAobj1uLnJlcGxhY2UoelUsZnVuY3Rpb24ocyxhLGwpe3JldHVybiBpPSJzZWxlY3QiPT09bD8wOjEscj1wYXJzZUludChhLnNsaWNlKDEpLDEwKSwiIn0pKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoOyl7bGV0IGE9b1tzKytdLnRyaW0oKTsxPT09aSYmKGE9YS5yZXBsYWNlKC9ccyooPzo9KT8oXHcrKVxzKi8sIiQxIikpLGEubGVuZ3RoJiZ0LnB1c2goYSk7bGV0IGw9dlAob1tzKytdKTt0Lmxlbmd0aD5lLmxlbmd0aCYmZS5wdXNoKGwpfXJldHVybnt0eXBlOmksbWFpbkJpbmRpbmc6cixjYXNlczp0LHZhbHVlczplfX1mdW5jdGlvbiB2UChuKXtpZighbilyZXR1cm5bXTtsZXQgbyx0PTAsZT1bXSxpPVtdLHI9L1t7fV0vZztmb3Ioci5sYXN0SW5kZXg9MDtvPXIuZXhlYyhuKTspe2xldCBhPW8uaW5kZXg7aWYoIn0iPT1vWzBdKXtpZihlLnBvcCgpLDA9PWUubGVuZ3RoKXtsZXQgbD1uLnN1YnN0cmluZyh0LGEpO3pVLnRlc3QobCk/aS5wdXNoKENjZShsKSk6aS5wdXNoKGwpLHQ9YSsxfX1lbHNle2lmKDA9PWUubGVuZ3RoKXtsZXQgbD1uLnN1YnN0cmluZyh0LGEpO2kucHVzaChsKSx0PWErMX1lLnB1c2goInsiKX19bGV0IHM9bi5zdWJzdHJpbmcodCk7cmV0dXJuIGkucHVzaChzKSxpfWZ1bmN0aW9uIE1jZShuLHQsZSxpLHIsbyxzLGEpe2xldCBsPVtdLGM9W10sZD1bXTt0LmNhc2VzLnB1c2gobyksdC5jcmVhdGUucHVzaChsKSx0LnJlbW92ZS5wdXNoKGMpLHQudXBkYXRlLnB1c2goZCk7bGV0IHA9Y3ooaXooKSkuZ2V0SW5lcnRCb2R5RWxlbWVudChzKSxmPWlQKHApfHxwO3JldHVybiBmP1dVKG4sdCxlLGksbCxjLGQsZixyLGEsMCk6MH1mdW5jdGlvbiBXVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQpe2xldCB1PTAscD1hLmZpcnN0Q2hpbGQ7Zm9yKDtwOyl7bGV0IGY9dWIobixlLDEsbnVsbCk7c3dpdGNoKHAubm9kZVR5cGUpe2Nhc2UgTm9kZS5FTEVNRU5UX05PREU6bGV0IG09cCxiPW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHRQLmhhc093blByb3BlcnR5KGIpKXtDUihyLFJVLGIsbCxmKSxuLmRhdGFbZl09YjtsZXQgUj1tLmF0dHJpYnV0ZXM7Zm9yKGxldCBBPTA7QTxSLmxlbmd0aDtBKyspe2xldCBWPVIuaXRlbShBKSx0ZT1WLm5hbWUudG9Mb3dlckNhc2UoKTtWLnZhbHVlLm1hdGNoKGJNKT9mei5oYXNPd25Qcm9wZXJ0eSh0ZSkmJnpfKHMsVi52YWx1ZSxmLFYubmFtZSwwLHVPW3RlXT9sYjpudWxsKTpUY2UocixmLFYpfXU9V1Uobix0LGUsaSxyLG8scyxwLGYsYyxkKzEpfHUsRkgobyxmLGQpfWJyZWFrO2Nhc2UgTm9kZS5URVhUX05PREU6bGV0IE09cC50ZXh0Q29udGVudHx8IiIseT1NLm1hdGNoKGJNKTtDUihyLG51bGwseT8iIjpNLGwsZiksRkgobyxmLGQpLHkmJih1PXpfKHMsTSxmLG51bGwsMCxudWxsKXx1KTticmVhaztjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOmxldCB4PXVjZS5leGVjKHAudGV4dENvbnRlbnR8fCIiKTtpZih4KXtsZXQgQT1jW3BhcnNlSW50KHhbMV0sMTApXTtDUihyLFBVLCIiLGwsZiksR1UobixlLGksbCxBLGYpLHdjZShvLGYsZCl9fXA9cC5uZXh0U2libGluZ31yZXR1cm4gdX1mdW5jdGlvbiBGSChuLHQsZSl7MD09PWUmJm4ucHVzaCh0KX1mdW5jdGlvbiB3Y2Uobix0LGUpezA9PT1lJiYobi5wdXNoKH50KSxuLnB1c2godCkpfWZ1bmN0aW9uIENSKG4sdCxlLGkscil7bnVsbCE9PXQmJm4ucHVzaCh0KSxuLnB1c2goZSxyLGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMHx0PDwxN3xlPDwxfSgwLGkscikpfWZ1bmN0aW9uIFRjZShuLHQsZSl7bi5wdXNoKHQ8PDF8MSxlLm5hbWUsZS52YWx1ZSl9dmFyIE5IPTAsRGNlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxJY2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxBY2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxSY2U9L3soW0EtWjAtOV9dKyl9L2csUGNlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxPY2U9L1wvXCovLGtjZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gcVUobix0LGU9LTEpe2xldCBpPUVpKCkscj1aZSgpLG89V3IrbixzPWl1KGkuY29uc3RzLHQpLGE9cV8oKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPXFfKCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4ga0gobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH0ke0hffWApKzIrdC50b1N0cmluZygpLmxlbmd0aCxpPW4uc2VhcmNoKG5ldyBSZWdFeHAoYCR7SF99XFwvXFwqXFxkKzoke3R9JHtIX31gKSk7cmV0dXJuIGtIKG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgZD1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKG1jZSwiICIpfShyKS5zcGxpdChmY2UpO2ZvcihsZXQgdT0wO3U8ZC5sZW5ndGg7dSsrKXtsZXQgcD1kW3VdO2lmKDA9PSgxJnUpKXtsZXQgZj12UChwKTtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rKyl7bGV0IGI9ZlttXTtpZigwPT0oMSZtKSkiIiE9PWImJl9jZShuLHMsY1swXSxhLGwsZSxiKTtlbHNle2xldCBNPWI7aWYoIm9iamVjdCIhPXR5cGVvZiBNKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO0dVKG4sZSxsLHQsTSxVVShuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGY9NDc9PT1wLmNoYXJDb2RlQXQoMCksYj0ocC5jaGFyQ29kZUF0KGY/MTowKSxXcitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoZj8yOjEpKSk7aWYoZiljLnNoaWZ0KCksZGMocV8oKSwhMSk7ZWxzZXtsZXQgTT1lY2UobixjWzBdLGIpO2MudW5zaGlmdChbXSksZGMoTSwhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLGQ9VzUoaSxhPT09cltTc10/bnVsbDphLHIpOyhmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW29pXTtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvKytdLGE9dFtvXSxjPShzJmdsLkFQUEVORF9FQUdFUkxZKT09PWdsLkFQUEVORF9FQUdFUkxZLGQ9cz4+PmdsLlNISUZULHU9bltkXTtudWxsPT09dSYmKHU9bltkXT0ocyZnbC5DT01NRU5UKT09PWdsLkNPTU1FTlQ/ci5jcmVhdGVDb21tZW50KGEpOnNPKHIsYSkpLGMmJm51bGwhPT1lJiZVcChyLGUsdSxpLCExKX19KShyLGwuY3JlYXRlLGQsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxoNSghMCl9ZnVuY3Rpb24gWVUoKXtoNSghMSl9ZnVuY3Rpb24gcU0obix0LGUpe3FVKG4sdCxlKSxZVSgpfWZ1bmN0aW9uIGhiKG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYoWl98PTE8PE1hdGgubWluKFZfLDMxKSksVl8rK30oVW8oWmUoKSxlaCgpLG4pKSxoYn1mdW5jdGlvbiBZTShuKXshZnVuY3Rpb24obix0LGUpe2lmKFZfPjApe2xldCBpPW4uZGF0YVtlXTtWVShuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLHJkKCktVl8tMSxaXyl9Wl89MCxWXz0wfShFaSgpLFplKCksbitXcil9ZnVuY3Rpb24gWE0obix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKERjZS50ZXN0KG4pKXtsZXQgaT17fSxyPVtOSF07ZT1lLnJlcGxhY2UoSWNlLChvLHMsYSk9PntsZXQgbD1zfHxhLGM9aVtsXXx8W107aWYoYy5sZW5ndGh8fChsLnNwbGl0KCJ8IikuZm9yRWFjaChiPT57bGV0IE09Yi5tYXRjaChrY2UpLHk9TT9wYXJzZUludChNWzFdLDEwKTpOSCx4PU9jZS50ZXN0KGIpO2MucHVzaChbeSx4LGJdKX0pLGlbbF09YyksIWMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIHBsYWNlaG9sZGVyIC0gJHtsfWApO2xldCBkPXJbci5sZW5ndGgtMV0sdT0wO2ZvcihsZXQgYj0wO2I8Yy5sZW5ndGg7YisrKWlmKGNbYl1bMF09PT1kKXt1PWI7YnJlYWt9bGV0W3AsZixtXT1jW3VdO3JldHVybiBmP3IucG9wKCk6ZCE9PXAmJnIucHVzaChwKSxjLnNwbGljZSh1LDEpLG19KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoJiYoZT1lLnJlcGxhY2UoQWNlLChpLHIsbyxzLGEsbCk9PnQuaGFzT3duUHJvcGVydHkobyk/YCR7cn0ke3Rbb119JHtsfWA6aSksZT1lLnJlcGxhY2UoUmNlLChpLHIpPT50Lmhhc093blByb3BlcnR5KHIpP3Rbcl06aSksZT1lLnJlcGxhY2UoUGNlLChpLHIpPT57aWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG89dFtyXTtpZighby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBpMThuIHBvc3Rwcm9jZXNzOiB1bm1hdGNoZWQgSUNVIC0gJHtpfSB3aXRoIGtleTogJHtyfWApO3JldHVybiBvLnNoaWZ0KCl9cmV0dXJuIGl9KSksZX0obix0KX1mdW5jdGlvbiB5UChuLHQsZSxpLHIpe2lmKG49UmkobiksQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IG89MDtvPG4ubGVuZ3RoO28rKyl5UChuW29dLHQsZSxpLHIpO2Vsc2V7bGV0IG89RWkoKSxzPVplKCksYT1ZbShuKT9uOlJpKG4ucHJvdmlkZSksbD15eihuKSxjPVBvKCksZD0xMDQ4NTc1JmMucHJvdmlkZXJJbmRleGVzLHU9Yy5kaXJlY3RpdmVTdGFydCxwPWMucHJvdmlkZXJJbmRleGVzPj4yMDtpZihZbShuKXx8IW4ubXVsdGkpe2xldCBmPW5ldyBIcChsLHIsQyksbT13UihhLHQscj9kOmQrcCx1KTstMT09PW0/KEhSKGxNKGMscyksbyxhKSxNUihvLG4sdC5sZW5ndGgpLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChmKSxzLnB1c2goZikpOihlW21dPWYsc1ttXT1mKX1lbHNle2xldCBmPXdSKGEsdCxkK3AsdSksbT13UihhLHQsZCxkK3ApLE09bT49MCYmZVttXTtpZihyJiYhTXx8IXImJiEoZj49MCYmZVtmXSkpe0hSKGxNKGMscyksbyxhKTtsZXQgeT1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBIcChuLGUsQyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsWFUobyxyLGkmJiFlKSxvfShyP1ZjZTpCY2UsZS5sZW5ndGgscixpLGwpOyFyJiZNJiYoZVttXS5wcm92aWRlckZhY3Rvcnk9eSksTVIobyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaCh5KSxzLnB1c2goeSl9ZWxzZSBNUihvLG4sZj4tMT9mOm0sWFUoZVtyP206Zl0sbCwhciYmaSkpOyFyJiZpJiZNJiZlW21dLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gTVIobix0LGUsaSl7bGV0IHI9WW0odCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP1JpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IGQ9Yy5pbmRleE9mKGUpOy0xPT09ZD9jLnB1c2goZSxbaSxsXSk6Y1tkKzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gWFUobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIHdSKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gQmNlKG4sdCxlLGkpe3JldHVybiB4UCh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBWY2Uobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT16cChlLGVbRm5dLHRoaXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGkpO289YS5zbGljZSgwLHMpLHhQKHIsbyk7Zm9yKGxldCBsPXM7bDxhLmxlbmd0aDtsKyspby5wdXNoKGFbbF0pfWVsc2Ugbz1bXSx4UChyLG8pO3JldHVybiBvfWZ1bmN0aW9uIHhQKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspdC5wdXNoKCgwLG5bZV0pKCkpO3JldHVybiB0fWZ1bmN0aW9uIFF0KG4sdD1bXSl7cmV0dXJuIGU9PntlLnByb3ZpZGVyc1Jlc29sdmVyPShpLHIpPT5mdW5jdGlvbihuLHQsZSl7bGV0IGk9RWkoKTtpZihpLmZpcnN0Q3JlYXRlUGFzcyl7bGV0IHI9dmwobik7eVAoZSxpLmRhdGEsaS5ibHVlcHJpbnQsciwhMCkseVAodCxpLmRhdGEsaS5ibHVlcHJpbnQsciwhMSl9fShpLHI/cihuKTpuLHQpfX12YXIgcnU9Y2xhc3N7fSxDUD1jbGFzc3t9LE1QPWNsYXNzIGV4dGVuZHMgcnV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10sdGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBtTSh0aGlzKTtsZXQgaT1HbSh0KTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVhDKGkuYm9vdHN0cmFwKSx0aGlzLl9yM0luamVjdG9yPVR6KHQsZSxbe3Byb3ZpZGU6cnUsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6Zm8sdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxwbyh0KSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLHRoaXMuX3IzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldCh0KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fcjNJbmplY3RvcjshdC5kZXN0cm95ZWQmJnQuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGU9PmUoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KHQpe3RoaXMuZGVzdHJveUNicy5wdXNoKHQpfX0sd1A9Y2xhc3MgZXh0ZW5kcyBDUHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT10fWNyZWF0ZSh0KXtyZXR1cm4gbmV3IE1QKHRoaXMubW9kdWxlVHlwZSx0KX19LFNQPWNsYXNzIGV4dGVuZHMgcnV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IG1NKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtsZXQgcj1uZXcgdU0oWy4uLnQse3Byb3ZpZGU6cnUsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6Zm8sdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxlfHxoTygpLGksbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPXIsci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KHQpfX0sVWNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5faW5qZWN0b3I9ZSx0aGlzLmNhY2hlZEluamVjdG9ycz1uZXcgTWFwfWdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGUpe2lmKCFlLnN0YW5kYWxvbmUpcmV0dXJuIG51bGw7aWYoIXRoaXMuY2FjaGVkSW5qZWN0b3JzLmhhcyhlLmlkKSl7bGV0IGk9X3ooMCxlLnR5cGUpLHI9aS5sZW5ndGg+MD9mdW5jdGlvbihuLHQsZT1udWxsKXtyZXR1cm4gbmV3IFNQKG4sdCxlKS5pbmplY3Rvcn0oW2ldLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7ZS50eXBlLm5hbWV9XWApOm51bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGUuaWQscil9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChlLmlkKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IobGV0IGUgb2YgdGhpcy5jYWNoZWRJbmplY3RvcnMudmFsdWVzKCkpbnVsbCE9PWUmJmUuZGVzdHJveSgpfWZpbmFsbHl7dGhpcy5jYWNoZWRJbmplY3RvcnMuY2xlYXIoKX19fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBuKGsocGMpKX0pLG59KSgpO2Z1bmN0aW9uIElPKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KFVjZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9ZnVuY3Rpb24gY3Uobix0LGUpe2xldCBpPW9zKCkrbixyPVplKCk7cmV0dXJuIHJbaV09PT1Ibj9fYyhyLGksZT90LmNhbGwoZSk6dCgpKTpwYihyLGkpfWZ1bmN0aW9uIEluKG4sdCxlLGkpe3JldHVybiBRVShaZSgpLG9zKCksbix0LGUsaSl9ZnVuY3Rpb24gcXIobix0LGUsaSxyKXtyZXR1cm4gWlUoWmUoKSxvcygpLG4sdCxlLGkscil9ZnVuY3Rpb24gZ2Iobix0LGUsaSxyLG8pe3JldHVybiBLVShaZSgpLG9zKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIEFPKG4sdCxlLGkscixvLHMpe3JldHVybiBKVShaZSgpLG9zKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gUk8obix0LGUsaSxyLG8scyxhKXtsZXQgbD1vcygpK24sYz1aZSgpLGQ9UGEoYyxsLGUsaSxyLG8pO3JldHVybiBVbyhjLGwrNCxzKXx8ZD9fYyhjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpwYihjLGwrNSl9ZnVuY3Rpb24gX2Iobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09SG4/dm9pZCAwOmV9ZnVuY3Rpb24gUVUobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gVW8obixzLHIpP19jKG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6X2IobixzKzEpfWZ1bmN0aW9uIFpVKG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gR3AobixhLHIsbyk/X2MobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6X2IobixhKzIpfWZ1bmN0aW9uIEtVKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBITShuLGwscixvLHMpP19jKG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpfYihuLGwrMyl9ZnVuY3Rpb24gSlUobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gUGEobixjLHIsbyxzLGEpP19jKG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6X2IobixjKzQpfWZ1bmN0aW9uICRVKG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylVbyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP19jKG4scyxpLmFwcGx5KG8scikpOl9iKG4scyl9ZnVuY3Rpb24gaihuLHQpe2xldCBpLGU9RWkoKSxyPW4rV3I7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzPz8oZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9QnAoaS50eXBlKSkscz1FYShDKTt0cnl7bGV0IGE9YU0oITEpLGw9bygpO3JldHVybiBhTShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLFplKCkscixsKSxsfWZpbmFsbHl7RWEocyl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rV3Iscj1aZSgpLG89JG0ocixpKTtyZXR1cm4gYmIocixpKT9RVShyLG9zKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIHFwKG4sdCxlLGkpe2xldCByPW4rV3Isbz1aZSgpLHM9JG0obyxyKTtyZXR1cm4gYmIobyxyKT9aVShvLG9zKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBQTyhuLHQsZSxpLHIpe2xldCBvPW4rV3Iscz1aZSgpLGE9JG0ocyxvKTtyZXR1cm4gYmIocyxvKT9LVShzLG9zKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gYmIobix0KXtyZXR1cm4gbltGbl0uZGF0YVt0XS5wdXJlfWZ1bmN0aW9uIFNSKG4pe3JldHVybiB0PT57c2V0VGltZW91dChuLHZvaWQgMCx0KX19dmFyIEY9Y2xhc3MgZXh0ZW5kcyBJZXtjb25zdHJ1Y3Rvcih0PSExKXtzdXBlcigpLHRoaXMuX19pc0FzeW5jPXR9ZW1pdCh0KXtzdXBlci5uZXh0KHQpfXN1YnNjcmliZSh0LGUsaSl7bGV0IHI9dCxvPWV8fCgoKT0+bnVsbCkscz1pO2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdCl7bGV0IGw9dDtyPWwubmV4dD8uYmluZChsKSxvPWwuZXJyb3I/LmJpbmQobCkscz1sLmNvbXBsZXRlPy5iaW5kKGwpfXRoaXMuX19pc0FzeW5jJiYobz1TUihvKSxyJiYocj1TUihyKSkscyYmKHM9U1IocykpKTtsZXQgYT1zdXBlci5zdWJzY3JpYmUoe25leHQ6cixlcnJvcjpvLGNvbXBsZXRlOnN9KTtyZXR1cm4gdCBpbnN0YW5jZW9mIE1uJiZ0LmFkZChhKSxhfX07ZnVuY3Rpb24gWmNlKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbU3ltYm9sLml0ZXJhdG9yXSgpfXZhciBPYT1jbGFzc3tnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzfHwodGhpcy5fY2hhbmdlcz1uZXcgRil9Y29uc3RydWN0b3IodD0hMSl7dGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk9dCx0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fY2hhbmdlc0RldGVjdGVkPSExLHRoaXMuX2NoYW5nZXM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMubGFzdD12b2lkIDA7bGV0IGU9T2EucHJvdG90eXBlO2VbU3ltYm9sLml0ZXJhdG9yXXx8KGVbU3ltYm9sLml0ZXJhdG9yXT1aY2UpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9JGQodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189JGNlLG59KSgpLEtjZT1TaSxKY2U9Y2xhc3MgZXh0ZW5kcyBLY2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50VmlldyxyPUxNKHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsaSx0LDE2LG51bGwsaS5kZWNsVE5vZGUsbnVsbCxudWxsLG51bGwsbnVsbCxlfHxudWxsKTtyW3JiXT10aGlzLl9kZWNsYXJhdGlvbkxWaWV3W3RoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci5pbmRleF07bGV0IHM9dGhpcy5fZGVjbGFyYXRpb25MVmlld1tjY107cmV0dXJuIG51bGwhPT1zJiYocltjY109cy5jcmVhdGVFbWJlZGRlZFZpZXcoaSkpLF9PKGkscix0KSxuZXcganAocil9fTtmdW5jdGlvbiAkY2UoKXtyZXR1cm4gUU0oUG8oKSxaZSgpKX1mdW5jdGlvbiBRTShuLHQpe3JldHVybiA0Jm4udHlwZT9uZXcgSmNlKHQsbixyaChuLHQpKTpudWxsfXZhciBzaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz1lZGUsbn0pKCk7ZnVuY3Rpb24gZWRlKCl7cmV0dXJuIHRqKFBvKCksWmUoKSl9dmFyIHRkZT1zaSxlaj1jbGFzcyBleHRlbmRzIHRkZXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPXQsdGhpcy5faG9zdFROb2RlPWUsdGhpcy5faG9zdExWaWV3PWl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gcmgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBMcCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtsZXQgdD1KUCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KTtpZih3NSh0KSl7bGV0IGU9c00odCx0aGlzLl9ob3N0TFZpZXcpLGk9b00odCk7cmV0dXJuIG5ldyBMcChlW0ZuXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBMcChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1MSCh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC13c31jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiFSXyh0KTtpZihzKWE9ZTtlbHNle2xldCB1PWV8fHt9O2E9dS5pbmRleCxpPXUuaW5qZWN0b3Iscj11LnByb2plY3RhYmxlTm9kZXMsbz11LmVudmlyb25tZW50SW5qZWN0b3J8fHUubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyBoTShEYSh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChwYyxudWxsKTtwJiYobz1wKX1sZXQgZD1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydChkLmhvc3RWaWV3LGEpLGR9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pW0ZuXTtpZihuZChpW0dyXSkpe2xldCBkPXRoaXMuaW5kZXhPZih0KTtpZigtMSE9PWQpdGhpcy5kZXRhY2goZCk7ZWxzZXtsZXQgdT1pW0dyXSxwPW5ldyBlaih1LHVbU3NdLHVbR3JdKTtwLmRldGFjaChwLmluZGV4T2YodCkpfX1sZXQgbz10aGlzLl9hZGp1c3RJbmRleChlKSxzPXRoaXMuX2xDb250YWluZXI7IWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPXdzK2ksbz1lLmxlbmd0aDtpPjAmJihlW3ItMV1bX2xdPXQpLGk8by13cz8odFtfbF09ZVtyXSxrNShlLHdzK2ksdCkpOihlLnB1c2godCksdFtfbF09bnVsbCksdFtHcl09ZTtsZXQgcz10W3JiXTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bltXbV07dFtibF0hPT10W0dyXVtHcl1bYmxdJiYobltyNV09ITApLG51bGw9PT1lP25bV21dPVt0XTplLnB1c2godCl9KHMsdCk7bGV0IGE9dFtjY107bnVsbCE9PWEmJmEuaW5zZXJ0VmlldyhuKSx0W3JpXXw9NjR9KHIsaSxzLG8pO2xldCBhPXFSKG8scyksbD1pW29pXSxjPVBNKGwsc1tqUF0pO3JldHVybiBudWxsIT09YyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2lbc3VdPXIsaVtTc109dCxhYihuLGksZSwxLHIsbyl9KHIsc1tTc10sbCxpLGMsYSksdC5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKSxrNShFUihzKSxvLHQpLHR9bW92ZSh0LGUpe3JldHVybiB0aGlzLmluc2VydCh0LGUpfWluZGV4T2YodCl7bGV0IGU9TEgodGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1lP2UuaW5kZXhPZih0KTotMX1yZW1vdmUodCl7bGV0IGU9dGhpcy5fYWRqdXN0SW5kZXgodCwtMSksaT1HUih0aGlzLl9sQ29udGFpbmVyLGUpO2kmJihjTShFUih0aGlzLl9sQ29udGFpbmVyKSxlKSxqNShpW0ZuXSxpKSl9ZGV0YWNoKHQpe2xldCBlPXRoaXMuX2FkanVzdEluZGV4KHQsLTEpLGk9R1IodGhpcy5fbENvbnRhaW5lcixlKTtyZXR1cm4gaSYmbnVsbCE9Y00oRVIodGhpcy5fbENvbnRhaW5lciksZSk/bmV3IGpwKGkpOm51bGx9X2FkanVzdEluZGV4KHQsZT0wKXtyZXR1cm4gdD8/dGhpcy5sZW5ndGgrZX19O2Z1bmN0aW9uIExIKG4pe3JldHVybiBuW2lNXX1mdW5jdGlvbiBFUihuKXtyZXR1cm4gbltpTV18fChuW2lNXT1bXSl9ZnVuY3Rpb24gdGoobix0KXtsZXQgZSxpPXRbbi5pbmRleF07aWYobmQoaSkpZT1pO2Vsc2V7bGV0IHI7aWYoOCZuLnR5cGUpcj1SYShpKTtlbHNle2xldCBvPXRbb2ldO3I9by5jcmVhdGVDb21tZW50KCIiKTtsZXQgcz1vYShuLHQpO1VwKG8sUE0obyxzKSxyLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ubmV4dFNpYmxpbmcodCl9KG8scyksITEpfXRbbi5pbmRleF09ZT1reihpLHQscixuKSxWTSh0LGUpfXJldHVybiBuZXcgZWooZSxuLHQpfXZhciBLXz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnF1ZXJ5TGlzdD10LHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBLXyh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX0sSl89Y2xhc3N7Y29uc3RydWN0b3IodD1bXSl7dGhpcy5xdWVyaWVzPXR9Y3JlYXRlRW1iZWRkZWRWaWV3KHQpe2xldCBlPXQucXVlcmllcztpZihudWxsIT09ZSl7bGV0IGk9bnVsbCE9PXQuY29udGVudFF1ZXJpZXM/dC5jb250ZW50UXVlcmllc1swXTplLmxlbmd0aCxyPVtdO2ZvcihsZXQgbz0wO288aTtvKyspe2xldCBzPWUuZ2V0QnlJbmRleChvKTtyLnB1c2godGhpcy5xdWVyaWVzW3MuaW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBKXyhyKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KHQpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXModCl9ZGV0YWNoVmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspbnVsbCE9PW9qKHQsZSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2VdLnNldERpcnR5KCl9fSx2TT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMuZmxhZ3M9ZSx0aGlzLnJlYWQ9aX19LCRfPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWVsZW1lbnRTdGFydCh0LGUpe2ZvcihsZXQgaT0wO2k8dGhpcy5xdWVyaWVzLmxlbmd0aDtpKyspdGhpcy5xdWVyaWVzW2ldLmVsZW1lbnRTdGFydCh0LGUpfWVsZW1lbnRFbmQodCl7Zm9yKGxldCBlPTA7ZTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2UrKyl0aGlzLnF1ZXJpZXNbZV0uZWxlbWVudEVuZCh0KX1lbWJlZGRlZFRWaWV3KHQpe2xldCBlPW51bGw7Zm9yKGxldCBpPTA7aTx0aGlzLmxlbmd0aDtpKyspe2xldCByPW51bGwhPT1lP2UubGVuZ3RoOjAsbz10aGlzLmdldEJ5SW5kZXgoaSkuZW1iZWRkZWRUVmlldyh0LHIpO28mJihvLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9aSxudWxsIT09ZT9lLnB1c2gobyk6ZT1bb10pfXJldHVybiBudWxsIT09ZT9uZXcgJF8oZSk6bnVsbH10ZW1wbGF0ZSh0LGUpe2ZvcihsZXQgaT0wO2k8dGhpcy5xdWVyaWVzLmxlbmd0aDtpKyspdGhpcy5xdWVyaWVzW2ldLnRlbXBsYXRlKHQsZSl9Z2V0QnlJbmRleCh0KXtyZXR1cm4gdGhpcy5xdWVyaWVzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayh0KXt0aGlzLnF1ZXJpZXMucHVzaCh0KX19LGViPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0tMSl7dGhpcy5tZXRhZGF0YT10LHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PWV9ZWxlbWVudFN0YXJ0KHQsZSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGUpJiZ0aGlzLm1hdGNoVE5vZGUodCxlKX1lbGVtZW50RW5kKHQpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09dC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1wbGF0ZSh0LGUpe3RoaXMuZWxlbWVudFN0YXJ0KHQsZSl9ZW1iZWRkZWRUVmlldyh0LGUpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUodCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtdC5pbmRleCxlKSxuZXcgZWIodGhpcy5tZXRhZGF0YSkpOm51bGx9aXNBcHBseWluZ1RvTm9kZSh0KXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2xldCBlPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4LGk9dC5wYXJlbnQ7Zm9yKDtudWxsIT09aSYmOCZpLnR5cGUmJmkuaW5kZXghPT1lOylpPWkucGFyZW50O3JldHVybiBlPT09KG51bGwhPT1pP2kuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKHQsZSl7bGV0IGk9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTt0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsbmRlKGUsbykpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxXQyhlLHQsbywhMSwhMSkpfWVsc2UgaT09PVNpPzQmZS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKHQsZSxXQyhlLHQsaSwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsaSl7aWYobnVsbCE9PWkpe2xldCByPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09cilpZihyPT09TWV8fHI9PT1zaXx8cj09PVNpJiY0JmUudHlwZSl0aGlzLmFkZE1hdGNoKGUuaW5kZXgsLTIpO2Vsc2V7bGV0IG89V0MoZSx0LHIsITEsITEpO251bGwhPT1vJiZ0aGlzLmFkZE1hdGNoKGUuaW5kZXgsbyl9ZWxzZSB0aGlzLmFkZE1hdGNoKGUuaW5kZXgsaSl9fWFkZE1hdGNoKHQsZSl7bnVsbD09PXRoaXMubWF0Y2hlcz90aGlzLm1hdGNoZXM9W3QsZV06dGhpcy5tYXRjaGVzLnB1c2godCxlKX19O2Z1bmN0aW9uIG5kZShuLHQpe2xldCBlPW4ubG9jYWxOYW1lcztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpaWYoZVtpXT09PXQpcmV0dXJuIGVbaSsxXTtyZXR1cm4gbnVsbH1mdW5jdGlvbiByZGUobix0LGUsaSl7cmV0dXJuLTE9PT1lP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDExJm4udHlwZT9yaChuLHQpOjQmbi50eXBlP1FNKG4sdCk6bnVsbH0odCxuKTotMj09PWU/ZnVuY3Rpb24obix0LGUpe3JldHVybiBlPT09TWU/cmgodCxuKTplPT09U2k/UU0odCxuKTplPT09c2k/dGoodCxuKTp2b2lkIDB9KG4sdCxpKTp6cChuLG5bRm5dLGUsdCl9ZnVuY3Rpb24gbmoobix0LGUsaSl7bGV0IHI9dFtjY10ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOnJkZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gVFAobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPW5qKG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sZD10Wy1sXTtmb3IobGV0IHU9d3M7dTxkLmxlbmd0aDt1Kyspe2xldCBwPWRbdV07cFtyYl09PT1wW0dyXSYmVFAocFtGbl0scCxjLGkpfWlmKG51bGwhPT1kW1dtXSl7bGV0IHU9ZFtXbV07Zm9yKGxldCBwPTA7cDx1Lmxlbmd0aDtwKyspe2xldCBmPXVbcF07VFAoZltGbl0sZixjLGkpfX19fX1yZXR1cm4gaX1mdW5jdGlvbiBTZShuKXtsZXQgdD1aZSgpLGU9RWkoKSxpPWc1KCk7UVAoaSsxKTtsZXQgcj1vaihlLGkpO2lmKG4uZGlydHkmJmZ1bmN0aW9uKG4pe3JldHVybiA0PT0oNCZuW3JpXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/VFAoZSx0LGksW10pOm5qKGUsdCxyLGkpO24ucmVzZXQobyxCc2UpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gR2Uobix0LGUpe2xldCBpPUVpKCk7aS5maXJzdENyZWF0ZVBhc3MmJihyaihpLG5ldyB2TShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLGlqKGksWmUoKSx0KX1mdW5jdGlvbiBUaShuLHQsZSxpKXtsZXQgcj1FaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1QbygpO3JqKHIsbmV3IHZNKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9aWoocixaZSgpLGUpfWZ1bmN0aW9uIEVlKCl7cmV0dXJuIG49WmUoKSx0PWc1KCksbltjY10ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBpaihuLHQsZSl7bGV0IGk9bmV3IE9hKDQ9PSg0JmUpKTtSeihuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10W2NjXSYmKHRbY2NdPW5ldyBKXyksdFtjY10ucXVlcmllcy5wdXNoKG5ldyBLXyhpKSl9ZnVuY3Rpb24gcmoobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3ICRfKSxuLnF1ZXJpZXMudHJhY2sobmV3IGViKHQsZSkpfWZ1bmN0aW9uIG9qKG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIFd0KG4sdCl7cmV0dXJuIFFNKG4sdCl9dmFyIGV1PXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjpCZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBqeihuLHQsZSxpLHIsbyl7bGV0IHM9WmUoKSxhPWFoKHMsdCxlLGkpO3JldHVybiBhIT09SG4mJmdjKGtyKCkscyxuLGEscixvKSxqen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gR3oobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9bGgobCx0LGUsaSxyLG8pO3JldHVybiBjIT09SG4mJmdjKGtyKCksbCxuLGMscyxhKSxHen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gV3oobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IGQ9WmUoKSx1PWNoKGQsdCxlLGkscixvLHMsYSk7cmV0dXJuIHUhPT1IbiYmZ2Moa3IoKSxkLG4sdSxsLGMpLFd6fSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBxeihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSl7bGV0IHA9WmUoKSxmPWRoKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBmIT09SG4mJmdjKGtyKCkscCxuLGYsZCx1KSxxen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gWXoobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmKXtsZXQgbT1aZSgpLGI9dWgobSx0LGUsaSxyLG8scyxhLGwsYyxkLHUpO3JldHVybiBiIT09SG4mJmdjKGtyKCksbSxuLGIscCxmKSxZen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gWHoobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYil7bGV0IE09WmUoKSx5PXBoKE0sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZik7cmV0dXJuIHkhPT1IbiYmZ2Moa3IoKSxNLG4seSxtLGIpLFh6fSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBReihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSl7bGV0IHg9WmUoKSxSPWZoKHgsdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIpO3JldHVybiBSIT09SG4mJmdjKGtyKCkseCxuLFIsTSx5KSxRen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gWnoobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNLHkseCxSKXtsZXQgQT1aZSgpLFY9bWgoQSx0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNLHkpO3JldHVybiBWIT09SG4mJmdjKGtyKCksQSxuLFYseCxSKSxaen0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gS3oobix0LGUsaSl7bGV0IHI9WmUoKSxvPXNoKHIsdCk7cmV0dXJuIG8hPT1IbiYmZ2Moa3IoKSxyLG4sbyxlLGkpLEt6fSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjpPLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOndlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp1ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjpHLCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpLbSwiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0IjpDLCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpYbiwiXHUwMjc1XHUwMjc1aW5qZWN0IjprLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOnlvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6SXMsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpKSCwiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOld0LCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOlEsIlx1MDI3NVx1MDI3NUhvc3REaXJlY3RpdmVzRmVhdHVyZSI6ZnVuY3Rpb24obil7cmV0dXJuIHQ9Pnt0LmZpbmRIb3N0RGlyZWN0aXZlRGVmcz16eix0Lmhvc3REaXJlY3RpdmVzPShBcnJheS5pc0FycmF5KG4pP246bigpKS5tYXAoZT0+ImZ1bmN0aW9uIj09dHlwZW9mIGU/e2RpcmVjdGl2ZTpSaShlKSxpbnB1dHM6JGMsb3V0cHV0czokY306e2RpcmVjdGl2ZTpSaShlLmRpcmVjdGl2ZSksaW5wdXRzOlNIKGUuaW5wdXRzKSxvdXRwdXRzOlNIKGUub3V0cHV0cyl9KX19LCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOkd0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjpRdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PUh6KG4udHlwZSk7ZT12bChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiBXYWUpaVtyXT1lW3JdO2lmKHZsKGUpKWZvcihsZXQgciBvZiBxYWUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjpLZSwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOklPLCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6dywiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6T28sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtqbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT1jNX0sIlx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyI6Tm4sIlx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIjpmdW5jdGlvbigpe2puLmJpbmRpbmdzRW5hYmxlZD0hMH0sIlx1MDI3NVx1MDI3NWRpc2FibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtqbi5iaW5kaW5nc0VuYWJsZWQ9ITF9LCJcdTAyNzVcdTAyNzVlbGVtZW50U3RhcnQiOmgsIlx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiOmcsIlx1MDI3NVx1MDI3NWVsZW1lbnQiOlAsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCI6T3QsIlx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJFbmQiOmt0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyIjpsaSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCI6Y3UsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjEiOkluLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24yIjpxciwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyI6Z2IsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjQiOkFPLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb241IjpSTywiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2xldCBjPW9zKCkrbixkPVplKCksdT1QYShkLGMsZSxpLHIsbyk7cmV0dXJuIEdwKGQsYys0LHMsYSl8fHU/X2MoZCxjKzYsbD90LmNhbGwobCxlLGkscixvLHMsYSk6dChlLGkscixvLHMsYSkpOnBiKGQsYys2KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPW9zKCkrbix1PVplKCkscD1QYSh1LGQsZSxpLHIsbyk7cmV0dXJuIEhNKHUsZCs0LHMsYSxsKXx8cD9fYyh1LGQrNyxjP3QuY2FsbChjLGUsaSxyLG8scyxhLGwpOnQoZSxpLHIsbyxzLGEsbCkpOnBiKHUsZCs3KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCl7bGV0IHU9b3MoKStuLHA9WmUoKSxmPVBhKHAsdSxlLGkscixvKTtyZXR1cm4gUGEocCx1KzQscyxhLGwsYyl8fGY/X2MocCx1KzgsZD90LmNhbGwoZCxlLGkscixvLHMsYSxsLGMpOnQoZSxpLHIsbyxzLGEsbCxjKSk6cGIocCx1KzgpfSwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViI6ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuICRVKFplKCksb3MoKSxuLHQsZSxpKX0sIlx1MDI3NVx1MDI3NWdldEN1cnJlbnRWaWV3IjpnZSwiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciOlgsIlx1MDI3NVx1MDI3NWxpc3RlbmVyIjpJLCJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIjp6dCwiXHUwMjc1XHUwMjc1c3ludGhldGljSG9zdFByb3BlcnR5IjpHTSwiXHUwMjc1XHUwMjc1c3ludGhldGljSG9zdExpc3RlbmVyIjp6TSwiXHUwMjc1XHUwMjc1cGlwZUJpbmQxIjpXLCJcdTAyNzVcdTAyNzVwaXBlQmluZDIiOnFwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDMiOlBPLCJcdTAyNzVcdTAyNzVwaXBlQmluZDQiOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz1uK1dyLGE9WmUoKSxsPSRtKGEscyk7cmV0dXJuIGJiKGEscyk/SlUoYSxvcygpLHQsbC50cmFuc2Zvcm0sZSxpLHIsbyxsKTpsLnRyYW5zZm9ybShlLGkscixvKX0sIlx1MDI3NVx1MDI3NXBpcGVCaW5kViI6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4rV3Iscj1aZSgpLG89JG0ocixpKTtyZXR1cm4gYmIocixpKT8kVShyLG9zKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtLmFwcGx5KG8sZSl9LCJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uRGVmIjpEbiwiXHUwMjc1XHUwMjc1aG9zdFByb3BlcnR5IjpqbywiXHUwMjc1XHUwMjc1cHJvcGVydHkiOl8sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUiOldpLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMSI6ZmIsIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIjpVTSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uICR6KG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1aZSgpLGQ9Y2goYyx0LGUsaSxyLG8scyxhKTtyZXR1cm4gZCE9PUhuJiZhYShFaSgpLGtyKCksYyxuLGQsY1tvaV0sbCwhMSksJHp9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNCI6ZnVuY3Rpb24gZVUobix0LGUsaSxyLG8scyxhLGwsYyxkKXtsZXQgdT1aZSgpLHA9ZGgodSx0LGUsaSxyLG8scyxhLGwsYyk7cmV0dXJuIHAhPT1IbiYmYWEoRWkoKSxrcigpLHUsbixwLHVbb2ldLGQsITEpLGVVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIHRVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApe2xldCBmPVplKCksbT11aChmLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSk7cmV0dXJuIG0hPT1IbiYmYWEoRWkoKSxrcigpLGYsbixtLGZbb2ldLHAsITEpLHRVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIG5VKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtsZXQgYj1aZSgpLE09cGgoYix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmKTtyZXR1cm4gTSE9PUhuJiZhYShFaSgpLGtyKCksYixuLE0sYltvaV0sbSwhMSksblV9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNyI6ZnVuY3Rpb24gaVUobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNKXtsZXQgeT1aZSgpLHg9ZmgoeSx0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYik7cmV0dXJuIHghPT1IbiYmYWEoRWkoKSxrcigpLHksbix4LHlbb2ldLE0sITEpLGlVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIHJVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSx5LHgpe2xldCBSPVplKCksQT1taChSLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSk7cmV0dXJuIEEhPT1IbiYmYWEoRWkoKSxrcigpLFIsbixBLFJbb2ldLHgsITEpLHJVfSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIG9VKG4sdCxlKXtsZXQgaT1aZSgpLHI9c2goaSx0KTtyZXR1cm4gciE9PUhuJiZhYShFaSgpLGtyKCksaSxuLHIsaVtvaV0sZSwhMSksb1V9LCJcdTAyNzVcdTAyNzVwaXBlIjpqLCJcdTAyNzVcdTAyNzVxdWVyeVJlZnJlc2giOlNlLCJcdTAyNzVcdTAyNzV2aWV3UXVlcnkiOkdlLCJcdTAyNzVcdTAyNzVsb2FkUXVlcnkiOkVlLCJcdTAyNzVcdTAyNzVjb250ZW50UXVlcnkiOlRpLCJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiOml0LCJcdTAyNzVcdTAyNzVjbGFzc01hcCI6QXMsIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUxIjptYiwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uKG4sdCxlLGkscil7TWwoc2EsYmMsbGgoWmUoKSxuLHQsZSxpLHIpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUzIjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzKXtNbChzYSxiYyxjaChaZSgpLG4sdCxlLGkscixvLHMpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU0IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCl7TWwoc2EsYmMsZGgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCl7TWwoc2EsYmMsdWgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQpLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU2IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwKXtNbChzYSxiYyxwaChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU3IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSl7TWwoc2EsYmMsZmgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSl7TWwoc2EsYmMsbWgoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0pLCEwKX0sIlx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGVWIjpmdW5jdGlvbihuKXtNbChzYSxiYyxzaChaZSgpLG4pLCEwKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwIjpGYSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uKG4sdCxlKXtGYShhaChaZSgpLG4sdCxlKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtGYShsaChaZSgpLG4sdCxlLGkscikpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe0ZhKGNoKFplKCksbix0LGUsaSxyLG8scykpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtGYShkaChaZSgpLG4sdCxlLGkscixvLHMsYSxsKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyxkKXtGYSh1aChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApe0ZhKHBoKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtGYShmaChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNKXtGYShtaChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSkpfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe0ZhKHNoKFplKCksbikpfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wIjpUdCwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiB4VShuLHQsZSxpLHIpe3JldHVybiBDbChuLGFoKFplKCksdCxlLGkpLHIsITEpLHhVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGUyIjpmdW5jdGlvbiBDVShuLHQsZSxpLHIsbyxzKXtyZXR1cm4gQ2wobixsaChaZSgpLHQsZSxpLHIsbykscywhMSksQ1V9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uIE1VKG4sdCxlLGkscixvLHMsYSxsKXtyZXR1cm4gQ2wobixjaChaZSgpLHQsZSxpLHIsbyxzLGEpLGwsITEpLE1VfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB3VShuLHQsZSxpLHIsbyxzLGEsbCxjLGQpe3JldHVybiBDbChuLGRoKFplKCksdCxlLGkscixvLHMsYSxsLGMpLGQsITEpLHdVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBTVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwKXtyZXR1cm4gQ2wobix1aChaZSgpLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSkscCwhMSksU1V9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIEVVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtyZXR1cm4gQ2wobixwaChaZSgpLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYpLG0sITEpLEVVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBUVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0pe3JldHVybiBDbChuLGZoKFplKCksdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIpLE0sITEpLFRVfSwiXHUwMjc1XHUwMjc1c3R5bGVQcm9wSW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBEVShuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSx4KXtyZXR1cm4gQ2wobixtaChaZSgpLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0seSkseCwhMSksRFV9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIElVKG4sdCxlKXtyZXR1cm4gQ2wobixzaChaZSgpLHQpLGUsITEpLElVfSwiXHUwMjc1XHUwMjc1Y2xhc3NQcm9wIjpudCwiXHUwMjc1XHUwMjc1YWR2YW5jZSI6diwiXHUwMjc1XHUwMjc1dGVtcGxhdGUiOlMsIlx1MDI3NVx1MDI3NXRleHQiOlQsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSI6YnQsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTEiOkhlLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUyIjpsdSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyI6ak0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGhVKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1aZSgpLGQ9ZGgoYyxuLHQsZSxpLHIsbyxzLGEsbCk7cmV0dXJuIGQhPT1IbiYmbGQoYyxzcygpLGQpLGhVfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNSI6ZnVuY3Rpb24gZ1Uobix0LGUsaSxyLG8scyxhLGwsYyxkKXtsZXQgdT1aZSgpLHA9dWgodSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQpO3JldHVybiBwIT09SG4mJmxkKHUsc3MoKSxwKSxnVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uIF9VKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApe2xldCBmPVplKCksbT1waChmLG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHApO3JldHVybiBtIT09SG4mJmxkKGYsc3MoKSxtKSxfVX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIGJVKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtKXtsZXQgYj1aZSgpLE09ZmgoYixuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSk7cmV0dXJuIE0hPT1IbiYmbGQoYixzcygpLE0pLGJVfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlOCI6ZnVuY3Rpb24gdlUobix0LGUsaSxyLG8scyxhLGwsYyxkLHUscCxmLG0sYixNKXtsZXQgeT1aZSgpLHg9bWgoeSxuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0pO3JldHVybiB4IT09SG4mJmxkKHksc3MoKSx4KSx2VX0sIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uIHlVKG4pe2xldCB0PVplKCksZT1zaCh0LG4pO3JldHVybiBlIT09SG4mJmxkKHQsc3MoKSxlKSx5VX0sIlx1MDI3NVx1MDI3NWkxOG4iOnFNLCJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyI6ZnVuY3Rpb24obix0KXtsZXQgZT1FaSgpLGk9aXUoZS5jb25zdHMsdCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1QbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKGRjZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTt6XyhvLGwscixhLHZjZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rV3IsaSl9LCJcdTAyNzVcdTAyNzVpMThuRXhwIjpoYiwiXHUwMjc1XHUwMjc1aTE4blN0YXJ0IjpxVSwiXHUwMjc1XHUwMjc1aTE4bkVuZCI6WVUsIlx1MDI3NVx1MDI3NWkxOG5BcHBseSI6WU0sIlx1MDI3NVx1MDI3NWkxOG5Qb3N0cHJvY2VzcyI6WE0sIlx1MDI3NVx1MDI3NXJlc29sdmVXaW5kb3ciOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LCJcdTAyNzVcdTAyNzVyZXNvbHZlRG9jdW1lbnQiOmhjLCJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSI6ZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudC5ib2R5fSwiXHUwMjc1XHUwMjc1c2V0Q29tcG9uZW50U2NvcGUiOmliLCJcdTAyNzVcdTAyNzVzZXROZ01vZHVsZVNjb3BlIjpmdW5jdGlvbihuLHQpe3JldHVybiBvdSgoKT0+e2xldCBlPUdtKG4sITApO2UuZGVjbGFyYXRpb25zPXQuZGVjbGFyYXRpb25zfHxWaSxlLmltcG9ydHM9dC5pbXBvcnRzfHxWaSxlLmV4cG9ydHM9dC5leHBvcnRzfHxWaX0pfSwiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiOkI1LCJcdTAyNzVcdTAyNzVzYW5pdGl6ZUh0bWwiOmZPLCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVN0eWxlIjpmdW5jdGlvbihuKXtsZXQgdD1kYigpO3JldHVybiB0P3Quc2FuaXRpemUoanIuU1RZTEUsbil8fCIiOnhsKG4sIlN0eWxlIik/RHMobik6VW4obil9LCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVJlc291cmNlVXJsIjpteiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiOmZ1bmN0aW9uKG4pe2xldCB0PWRiKCk7aWYodClyZXR1cm4gZkgodC5zYW5pdGl6ZShqci5TQ1JJUFQsbil8fCIiKTtpZih4bChuLCJTY3JpcHQiKSlyZXR1cm4gZkgoRHMobikpO3Rocm93IG5ldyB5dCg5MDUsITEpfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmwiOmthLCJcdTAyNzVcdTAyNzVzYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmwiOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4ic3JjIj09PXQmJigiZW1iZWQiPT09bnx8ImZyYW1lIj09PW58fCJpZnJhbWUiPT09bnx8Im1lZGlhIj09PW58fCJzY3JpcHQiPT09bil8fCJocmVmIj09PXQmJigiYmFzZSI9PT1ufHwibGluayI9PT1uKT9tejprYX0odCxlKShuKX0sIlx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRIdG1sIjpmdW5jdGlvbihuKXtyZXR1cm4gaWgoblswXSl9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdHooKT8uY3JlYXRlU2NyaXB0VVJMKG4pfHxufShuWzBdKX0sIlx1MDI3NVx1MDI3NXZhbGlkYXRlSWZyYW1lQXR0cmlidXRlIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9WmUoKSxyPWtyKCksbz1vYShyLGkpO2lmKDI9PT1yLnR5cGUmJiJpZnJhbWUiPT09dC50b0xvd2VyQ2FzZSgpKXtsZXQgcz1vO3Rocm93IHMuc3JjPSIiLHMuc3JjZG9jPWloKCIiKSxsTyhpW29pXSxzKSxuZXcgeXQoLTkxMCwhMSl9cmV0dXJuIG59LGZvcndhcmRSZWY6JG4scmVzb2x2ZUZvcndhcmRSZWY6Uml9LFBfPW51bGw7ZnVuY3Rpb24gc2oobil7cmV0dXJuISFHbShuKX12YXIgWkM9W10sVFI9ITE7ZnVuY3Rpb24gYWoobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5ldmVyeShhaik6ISFSaShuKX1mdW5jdGlvbiBoZGUobix0KXtsZXQgZT0kZCh0LmRlY2xhcmF0aW9uc3x8VmkpLGk9Wm0obik7ZS5mb3JFYWNoKHI9Pnsocj1SaShyKSkuaGFzT3duUHJvcGVydHkoU00pP2xqKERhKHIpLGkpOiFyLmhhc093blByb3BlcnR5KEhQKSYmIXIuaGFzT3duUHJvcGVydHkoelApJiYoci5uZ1NlbGVjdG9yU2NvcGU9bil9KX1mdW5jdGlvbiBsaihuLHQpe24uZGlyZWN0aXZlRGVmcz0oKT0+QXJyYXkuZnJvbSh0LmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMpLm1hcChlPT5lLmhhc093blByb3BlcnR5KFNNKT9EYShlKTp0dShlKSkuZmlsdGVyKGU9PiEhZSksbi5waXBlRGVmcz0oKT0+QXJyYXkuZnJvbSh0LmNvbXBpbGF0aW9uLnBpcGVzKS5tYXAoZT0+bnUoZSkpLG4uc2NoZW1hcz10LnNjaGVtYXMsbi50Vmlldz1udWxsfWZ1bmN0aW9uIFptKG4pe2lmKHNqKG4pKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1HbShuLCEwKTtpZihudWxsIT09dC50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcylyZXR1cm4gdC50cmFuc2l0aXZlQ29tcGlsZVNjb3BlcztsZXQgZT17c2NoZW1hczp0LnNjaGVtYXN8fG51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9fTtyZXR1cm4gWEModC5pbXBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1abShpKTtyLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChvPT5lLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKG8pKSxyLmV4cG9ydGVkLnBpcGVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5waXBlcy5hZGQobykpfSksWEModC5kZWNsYXJhdGlvbnMpLmZvckVhY2goaT0+e251KGkpP2UuY29tcGlsYXRpb24ucGlwZXMuYWRkKGkpOmUuY29tcGlsYXRpb24uZGlyZWN0aXZlcy5hZGQoaSl9KSxYQyh0LmV4cG9ydHMpLmZvckVhY2goaT0+e2xldCByPWk7aWYoc2oocikpe2xldCBvPVptKHIpO28uZXhwb3J0ZWQuZGlyZWN0aXZlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKHMpLGUuZXhwb3J0ZWQuZGlyZWN0aXZlcy5hZGQocyl9KSxvLmV4cG9ydGVkLnBpcGVzLmZvckVhY2gocz0+e2UuY29tcGlsYXRpb24ucGlwZXMuYWRkKHMpLGUuZXhwb3J0ZWQucGlwZXMuYWRkKHMpfSl9ZWxzZSBudShyKT9lLmV4cG9ydGVkLnBpcGVzLmFkZChyKTplLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHIpfSksdC50cmFuc2l0aXZlQ29tcGlsZVNjb3Blcz1lLGV9KG4pO2lmKGU1KG4pKXtpZihudWxsIT09KERhKG4pfHx0dShuKSkpcmV0dXJue3NjaGVtYXM6bnVsbCxjb21waWxhdGlvbjp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXR9LGV4cG9ydGVkOntkaXJlY3RpdmVzOm5ldyBTZXQoW25dKSxwaXBlczpuZXcgU2V0fX07aWYobnVsbCE9PW51KG4pKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0LHBpcGVzOm5ldyBTZXQoW25dKX19fXRocm93IG5ldyBFcnJvcihgJHtuLm5hbWV9IGRvZXMgbm90IGhhdmUgYSBtb2R1bGUgZGVmIChcdTAyNzVtb2QgcHJvcGVydHkpYCl9ZnVuY3Rpb24gQkgobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nTW9kdWxlfShuKT9uLm5nTW9kdWxlOm59dmFyIERSPTA7ZnVuY3Rpb24gY2oobix0KXtsZXQgZT1udWxsO3VqKG4sdHx8e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLEhQLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9ZGoobix0fHx7fSk7ZT1JYSgpLmNvbXBpbGVEaXJlY3RpdmUoZXUsaS5zb3VyY2VNYXBVcmwsaS5tZXRhZGF0YSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIGRqKG4sdCl7bGV0IGU9biYmbi5uYW1lLGk9YG5nOi8vLyR7ZX0vXHUwMjc1ZGlyLmpzYCxyPUlhKCksbz1waihuLHQpO3JldHVybiBvLnR5cGVTb3VyY2VTcGFuPXIuY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJEaXJlY3RpdmUiLGUsaSksby51c2VzSW5oZXJpdGFuY2UmJmZqKG4pLHttZXRhZGF0YTpvLHNvdXJjZU1hcFVybDppfX1mdW5jdGlvbiB1aihuLHQpe2xldCBlPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZWQse2dldDooKT0+e2lmKG51bGw9PT1lKXtsZXQgaT1kaihuLHQpLHI9SWEoKTtlPXIuY29tcGlsZUZhY3RvcnkoZXUsYG5nOi8vLyR7bi5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOmkubWV0YWRhdGEubmFtZSx0eXBlOmkubWV0YWRhdGEudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6Uk0obiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9ZnVuY3Rpb24geWRlKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpPT09T2JqZWN0LnByb3RvdHlwZX1mdW5jdGlvbiBwaihuLHQpe2xldCBlPXRPKCksaT1lLm93blByb3BNZXRhZGF0YShuKTtyZXR1cm57bmFtZTpuLm5hbWUsdHlwZTpuLHNlbGVjdG9yOnZvaWQgMCE9PXQuc2VsZWN0b3I/dC5zZWxlY3RvcjpudWxsLGhvc3Q6dC5ob3N0fHwkYyxwcm9wTWV0YWRhdGE6aSxpbnB1dHM6dC5pbnB1dHN8fFZpLG91dHB1dHM6dC5vdXRwdXRzfHxWaSxxdWVyaWVzOlZIKG4saSxtaiksbGlmZWN5Y2xlOnt1c2VzT25DaGFuZ2VzOmUuaGFzTGlmZWN5Y2xlSG9vayhuLCJuZ09uQ2hhbmdlcyIpfSx0eXBlU291cmNlU3BhbjpudWxsLHVzZXNJbmhlcml0YW5jZToheWRlKG4pLGV4cG9ydEFzOk1kZSh0LmV4cG9ydEFzKSxwcm92aWRlcnM6dC5wcm92aWRlcnN8fG51bGwsdmlld1F1ZXJpZXM6VkgobixpLGhqKSxpc1N0YW5kYWxvbmU6ISF0LnN0YW5kYWxvbmUsaG9zdERpcmVjdGl2ZXM6dC5ob3N0RGlyZWN0aXZlcz8ubWFwKHI9PiJmdW5jdGlvbiI9PXR5cGVvZiByP3tkaXJlY3RpdmU6cn06cil8fG51bGx9fWZ1bmN0aW9uIGZqKG4pe2xldCB0PU9iamVjdC5wcm90b3R5cGUsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7ZSYmZSE9PXQ7KSF0dShlKSYmIURhKGUpJiZTZGUoZSkmJmNqKGUsbnVsbCksZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9ZnVuY3Rpb24geGRlKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9faihuKTpSaShuKX1mdW5jdGlvbiBDZGUobix0KXtyZXR1cm57cHJvcGVydHlOYW1lOm4scHJlZGljYXRlOnhkZSh0LnNlbGVjdG9yKSxkZXNjZW5kYW50czp0LmRlc2NlbmRhbnRzLGZpcnN0OnQuZmlyc3QscmVhZDp0LnJlYWQ/dC5yZWFkOm51bGwsc3RhdGljOiEhdC5zdGF0aWMsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ISF0LmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBWSChuLHQsZSl7bGV0IGk9W107Zm9yKGxldCByIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG89dFtyXTtvLmZvckVhY2gocz0+e2lmKGUocykpe2lmKCFzLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcihgQ2FuJ3QgY29uc3RydWN0IGEgcXVlcnkgZm9yIHRoZSBwcm9wZXJ0eSAiJHtyfSIgb2YgIiR7TFAobil9IiBzaW5jZSB0aGUgcXVlcnkgc2VsZWN0b3Igd2Fzbid0IGRlZmluZWQuYCk7aWYoby5zb21lKGdqKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21iaW5lIEBJbnB1dCBkZWNvcmF0b3JzIHdpdGggcXVlcnkgZGVjb3JhdG9ycyIpO2kucHVzaChDZGUocixzKSl9fSl9cmV0dXJuIGl9ZnVuY3Rpb24gTWRlKG4pe3JldHVybiB2b2lkIDA9PT1uP251bGw6X2oobil9ZnVuY3Rpb24gbWoobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iQ29udGVudENoaWxkIj09PXR8fCJDb250ZW50Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBoaihuKXtsZXQgdD1uLm5nTWV0YWRhdGFOYW1lO3JldHVybiJWaWV3Q2hpbGQiPT09dHx8IlZpZXdDaGlsZHJlbiI9PT10fWZ1bmN0aW9uIGdqKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIF9qKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PnQudHJpbSgpKX12YXIgd2RlPVsibmdPbkNoYW5nZXMiLCJuZ09uSW5pdCIsIm5nT25EZXN0cm95IiwibmdEb0NoZWNrIiwibmdBZnRlclZpZXdJbml0IiwibmdBZnRlclZpZXdDaGVja2VkIiwibmdBZnRlckNvbnRlbnRJbml0IiwibmdBZnRlckNvbnRlbnRDaGVja2VkIl07ZnVuY3Rpb24gU2RlKG4pe2xldCB0PXRPKCk7aWYod2RlLnNvbWUoaT0+dC5oYXNMaWZlY3ljbGVIb29rKG4saSkpKXJldHVybiEwO2xldCBlPXQucHJvcE1ldGFkYXRhKG4pO2ZvcihsZXQgaSBpbiBlKXtsZXQgcj1lW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dLGE9cy5uZ01ldGFkYXRhTmFtZTtpZihnaihzKXx8bWoocyl8fGhqKHMpfHwiT3V0cHV0Ij09PWF8fCJIb3N0QmluZGluZyI9PT1hfHwiSG9zdExpc3RlbmVyIj09PWEpcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIEhIKG4sdCl7cmV0dXJue3R5cGU6bixuYW1lOm4ubmFtZSxwaXBlTmFtZTp0Lm5hbWUscHVyZTp2b2lkIDA9PT10LnB1cmV8fHQucHVyZSxpc1N0YW5kYWxvbmU6ISF0LnN0YW5kYWxvbmV9fXZhciBUZGU9b2IoIkRpcmVjdGl2ZSIsKG49e30pPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmNqKG4sdCkpO2Z1bmN0aW9uIHlNKC4uLm4pe31vYigiQ29tcG9uZW50Iiwobj17fSk9Pih7Y2hhbmdlRGV0ZWN0aW9uOmtfLkRlZmF1bHQsLi4ubn0pLFRkZSx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbDsoZnVuY3Rpb24obix0KXtMNSh0KSYmKFhfLnNldChuLHQpLE41LmFkZChuKSl9KShuLHQpLHVqKG4sdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sU00se2dldDooKT0+e2lmKG51bGw9PT1lKXtsZXQgaT1JYSgpO2lmKEw1KHQpKXtsZXQgYz1bYENvbXBvbmVudCAnJHtuLm5hbWV9JyBpcyBub3QgcmVzb2x2ZWQ6YF07dGhyb3cgdC50ZW1wbGF0ZVVybCYmYy5wdXNoKGAgLSB0ZW1wbGF0ZVVybDogJHt0LnRlbXBsYXRlVXJsfWApLHQuc3R5bGVVcmxzJiZ0LnN0eWxlVXJscy5sZW5ndGgmJmMucHVzaChgIC0gc3R5bGVVcmxzOiAke0pTT04uc3RyaW5naWZ5KHQuc3R5bGVVcmxzKX1gKSxjLnB1c2goIkRpZCB5b3UgcnVuIGFuZCB3YWl0IGZvciAncmVzb2x2ZUNvbXBvbmVudFJlc291cmNlcygpJz8iKSxuZXcgRXJyb3IoYy5qb2luKCJcbiIpKX1sZXQgbz10LnByZXNlcnZlV2hpdGVzcGFjZXM7dm9pZCAwPT09byYmKG89bnVsbCE9PVBfJiZ2b2lkIDAhPT1QXy5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZQXy5wcmVzZXJ2ZVdoaXRlc3BhY2VzKTtsZXQgcz10LmVuY2Fwc3VsYXRpb247dm9pZCAwPT09cyYmKHM9bnVsbCE9PVBfJiZ2b2lkIDAhPT1QXy5kZWZhdWx0RW5jYXBzdWxhdGlvbj9QXy5kZWZhdWx0RW5jYXBzdWxhdGlvbjpyYS5FbXVsYXRlZCk7bGV0IGE9dC50ZW1wbGF0ZVVybHx8YG5nOi8vLyR7bi5uYW1lfS90ZW1wbGF0ZS5odG1sYCxsPXsuLi5waihuLHQpLHR5cGVTb3VyY2VTcGFuOmkuY3JlYXRlUGFyc2VTb3VyY2VTcGFuKCJDb21wb25lbnQiLG4ubmFtZSxhKSx0ZW1wbGF0ZTp0LnRlbXBsYXRlfHwiIixwcmVzZXJ2ZVdoaXRlc3BhY2VzOm8sc3R5bGVzOnQuc3R5bGVzfHxWaSxhbmltYXRpb25zOnQuYW5pbWF0aW9ucyxkZWNsYXJhdGlvbnM6W10sY2hhbmdlRGV0ZWN0aW9uOnQuY2hhbmdlRGV0ZWN0aW9uLGVuY2Fwc3VsYXRpb246cyxpbnRlcnBvbGF0aW9uOnQuaW50ZXJwb2xhdGlvbix2aWV3UHJvdmlkZXJzOnQudmlld1Byb3ZpZGVyc3x8bnVsbH07RFIrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJmZqKG4pLGU9aS5jb21waWxlQ29tcG9uZW50KGV1LGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz0kZCh0LmltcG9ydHN8fFZpKSx7ZGlyZWN0aXZlRGVmczpkLHBpcGVEZWZzOnV9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bRGEobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPVJpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxHbShsKSl7bGV0IGM9Wm0obCk7Zm9yKGxldCBkIG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IHU9RGEoZCl8fHR1KGQpO3UmJiFzLmhhcyhkKSYmKHMuYWRkKGQpLGUucHVzaCh1KSl9fWVsc2V7bGV0IGM9RGEobCl8fHR1KGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPVJpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxHbShsKSl7bGV0IGM9Wm0obCk7Zm9yKGxldCBkIG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCB1PW51KGQpO3UmJiFzLmhhcyhkKSYmKHMuYWRkKGQpLGkucHVzaCh1KSl9fWVsc2V7bGV0IGM9bnUobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9ZCxlLnBpcGVEZWZzPXUsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKFJpKX19ZmluYWxseXtEUi0tfWlmKDA9PT1EUiYmZnVuY3Rpb24oKXtpZighVFIpe1RSPSEwO3RyeXtmb3IobGV0IG49WkMubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09WkNbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KGFqKSYmKFpDLnNwbGljZShuLDEpLGhkZSh0LGUpKX19ZmluYWxseXtUUj0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPVptKG4ubmdTZWxlY3RvclNjb3BlKTtsaihlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7TFAobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLG9iKCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZWQse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1ISChuLHQpLG89SWEoKTtpPW8uY29tcGlsZUZhY3RvcnkoZXUsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6Uk0obiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHpQLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9SEgobix0KTtlPUlhKCkuY29tcGlsZVBpcGUoZXUsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLGF1KCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksYXUoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksYXUoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxhdSgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksb2IoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT0kZCh0LmRlY2xhcmF0aW9uc3x8VmkpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwkSCx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1JYSgpLmNvbXBpbGVOZ01vZHVsZShldSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6JGQodC5ib290c3RyYXB8fFZpKS5tYXAoUmkpLGRlY2xhcmF0aW9uczppLm1hcChSaSksaW1wb3J0czokZCh0LmltcG9ydHN8fFZpKS5tYXAoUmkpLm1hcChCSCksZXhwb3J0czokZCh0LmV4cG9ydHN8fFZpKS5tYXAoUmkpLm1hcChCSCksc2NoZW1hczp0LnNjaGVtYXM/JGQodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZWQse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1JYSgpO289YS5jb21waWxlRmFjdG9yeShldSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOlJNKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFJSLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFZpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFZpKS5tYXAoUmkpLCh0LmV4cG9ydHN8fFZpKS5tYXAoUmkpXX07cz1JYSgpLmNvbXBpbGVJbmplY3RvcihldSxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZCNShuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7WkMucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIE9PPW5ldyBpZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxaTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9eU0sdGhpcy5yZWplY3Q9eU0sdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYoaGgobykpZS5wdXNoKG8pO2Vsc2UgaWYoRE8obykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhPTyw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksWXA9bmV3IGllKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHtJUigpfSR7SVIoKX0ke0lSKCl9YH19KTtmdW5jdGlvbiBJUigpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBrTz1uZXcgaWUoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksdmM9bmV3IGllKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxoaT0obmV3IGllKCJBcHBsaWNhdGlvbiBQYWNrYWdlcyBSb290IFVSTCIpLG5ldyBpZSgiQW5pbWF0aW9uTW9kdWxlVHlwZSIpKSxjZD1uZXcgaWUoIkxvY2FsZUlkIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+YWkoY2QseGkuT3B0aW9uYWx8eGkuU2tpcFNlbGYpfHx0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8X019KSxQZGU9KG5ldyBpZSgiRGVmYXVsdEN1cnJlbmN5Q29kZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJVU0QifSksbmV3IGllKCJUcmFuc2xhdGlvbnMiKSxuZXcgaWUoIlRyYW5zbGF0aW9uc0Zvcm1hdCIpLG5ldyBpZSgiY29tcGlsZXJPcHRpb25zIiksUHJvbWlzZS5yZXNvbHZlKDApKTtmdW5jdGlvbiBEUChuKXt0eXBlb2YgWm9uZT4idSI/UGRlLnRoZW4oKCk9PntuJiZuLmFwcGx5KG51bGwsbnVsbCl9KTpab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInNjaGVkdWxlTWljcm90YXNrIixuKX12YXIgYXQ9Y2xhc3N7Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOnQ9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjplPSExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmk9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEYoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgRighMSksdGhpcy5vblN0YWJsZT1uZXcgRighMSksdGhpcy5vbkVycm9yPW5ldyBGKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IHl0KDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2xldCByPXRoaXM7ci5fbmVzdGluZz0wLHIuX291dGVyPXIuX2lubmVyPVpvbmUuY3VycmVudCxab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoci5faW5uZXI9ci5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLHQmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjKSksci5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFpJiZlLHIuc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249aSxyLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxyLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe2xldCBuPVVyLnJlcXVlc3RBbmltYXRpb25GcmFtZSx0PVVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lO2lmKHR5cGVvZiBab25lPCJ1IiYmbiYmdCl7bGV0IGU9bltab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZSYmKG49ZSk7bGV0IGk9dFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aSYmKHQ9aSl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpuLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZyYW1lOnR9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbihuKXtsZXQgdD0oKT0+eyFmdW5jdGlvbihuKXtuLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PW4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwobi5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9bi5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChVciwoKT0+e24uZmFrZVRvcEV2ZW50VGFza3x8KG4uZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57bi5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsSVAobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxGTyhuKSxuLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLG4uZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLElQKG4pKX0obil9O24uX2lubmVyPW4uX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooZSxpLHIsbyxzLGEpPT57dHJ5e3JldHVybiB6SChuKSxlLmludm9rZVRhc2socixvLHMsYSl9ZmluYWxseXsobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PW8udHlwZXx8bi5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJnQoKSxVSChuKX19LG9uSW52b2tlOihlLGkscixvLHMsYSxsKT0+e3RyeXtyZXR1cm4gekgobiksZS5pbnZva2UocixvLHMsYSxsKX1maW5hbGx5e24uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJnQoKSxVSChuKX19LG9uSGFzVGFzazooZSxpLHIsbyk9PntlLmhhc1Rhc2socixvKSxpPT09ciYmKCJtaWNyb1Rhc2siPT1vLmNoYW5nZT8obi5faGFzUGVuZGluZ01pY3JvdGFza3M9by5taWNyb1Rhc2ssSVAobiksRk8obikpOiJtYWNyb1Rhc2siPT1vLmNoYW5nZSYmKG4uaGFzUGVuZGluZ01hY3JvdGFza3M9by5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooZSxpLHIsbyk9PihlLmhhbmRsZUVycm9yKHIsbyksbi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vbkVycm9yLmVtaXQobykpLCExKX0pfShyKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighYXQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IHl0KDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihhdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgeXQoOTA5LCExKX1ydW4odCxlLGkpe3JldHVybiB0aGlzLl9pbm5lci5ydW4odCxlLGkpfXJ1blRhc2sodCxlLGkscil7bGV0IG89dGhpcy5faW5uZXIscz1vLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIityLHQsa2RlLHlNLHlNKTt0cnl7cmV0dXJuIG8ucnVuVGFzayhzLGUsaSl9ZmluYWxseXtvLmNhbmNlbFRhc2socyl9fXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxpKX1ydW5PdXRzaWRlQW5ndWxhcih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfX0sa2RlPXt9O2Z1bmN0aW9uIEZPKG4pe2lmKDA9PW4uX25lc3RpbmcmJiFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhbi5pc1N0YWJsZSl0cnl7bi5fbmVzdGluZysrLG4ub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYobi5fbmVzdGluZy0tLCFuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtuLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7bi5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIElQKG4pe24uaGFzUGVuZGluZ01pY3JvdGFza3M9ISEobi5faGFzUGVuZGluZ01pY3JvdGFza3N8fChuLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PW4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiB6SChuKXtuLl9uZXN0aW5nKyssbi5pc1N0YWJsZSYmKG4uaXNTdGFibGU9ITEsbi5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIFVIKG4pe24uX25lc3RpbmctLSxGTyhuKX12YXIgTE8sTk89bmV3IGllKCIiKSx2Yj1uZXcgaWUoIiIpLEtNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX25nWm9uZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50YXNrVHJhY2tpbmdab25lPW51bGwsTE98fChmdW5jdGlvbihuKXtMTz1ufShyKSxyLmFkZFRvV2luZG93KGkpKSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSxlLnJ1bigoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT10eXBlb2YgWm9uZT4idSI/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9KX1fd2F0Y2hBbmd1bGFyRXZlbnRzKCl7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5fZGlkV29yaz0hMCx0aGlzLl9pc1pvbmVTdGFibGU9ITF9fSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e2F0LmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxEUCgoKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfWluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fZGlkV29yaz0hMCx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9ydW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKURQKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBlPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHRoaXMuX2RpZFdvcmspfXRoaXMuX2RpZFdvcms9ITF9KTtlbHNle2xldCBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoaT0+IWkudXBkYXRlQ2J8fCFpLnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KGkudGltZW91dElkKSwhMSkpLHRoaXMuX2RpZFdvcms9ITB9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKGU9Pih7c291cmNlOmUuc291cmNlLGNyZWF0aW9uTG9jYXRpb246ZS5jcmVhdGlvbkxvY2F0aW9uLGRhdGE6ZS5kYXRhfSkpOltdfWFkZENhbGxiYWNrKGUsaSxyKXtsZXQgbz0tMTtpJiZpPjAmJihvPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihzPT5zLnRpbWVvdXRJZCE9PW8pLGUodGhpcy5fZGlkV29yayx0aGlzLmdldFBlbmRpbmdUYXNrcygpKX0saSkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6ZSx0aW1lb3V0SWQ6byx1cGRhdGVDYjpyfSl9d2hlblN0YWJsZShlLGkscil7aWYociYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayhlLGksciksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfWdldFBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fXJlZ2lzdGVyQXBwbGljYXRpb24oZSl7dGhpcy5yZWdpc3RyeS5yZWdpc3RlckFwcGxpY2F0aW9uKGUsdGhpcyl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkudW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpfWZpbmRQcm92aWRlcnMoZSxpLHIpe3JldHVybltdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGF0KSxrKEpNKSxrKHZiKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSk09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcgTWFwfXJlZ2lzdGVyQXBwbGljYXRpb24oZSxpKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KGUsaSl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUoZSl9dW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpfWdldFRlc3RhYmlsaXR5KGUpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KGUpfHxudWxsfWdldEFsbFRlc3RhYmlsaXRpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfWdldEFsbFJvb3RFbGVtZW50cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZShlLGk9ITApe3JldHVybiBMTz8uZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsZSxpKT8/bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpLFVfPW51bGwsYmo9bmV3IGllKCJBbGxvd011bHRpcGxlVG9rZW4iKSx2aj1uZXcgaWUoIlBsYXRmb3JtRGVzdHJveUxpc3RlbmVycyIpLEJkZT1uZXcgaWUoImFwcEJvb3RzdHJhcExpc3RlbmVyIik7ZnVuY3Rpb24gQk8obix0LGU9W10pe2xldCBpPWBQbGF0Zm9ybTogJHt0fWAscj1uZXcgaWUoaSk7cmV0dXJuKG89W10pPT57bGV0IHM9eWooKTtpZighc3x8cy5pbmplY3Rvci5nZXQoYmosITEpKXtsZXQgYT1bLi4uZSwuLi5vLHtwcm92aWRlOnIsdXNlVmFsdWU6ITB9XTtuP24oYSk6ZnVuY3Rpb24obil7aWYoVV8mJiFVXy5nZXQoYmosITEpKXRocm93IG5ldyB5dCg0MDAsITEpO1VfPW47bGV0IHQ9bi5nZXQoeGopOyhmdW5jdGlvbihuKXtsZXQgdD1uLmdldChrTyxudWxsKTt0JiZ0LmZvckVhY2goZT0+ZSgpKX0pKG4pfShmdW5jdGlvbihuPVtdLHQpe3JldHVybiBNaS5jcmVhdGUoe25hbWU6dCxwcm92aWRlcnM6W3twcm92aWRlOk5NLHVzZVZhbHVlOiJwbGF0Zm9ybSJ9LHtwcm92aWRlOnZqLHVzZVZhbHVlOm5ldyBTZXQoWygpPT5VXz1udWxsXSl9LC4uLm5dfSl9KGEsaSkpfXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD15aigpO2lmKCF0KXRocm93IG5ldyB5dCg0MDEsITEpO3JldHVybiB0fSgpfX1mdW5jdGlvbiB5aigpe3JldHVybiBVXz8uZ2V0KHhqKT8/bnVsbH12YXIgeGo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShlLGkpe2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU7cmV0dXJuIGU9Im5vb3AiPT09bj9uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEYsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBGLHRoaXMub25TdGFibGU9bmV3IEYsdGhpcy5vbkVycm9yPW5ldyBGfXJ1bih0LGUsaSl7cmV0dXJuIHQuYXBwbHkoZSxpKX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bk91dHNpZGVBbmd1bGFyKHQpe3JldHVybiB0KCl9cnVuVGFzayh0LGUsaSxyKXtyZXR1cm4gdC5hcHBseShlLGkpfX06KCJ6b25lLmpzIj09PW4/dm9pZCAwOm4pfHxuZXcgYXQodCksZX0oaT8ubmdab25lLGZ1bmN0aW9uKG4pe3JldHVybntlbmFibGVMb25nU3RhY2tUcmFjZTohMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOiEoIW58fCFuLm5nWm9uZUV2ZW50Q29hbGVzY2luZyl8fCExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOiEoIW58fCFuLm5nWm9uZVJ1bkNvYWxlc2NpbmcpfHwhMX19KGkpKSxvPVt7cHJvdmlkZTphdCx1c2VWYWx1ZTpyfV07cmV0dXJuIHIucnVuKCgpPT57bGV0IHM9TWkuY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6dGhpcy5pbmplY3RvcixuYW1lOmUubW9kdWxlVHlwZS5uYW1lfSksYT1lLmNyZWF0ZShzKSxsPWEuaW5qZWN0b3IuZ2V0KHJzLG51bGwpO2lmKCFsKXRocm93IG5ldyB5dCg0MDIsITEpO3JldHVybiByLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IGM9ci5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpkPT57bC5oYW5kbGVFcnJvcihkKX19KTthLm9uRGVzdHJveSgoKT0+e0tDKHRoaXMuX21vZHVsZXMsYSksYy51bnN1YnNjcmliZSgpfSl9KSxmdW5jdGlvbihuLHQsZSl7dHJ5e2xldCBpPWUoKTtyZXR1cm4gaGgoaSk/aS5jYXRjaChyPT57dGhyb3cgdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5oYW5kbGVFcnJvcihyKSkscn0pOml9Y2F0Y2goaSl7dGhyb3cgdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5oYW5kbGVFcnJvcihpKSksaX19KGwsciwoKT0+e2xldCBjPWEuaW5qZWN0b3IuZ2V0KFpNKTtyZXR1cm4gYy5ydW5Jbml0aWFsaXplcnMoKSxjLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbihuKXsoZnVuY3Rpb24obix0KXtudWxsPT1uJiZRSCgiRXhwZWN0ZWQgbG9jYWxlSWQgdG8gYmUgZGVmaW5lZCIsbixudWxsLCIhPSIpfSkobiksInN0cmluZyI9PXR5cGVvZiBuJiYoT1U9bi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oYS5pbmplY3Rvci5nZXQoY2QsX00pfHxfTSksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoYSksYSkpfSl9KX1ib290c3RyYXBNb2R1bGUoZSxpPVtdKXtsZXQgcj1Daih7fSxpKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyB3UChlKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfSgwLDAsZSkudGhlbihvPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkobyxyKSl9X21vZHVsZURvQm9vdHN0cmFwKGUpe2xldCBpPWUuaW5qZWN0b3IuZ2V0KHljKTtpZihlLl9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKWUuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChyPT5pLmJvb3RzdHJhcChyKSk7ZWxzZXtpZighZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyB5dCgtNDAzLCExKTtlLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoaSl9dGhpcy5fbW9kdWxlcy5wdXNoKGUpfW9uRGVzdHJveShlKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IHl0KDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChpPT5pKCkpO2xldCBlPXRoaXMuX2luamVjdG9yLmdldCh2aixudWxsKTtlJiYoZS5mb3JFYWNoKGk9PmkoKSksZS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTWkpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7ZnVuY3Rpb24gQ2oobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LnJlZHVjZShDaixuKTp7Li4ubiwuLi50fX12YXIgeWM9KCgpPT57Y2xhc3MgbntnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgS3QoYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgS3QoYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57YXQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLERQKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PnthdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dG4obyxzLnBpcGUoQ3MoKSkpfWJvb3RzdHJhcChlLGkpe2xldCBzLHI9ZSBpbnN0YW5jZW9mIHBNO2lmKCF0aGlzLl9pbmplY3Rvci5nZXQoWk0pLmRvbmUpdGhyb3chciYmZTUoZSksbmV3IHl0KDQwNSxmYWxzZSk7cz1yP2U6dGhpcy5faW5qZWN0b3IuZ2V0KGZvKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlKSx0aGlzLmNvbXBvbmVudFR5cGVzLnB1c2gocy5jb21wb25lbnRUeXBlKTtsZXQgYT1mdW5jdGlvbihuKXtyZXR1cm4gbi5pc0JvdW5kVG9Nb2R1bGV9KHMpP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQocnUpLGM9cy5jcmVhdGUoTWkuTlVMTCxbXSxpfHxzLnNlbGVjdG9yLGEpLGQ9Yy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LHU9Yy5pbmplY3Rvci5nZXQoTk8sbnVsbCk7cmV0dXJuIHU/LnJlZ2lzdGVyQXBwbGljYXRpb24oZCksYy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoYy5ob3N0VmlldyksS0ModGhpcy5jb21wb25lbnRzLGMpLHU/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihkKX0pLHRoaXMuX2xvYWRDb21wb25lbnQoYyksY310aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IHl0KDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgZSBvZiB0aGlzLl92aWV3cyllLmRldGVjdENoYW5nZXMoKX1jYXRjaChlKXt0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKGUpKX1maW5hbGx5e3RoaXMuX3J1bm5pbmdUaWNrPSExfX1hdHRhY2hWaWV3KGUpe2xldCBpPWU7dGhpcy5fdmlld3MucHVzaChpKSxpLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRldGFjaFZpZXcoZSl7bGV0IGk9ZTtLQyh0aGlzLl92aWV3cyxpKSxpLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChlKXt0aGlzLmF0dGFjaFZpZXcoZS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goZSk7bGV0IGk9dGhpcy5faW5qZWN0b3IuZ2V0KEJkZSxbXSk7aS5wdXNoKC4uLnRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycyksaS5mb3JFYWNoKHI9PnIoZSkpfW5nT25EZXN0cm95KCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl0cnl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGU9PmUoKSksdGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShlKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpLCgpPT5LQyh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGUpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IHl0KDQwNiwhMSk7bGV0IGU9dGhpcy5faW5qZWN0b3I7ZS5kZXN0cm95JiYhZS5kZXN0cm95ZWQmJmUuZGVzdHJveSgpfWdldCB2aWV3Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofXdhcm5JZkRlc3Ryb3llZCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhhdCksayhwYyksayhycykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIEtDKG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9dmFyICR0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPVFkZSxufSkoKTtmdW5jdGlvbiBRZGUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihUTShuKSYmIWUpe2xldCBpPWlkKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyBqcChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3IGpwKHRbYmxdLHQpOm51bGx9KFBvKCksWmUoKSwxNj09KDE2Jm4pKX12YXIgeE09Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIFV6KHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IFJQKHQpfX0sS2RlPShuLHQpPT50LFJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxLZGV9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PEdIKGkscixvKT9lOmksYT1HSChzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcixkPWwtcjtpZihjIT1kKXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgZj1wPG8ubGVuZ3RoP29bcF06b1twXT0wLG09ZitwO2Q8PW0mJm08YyYmKG9bcF09ZisxKX1vW3MucHJldmlvdXNJbmRleF09ZC1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIVV6KHQpKXRocm93IG5ldyB5dCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IoOyEoaT1lLm5leHQoKSkuZG9uZTspdChpLnZhbHVlKX19KHQsYT0+e3M9dGhpcy5fdHJhY2tCeUZuKHIsYSksbnVsbCE9PWUmJk9iamVjdC5pcyhlLnRyYWNrQnlJZCxzKT8oaSYmKGU9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oZSxhLHMscikpLE9iamVjdC5pcyhlLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGUsYSkpOihlPXRoaXMuX21pc21hdGNoKGUsYSxzLHIpLGk9ITApLGU9ZS5fbmV4dCxyKyt9KSx0aGlzLmxlbmd0aD1yO3JldHVybiB0aGlzLl90cnVuY2F0ZShlKSx0aGlzLmNvbGxlY3Rpb249dCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IHQ7Zm9yKHQ9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0TW92ZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaCh0LGUsaSxyKXtsZXQgbztyZXR1cm4gbnVsbD09PXQ/bz10aGlzLl9pdFRhaWw6KG89dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLG51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpKT8oT2JqZWN0LmlzKHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsbyxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoaSxyKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsbyxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgUFAoZSxpKSxvLHIpLHR9X3ZlcmlmeVJlaW5zZXJ0aW9uKHQsZSxpLHIpe2xldCBvPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGksbnVsbCk7cmV0dXJuIG51bGwhPT1vP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihvLHQuX3ByZXYscik6dC5jdXJyZW50SW5kZXghPXImJih0LmN1cnJlbnRJbmRleD1yLHRoaXMuX2FkZFRvTW92ZXModCxyKSksdH1fdHJ1bmNhdGUodCl7Zm9yKDtudWxsIT09dDspe2xldCBlPXQuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpLHQ9ZX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcih0LGUsaSl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgcj10Ll9wcmV2UmVtb3ZlZCxvPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9bzpyLl9uZXh0UmVtb3ZlZD1vLG51bGw9PT1vP3RoaXMuX3JlbW92YWxzVGFpbD1yOm8uX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLGkpLHRoaXMuX2FkZFRvTW92ZXModCxpKSx0fV9tb3ZlQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLGkpLHRoaXMuX2FkZFRvTW92ZXModCxpKSx0fV9hZGRBZnRlcih0LGUsaSl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0fV9pbnNlcnRBZnRlcih0LGUsaSl7bGV0IHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IENNKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1pLHR9X3JlbW92ZSh0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfV91bmxpbmsodCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKHQpO2xldCBlPXQuX3ByZXYsaT10Ll9uZXh0O3JldHVybiBudWxsPT09ZT90aGlzLl9pdEhlYWQ9aTplLl9uZXh0PWksbnVsbD09PWk/dGhpcy5faXRUYWlsPWU6aS5fcHJldj1lLHR9X2FkZFRvTW92ZXModCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQpLHR9X2FkZFRvUmVtb3ZhbHModCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IENNKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW51bGwsdC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPXQsdC5fcHJldlJlbW92ZWQ9bnVsbCk6KHQuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD10KSx0fV9hZGRJZGVudGl0eUNoYW5nZSh0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fX0sUFA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19LENNPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQodCl7bGV0IGU9dC50cmFja0J5SWQsaT10aGlzLm1hcC5nZXQoZSk7aXx8KGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQodCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD10LHQuX25leHREdXA9bnVsbCx0Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPXQsdC5fcHJldkR1cD10aGlzLl90YWlsLHQuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPXQpfWdldCh0LGUpe2xldCBpO2ZvcihpPXRoaXMuX2hlYWQ7bnVsbCE9PWk7aT1pLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9aS5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoaS50cmFja0J5SWQsdCkpcmV0dXJuIGk7cmV0dXJuIG51bGx9cmVtb3ZlKHQpe2xldCBlPXQuX3ByZXZEdXAsaT10Ll9uZXh0RHVwO3JldHVybiBudWxsPT09ZT90aGlzLl9oZWFkPWk6ZS5fbmV4dER1cD1pLG51bGw9PT1pP3RoaXMuX3RhaWw9ZTppLl9wcmV2RHVwPWUsbnVsbD09PXRoaXMuX2hlYWR9fSx0aGlzLm1hcC5zZXQoZSxpKSksaS5hZGQodCl9Z2V0KHQsZSl7bGV0IHI9dGhpcy5tYXAuZ2V0KHQpO3JldHVybiByP3IuZ2V0KHQsZSk6bnVsbH1yZW1vdmUodCl7bGV0IGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19O2Z1bmN0aW9uIEdIKG4sdCxlKXtsZXQgaT1uLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWkpcmV0dXJuIGk7bGV0IHI9MDtyZXR1cm4gZSYmaTxlLmxlbmd0aCYmKHI9ZVtpXSksaSt0K3J9dmFyIE1NPWNsYXNze2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxFTyh0KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGtQfX0sa1A9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH1mb3JFYWNoSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9tYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9Zm9yRWFjaENoYW5nZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dENoYW5nZWQpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoUmVtb3ZlZEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX1kaWZmKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9mIE1hcHx8RU8odCkpKXRocm93IG5ldyB5dCg5MDAsITEpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgZT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LChpLHIpPT57aWYoZSYmZS5rZXk9PT1yKXRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGUsaSksdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxlPWUuX25leHQ7ZWxzZXtsZXQgbz10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShyLGkpO2U9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoZSxvKX19KSxlKXtlLl9wcmV2JiYoZS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9ZTtmb3IobGV0IGk9ZTtudWxsIT09aTtpPWkuX25leHRSZW1vdmVkKWk9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShpLmtleSksaS5fbmV4dFJlbW92ZWQ9aS5fbmV4dCxpLnByZXZpb3VzVmFsdWU9aS5jdXJyZW50VmFsdWUsaS5jdXJyZW50VmFsdWU9bnVsbCxpLl9wcmV2PW51bGwsaS5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQodCxlKXtpZih0KXtsZXQgaT10Ll9wcmV2O3JldHVybiBlLl9uZXh0PXQsZS5fcHJldj1pLHQuX3ByZXY9ZSxpJiYoaS5fbmV4dD1lKSx0PT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9ZSksdGhpcy5fYXBwZW5kQWZ0ZXI9dCx0fXJldHVybiB0aGlzLl9hcHBlbmRBZnRlcj8odGhpcy5fYXBwZW5kQWZ0ZXIuX25leHQ9ZSxlLl9wcmV2PXRoaXMuX2FwcGVuZEFmdGVyKTp0aGlzLl9tYXBIZWFkPWUsdGhpcy5fYXBwZW5kQWZ0ZXI9ZSxudWxsfV9nZXRPckNyZWF0ZVJlY29yZEZvcktleSh0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXtsZXQgcj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhyLGUpO2xldCBvPXIuX3ByZXYscz1yLl9uZXh0O3JldHVybiBvJiYoby5fbmV4dD1zKSxzJiYocy5fcHJldj1vKSxyLl9uZXh0PW51bGwsci5fcHJldj1udWxsLHJ9bGV0IGk9bmV3IEZQKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LGkpLGkuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMoaSksaX1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCx0PXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0Q2hhbmdlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT10O3Q9dC5fbmV4dEFkZGVkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXModCxlKXtPYmplY3QuaXMoZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfV9hZGRUb0FkZGl0aW9ucyh0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX1fYWRkVG9DaGFuZ2VzKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX1fZm9yRWFjaCh0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+ZSh0W2ldLGkpKX19LEZQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMua2V5PXQsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19O2Z1bmN0aW9uIFdIKCl7cmV0dXJuIG5ldyB3bChbbmV3IHhNXSl9dmFyIHdsPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5mYWN0b3JpZXM9ZX1zdGF0aWMgY3JlYXRlKGUsaSl7aWYobnVsbCE9aSl7bGV0IHI9aS5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTppPT5uLmNyZWF0ZShlLGl8fFdIKCkpLGRlcHM6W1tuLG5ldyBzZCxuZXcgVHNdXX19ZmluZChlKXtsZXQgaT10aGlzLmZhY3Rvcmllcy5maW5kKHI9PnIuc3VwcG9ydHMoZSkpO2lmKG51bGwhPWkpcmV0dXJuIGk7dGhyb3cgbmV3IHl0KDkwMSwhMSl9fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpXSH0pLG59KSgpO2Z1bmN0aW9uIHFIKCl7cmV0dXJuIG5ldyB4YihbbmV3IE1NXSl9dmFyIHhiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5mYWN0b3JpZXM9ZX1zdGF0aWMgY3JlYXRlKGUsaSl7aWYoaSl7bGV0IHI9aS5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgbihlKX1zdGF0aWMgZXh0ZW5kKGUpe3JldHVybntwcm92aWRlOm4sdXNlRmFjdG9yeTppPT5uLmNyZWF0ZShlLGl8fHFIKCkpLGRlcHM6W1tuLG5ldyBzZCxuZXcgVHNdXX19ZmluZChlKXtsZXQgaT10aGlzLmZhY3Rvcmllcy5maW5kKHI9PnIuc3VwcG9ydHMoZSkpO2lmKGkpcmV0dXJuIGk7dGhyb3cgbmV3IHl0KDkwMSwhMSl9fXJldHVybiBuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpxSH0pLG59KSgpLEpkZT1bbmV3IE1NXSwkZGU9W25ldyB4TV0sTWo9KG5ldyB3bCgkZGUpLG5ldyB4YihKZGUpLEJPKG51bGwsImNvcmUiLFtdKSksd2o9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeWMpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gJE0obil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbj9uOm51bGwhPW4mJiJmYWxzZSIhPT1ufXZhciBldWU9IjoiLGR1PWNsYXNze3N0YXRpYyB6ZXJvKCl7cmV0dXJuIG5ldyBkdShbMF0pfXN0YXRpYyBvbmUoKXtyZXR1cm4gbmV3IGR1KFsxXSl9Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1jbG9uZSgpe3JldHVybiBuZXcgZHUodGhpcy5kaWdpdHMuc2xpY2UoKSl9YWRkKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtyZXR1cm4gZS5hZGRUb1NlbGYodCksZX1hZGRUb1NlbGYodCl7bGV0IGU9TWF0aC5tYXgodGhpcy5kaWdpdHMubGVuZ3RoLHQuZGlnaXRzLmxlbmd0aCksaT0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBvPWk7cjx0aGlzLmRpZ2l0cy5sZW5ndGgmJihvKz10aGlzLmRpZ2l0c1tyXSkscjx0LmRpZ2l0cy5sZW5ndGgmJihvKz10LmRpZ2l0c1tyXSksbz49MTA/KHRoaXMuZGlnaXRzW3JdPW8tMTAsaT0xKToodGhpcy5kaWdpdHNbcl09byxpPTApfWk+MCYmKHRoaXMuZGlnaXRzW2VdPTEpfXRvU3RyaW5nKCl7bGV0IHQ9IiI7Zm9yKGxldCBlPXRoaXMuZGlnaXRzLmxlbmd0aC0xO2U+PTA7ZS0tKXQrPXRoaXMuZGlnaXRzW2VdO3JldHVybiB0fX0sZXc9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3dlck9mVHdvcz1bdF19Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5wb3dlck9mVHdvc1swXX1tdWx0aXBseUJ5KHQpe2xldCBlPWR1Lnplcm8oKTtyZXR1cm4gdGhpcy5tdWx0aXBseUJ5QW5kQWRkVG8odCxlKSxlfW11bHRpcGx5QnlBbmRBZGRUbyh0LGUpe2ZvcihsZXQgaT0wOzAhPT10O3Q+Pj49MSxpKyspaWYoMSZ0KXtsZXQgcj10aGlzLmdldE11bHRpcGxpZWRCeVBvd2VyT2ZUd28oaSk7ZS5hZGRUb1NlbGYocil9fWdldE11bHRpcGxpZWRCeVBvd2VyT2ZUd28odCl7Zm9yKGxldCBlPXRoaXMucG93ZXJPZlR3b3MubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLnBvd2VyT2ZUd29zW2UtMV07dGhpcy5wb3dlck9mVHdvc1tlXT1pLmFkZChpKX1yZXR1cm4gdGhpcy5wb3dlck9mVHdvc1t0XX19O25ldyBjbGFzc3t2aXNpdFRleHQodCxlKXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0LGUpe3JldHVybmBbJHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfV1gfXZpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb259LCAke3QudHlwZX0sICR7aS5qb2luKCIsICIpfX1gfXZpc2l0VGFnUGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdC5pc1ZvaWQ/YDxwaCB0YWcgbmFtZT0iJHt0LnN0YXJ0TmFtZX0iLz5gOmA8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ij4ke3QuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiwgIil9PC9waCBuYW1lPSIke3QuY2xvc2VOYW1lfSI+YH12aXNpdFBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQudmFsdWU/YDxwaCBuYW1lPSIke3QubmFtZX0iPiR7dC52YWx1ZX08L3BoPmA6YDxwaCBuYW1lPSIke3QubmFtZX0iLz5gfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm5gPHBoIGljdSBuYW1lPSIke3QubmFtZX0iPiR7dC52YWx1ZS52aXNpdCh0aGlzKX08L3BoPmB9fSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBldyhkdS5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgZXcoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KTt2YXIgdHc9ZnVuY3Rpb24obiwuLi50KXtpZih0dy50cmFuc2xhdGUpe2xldCBpPXR3LnRyYW5zbGF0ZShuLHQpO249aVswXSx0PWlbMV19bGV0IGU9U2ooblswXSxuLnJhd1swXSk7Zm9yKGxldCBpPTE7aTxuLmxlbmd0aDtpKyspZSs9dFtpLTFdK1NqKG5baV0sbi5yYXdbaV0pO3JldHVybiBlfSxudWU9IjoiO2Z1bmN0aW9uIFNqKG4sdCl7cmV0dXJuIHQuY2hhckF0KDApPT09bnVlP24uc3Vic3RyaW5nKGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTEsaT0xO2U8bi5sZW5ndGg7ZSsrLGkrKylpZigiXFwiPT09dFtpXSlpKys7ZWxzZSBpZihuW2VdPT09ZXVlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW50ZXJtaW5hdGVkICRsb2NhbGl6ZSBtZXRhZGF0YSBibG9jayBpbiAiJHt0fSIuYCl9KG4sdCkrMSk6bn0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCkuJGxvY2FsaXplPXR3O3ZhciBZTz1udWxsO2Z1bmN0aW9uIFRsKCl7cmV0dXJuIFlPfXZhciBkdz1jbGFzc3t9LEx0PW5ldyBpZSgiRG9jdW1lbnRUb2tlbiIpLExqPSgoKT0+e2NsYXNzIG57aGlzdG9yeUdvKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBrKEJqKX0scHJvdmlkZWRJbjoicGxhdGZvcm0ifSksbn0pKCk7bmV3IGllKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO3ZhciBCaj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTGp7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cuaGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gVGwoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoZSl7bGV0IGk9VGwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSl9b25IYXNoQ2hhbmdlKGUpe2xldCBpPVRsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9ZX1wdXNoU3RhdGUoZSxpLHIpe1RqKCk/dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUoZSxpLHIpOnRoaXMuX2xvY2F0aW9uLmhhc2g9cn1yZXBsYWNlU3RhdGUoZSxpLHIpe1RqKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoZSxpLHIpOnRoaXMuX2xvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQmooayhMdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiBUaigpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIFZqKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBEaihuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gWHAobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgSk89KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGFpKHN1ZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksb3VlPW5ldyBpZSgiYXBwQmFzZUhyZWYiKSxzdWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEpPe2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/YWkoTHQpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBWaih0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrWHAodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IHM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitYcChvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLHMpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK1hwKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGkscyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMaiksayhvdWUsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHdiPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgRix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbihuKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChuKSl7bGV0WyxlXT1uLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGV9cmV0dXJuIG59KERqKElqKGkpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrWHAoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtpZighbnx8IXQuc3RhcnRzV2l0aChuKSlyZXR1cm4gdDtsZXQgZT10LnN1YnN0cmluZyhuLmxlbmd0aCk7cmV0dXJuIiI9PT1lfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhlWzBdKT9lOnR9KHRoaXMuX2Jhc2VQYXRoLElqKGUpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBlJiYiLyIhPT1lWzBdJiYoZT0iLyIrZSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoZSl9Z28oZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1hwKGkpKSxyKX1yZXBsYWNlU3RhdGUoZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1hwKGkpKSxyKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oZSl9b25VcmxDaGFuZ2UoZSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGUpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZShpPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGkudXJsLGkuc3RhdGUpfSkpLCgpPT57bGV0IGk9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShpLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhlPSIiLGkpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKHI9PnIoZSxpKSl9c3Vic2NyaWJlKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppLGNvbXBsZXRlOnJ9KX19cmV0dXJuIG4ubm9ybWFsaXplUXVlcnlQYXJhbXM9WHAsbi5qb2luV2l0aFNsYXNoPVZqLG4uc3RyaXBUcmFpbGluZ1NsYXNoPURqLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhKTykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgd2IoayhKTykpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIElqKG4pe3JldHVybiBuLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgbHc9KCgpPT57cmV0dXJuKG49bHd8fChsdz17fSkpW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLlBlcmNlbnQ9MV09IlBlcmNlbnQiLG5bbi5DdXJyZW5jeT0yXT0iQ3VycmVuY3kiLG5bbi5TY2llbnRpZmljPTNdPSJTY2llbnRpZmljIixsdzt2YXIgbn0pKCksa289KCgpPT57cmV0dXJuKG49a298fChrbz17fSkpW24uRm9ybWF0PTBdPSJGb3JtYXQiLG5bbi5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixrbzt2YXIgbn0pKCkscWk9KCgpPT57cmV0dXJuKG49cWl8fChxaT17fSkpW24uTmFycm93PTBdPSJOYXJyb3ciLG5bbi5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLG5bbi5XaWRlPTJdPSJXaWRlIixuW24uU2hvcnQ9M109IlNob3J0IixxaTt2YXIgbn0pKCksYXM9KCgpPT57cmV0dXJuKG49YXN8fChhcz17fSkpW24uU2hvcnQ9MF09IlNob3J0IixuW24uTWVkaXVtPTFdPSJNZWRpdW0iLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRnVsbD0zXT0iRnVsbCIsYXM7dmFyIG59KSgpLEdvPSgoKT0+e3JldHVybihuPUdvfHwoR289e30pKVtuLkRlY2ltYWw9MF09IkRlY2ltYWwiLG5bbi5Hcm91cD0xXT0iR3JvdXAiLG5bbi5MaXN0PTJdPSJMaXN0IixuW24uUGVyY2VudFNpZ249M109IlBlcmNlbnRTaWduIixuW24uUGx1c1NpZ249NF09IlBsdXNTaWduIixuW24uTWludXNTaWduPTVdPSJNaW51c1NpZ24iLG5bbi5FeHBvbmVudGlhbD02XT0iRXhwb25lbnRpYWwiLG5bbi5TdXBlcnNjcmlwdGluZ0V4cG9uZW50PTddPSJTdXBlcnNjcmlwdGluZ0V4cG9uZW50IixuW24uUGVyTWlsbGU9OF09IlBlck1pbGxlIixuW24uSW5maW5pdHk9OV09IkluZmluaXR5IixuW24uTmFOPTEwXT0iTmFOIixuW24uVGltZVNlcGFyYXRvcj0xMV09IlRpbWVTZXBhcmF0b3IiLG5bbi5DdXJyZW5jeURlY2ltYWw9MTJdPSJDdXJyZW5jeURlY2ltYWwiLG5bbi5DdXJyZW5jeUdyb3VwPTEzXT0iQ3VycmVuY3lHcm91cCIsR287dmFyIG59KSgpO2Z1bmN0aW9uIG53KG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLkRhdGVGb3JtYXRdLHQpfWZ1bmN0aW9uIGl3KG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLlRpbWVGb3JtYXRdLHQpfWZ1bmN0aW9uIHJ3KG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLkRhdGVUaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiB1ZChuLHQpe2xldCBlPVJzKG4pLGk9ZVtnci5OdW1iZXJTeW1ib2xzXVt0XTtpZih0eXBlb2YgaT4idSIpe2lmKHQ9PT1Hby5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIGVbZ3IuTnVtYmVyU3ltYm9sc11bR28uRGVjaW1hbF07aWYodD09PUdvLkN1cnJlbmN5R3JvdXApcmV0dXJuIGVbZ3IuTnVtYmVyU3ltYm9sc11bR28uR3JvdXBdfXJldHVybiBpfWZ1bmN0aW9uIEhqKG4pe2lmKCFuW2dyLkV4dHJhRGF0YV0pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke25bZ3IuTG9jYWxlSWRdfSIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS5gKX1mdW5jdGlvbiBOYShuLHQpe2ZvcihsZXQgZT10O2U+LTE7ZS0tKWlmKHR5cGVvZiBuW2VdPCJ1IilyZXR1cm4gbltlXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gek8obil7bGV0W3QsZV09bi5zcGxpdCgiOiIpO3JldHVybntob3VyczordCxtaW51dGVzOitlfX12YXIgYnVlPS9eKFxkezQsfSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sQ2I9e30sdnVlPS8oKD86W15CRUdITE1PU1dZWmFiY2RobXN3eXonXSspfCg/OicoPzpbXiddfCcnKSonKXwoPzpHezEsNX18eXsxLDR9fFl7MSw0fXxNezEsNX18THsxLDV9fHd7MSwyfXxXezF9fGR7MSwyfXxFezEsNn18Y3sxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS8sRWw9KCgpPT57cmV0dXJuKG49RWx8fChFbD17fSkpW24uU2hvcnQ9MF09IlNob3J0IixuW24uU2hvcnRHTVQ9MV09IlNob3J0R01UIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkV4dGVuZGVkPTNdPSJFeHRlbmRlZCIsRWw7dmFyIG59KSgpLElpPSgoKT0+e3JldHVybihuPUlpfHwoSWk9e30pKVtuLkZ1bGxZZWFyPTBdPSJGdWxsWWVhciIsbltuLk1vbnRoPTFdPSJNb250aCIsbltuLkRhdGU9Ml09IkRhdGUiLG5bbi5Ib3Vycz0zXT0iSG91cnMiLG5bbi5NaW51dGVzPTRdPSJNaW51dGVzIixuW24uU2Vjb25kcz01XT0iU2Vjb25kcyIsbltuLkZyYWN0aW9uYWxTZWNvbmRzPTZdPSJGcmFjdGlvbmFsU2Vjb25kcyIsbltuLkRheT03XT0iRGF5IixJaTt2YXIgbn0pKCksRGk9KCgpPT57cmV0dXJuKG49RGl8fChEaT17fSkpW24uRGF5UGVyaW9kcz0wXT0iRGF5UGVyaW9kcyIsbltuLkRheXM9MV09IkRheXMiLG5bbi5Nb250aHM9Ml09Ik1vbnRocyIsbltuLkVyYXM9M109IkVyYXMiLERpO3ZhciBufSkoKTtmdW5jdGlvbiB5dWUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7aWYoQWoobikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuJiYhaXNOYU4obikpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYobj1uLnRyaW0oKSwvXihcZHs0fSgtXGR7MSwyfSgtXGR7MSwyfSk/KT8pJC8udGVzdChuKSl7bGV0W3Isbz0xLHM9MV09bi5zcGxpdCgiLSIpLm1hcChhPT4rYSk7cmV0dXJuIHV3KHIsby0xLHMpfWxldCBpLGU9cGFyc2VGbG9hdChuKTtpZighaXNOYU4obi1lKSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoaT1uLm1hdGNoKGJ1ZSkpcmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PW5ldyBEYXRlKDApLGU9MCxpPTAscj1uWzhdP3Quc2V0VVRDRnVsbFllYXI6dC5zZXRGdWxsWWVhcixvPW5bOF0/dC5zZXRVVENIb3Vyczp0LnNldEhvdXJzO25bOV0mJihlPU51bWJlcihuWzldK25bMTBdKSxpPU51bWJlcihuWzldK25bMTFdKSksci5jYWxsKHQsTnVtYmVyKG5bMV0pLE51bWJlcihuWzJdKS0xLE51bWJlcihuWzNdKSk7bGV0IHM9TnVtYmVyKG5bNF18fDApLWUsYT1OdW1iZXIobls1XXx8MCktaSxsPU51bWJlcihuWzZdfHwwKSxjPU1hdGguZmxvb3IoMWUzKnBhcnNlRmxvYXQoIjAuIisobls3XXx8MCkpKTtyZXR1cm4gby5jYWxsKHQscyxhLGwsYyksdH0oaSl9bGV0IHQ9bmV3IERhdGUobik7aWYoIUFqKHQpKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnZlcnQgIiR7bn0iIGludG8gYSBkYXRlYCk7cmV0dXJuIHR9KG4pO3Q9ZGQoZSx0KXx8dDtsZXQgYSxzPVtdO2Zvcig7dDspe2lmKGE9dnVlLmV4ZWModCksIWEpe3MucHVzaCh0KTticmVha317cz1zLmNvbmNhdChhLnNsaWNlKDEpKTtsZXQgZD1zLnBvcCgpO2lmKCFkKWJyZWFrO3Q9ZH19bGV0IGw9ci5nZXRUaW1lem9uZU9mZnNldCgpO2kmJihsPVVqKGksbCkscj1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybihuPW5ldyBEYXRlKG4uZ2V0VGltZSgpKSkuc2V0TWludXRlcyhuLmdldE1pbnV0ZXMoKSt0KSxufShuLC0xKihVaih0LHIpLXIpKX0ocixpKSk7bGV0IGM9IiI7cmV0dXJuIHMuZm9yRWFjaChkPT57bGV0IHU9ZnVuY3Rpb24obil7aWYoak9bbl0pcmV0dXJuIGpPW25dO2xldCB0O3N3aXRjaChuKXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjp0PW9yKERpLkVyYXMscWkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6dD1vcihEaS5FcmFzLHFpLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOnQ9b3IoRGkuRXJhcyxxaS5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6dD1lbyhJaS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOnQ9ZW8oSWkuRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6dD1lbyhJaS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6dD1lbyhJaS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6dD1hdygxKTticmVhaztjYXNlIllZIjp0PWF3KDIsITApO2JyZWFrO2Nhc2UiWVlZIjp0PWF3KDMpO2JyZWFrO2Nhc2UiWVlZWSI6dD1hdyg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6dD1lbyhJaS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOnQ9ZW8oSWkuTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6dD1vcihEaS5Nb250aHMscWkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6dD1vcihEaS5Nb250aHMscWkuV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6dD1vcihEaS5Nb250aHMscWkuTmFycm93KTticmVhaztjYXNlIkxMTCI6dD1vcihEaS5Nb250aHMscWkuQWJicmV2aWF0ZWQsa28uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjp0PW9yKERpLk1vbnRocyxxaS5XaWRlLGtvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOnQ9b3IoRGkuTW9udGhzLHFpLk5hcnJvdyxrby5TdGFuZGFsb25lKTticmVhaztjYXNlInciOnQ9VU8oMSk7YnJlYWs7Y2FzZSJ3dyI6dD1VTygyKTticmVhaztjYXNlIlciOnQ9VU8oMSwhMCk7YnJlYWs7Y2FzZSJkIjp0PWVvKElpLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6dD1lbyhJaS5EYXRlLDIpO2JyZWFrO2Nhc2UiYyI6Y2FzZSJjYyI6dD1lbyhJaS5EYXksMSk7YnJlYWs7Y2FzZSJjY2MiOnQ9b3IoRGkuRGF5cyxxaS5BYmJyZXZpYXRlZCxrby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2MiOnQ9b3IoRGkuRGF5cyxxaS5XaWRlLGtvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2MiOnQ9b3IoRGkuRGF5cyxxaS5OYXJyb3csa28uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjY2MiOnQ9b3IoRGkuRGF5cyxxaS5TaG9ydCxrby5TdGFuZGFsb25lKTticmVhaztjYXNlIkUiOmNhc2UiRUUiOmNhc2UiRUVFIjp0PW9yKERpLkRheXMscWkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiRUVFRSI6dD1vcihEaS5EYXlzLHFpLldpZGUpO2JyZWFrO2Nhc2UiRUVFRUUiOnQ9b3IoRGkuRGF5cyxxaS5OYXJyb3cpO2JyZWFrO2Nhc2UiRUVFRUVFIjp0PW9yKERpLkRheXMscWkuU2hvcnQpO2JyZWFrO2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnQ9b3IoRGkuRGF5UGVyaW9kcyxxaS5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJhYWFhIjp0PW9yKERpLkRheVBlcmlvZHMscWkuV2lkZSk7YnJlYWs7Y2FzZSJhYWFhYSI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLk5hcnJvdyk7YnJlYWs7Y2FzZSJiIjpjYXNlImJiIjpjYXNlImJiYiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLkFiYnJldmlhdGVkLGtvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLldpZGUsa28uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiYiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLk5hcnJvdyxrby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjp0PW9yKERpLkRheVBlcmlvZHMscWkuQWJicmV2aWF0ZWQsa28uRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkIiOnQ9b3IoRGkuRGF5UGVyaW9kcyxxaS5XaWRlLGtvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCQiI6dD1vcihEaS5EYXlQZXJpb2RzLHFpLk5hcnJvdyxrby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiaCI6dD1lbyhJaS5Ib3VycywxLC0xMik7YnJlYWs7Y2FzZSJoaCI6dD1lbyhJaS5Ib3VycywyLC0xMik7YnJlYWs7Y2FzZSJIIjp0PWVvKElpLkhvdXJzLDEpO2JyZWFrO2Nhc2UiSEgiOnQ9ZW8oSWkuSG91cnMsMik7YnJlYWs7Y2FzZSJtIjp0PWVvKElpLk1pbnV0ZXMsMSk7YnJlYWs7Y2FzZSJtbSI6dD1lbyhJaS5NaW51dGVzLDIpO2JyZWFrO2Nhc2UicyI6dD1lbyhJaS5TZWNvbmRzLDEpO2JyZWFrO2Nhc2Uic3MiOnQ9ZW8oSWkuU2Vjb25kcywyKTticmVhaztjYXNlIlMiOnQ9ZW8oSWkuRnJhY3Rpb25hbFNlY29uZHMsMSk7YnJlYWs7Y2FzZSJTUyI6dD1lbyhJaS5GcmFjdGlvbmFsU2Vjb25kcywyKTticmVhaztjYXNlIlNTUyI6dD1lbyhJaS5GcmFjdGlvbmFsU2Vjb25kcywzKTticmVhaztjYXNlIloiOmNhc2UiWloiOmNhc2UiWlpaIjp0PXN3KEVsLlNob3J0KTticmVhaztjYXNlIlpaWlpaIjp0PXN3KEVsLkV4dGVuZGVkKTticmVhaztjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpjYXNlInoiOmNhc2UienoiOmNhc2Uienp6Ijp0PXN3KEVsLlNob3J0R01UKTticmVhaztjYXNlIk9PT08iOmNhc2UiWlpaWiI6Y2FzZSJ6enp6Ijp0PXN3KEVsLkxvbmcpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIGpPW25dPXQsdH0oZCk7Yys9dT91KHIsZSxsKToiJyciPT09ZD8iJyI6ZC5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pLGN9ZnVuY3Rpb24gdXcobix0LGUpe2xldCBpPW5ldyBEYXRlKDApO3JldHVybiBpLnNldEZ1bGxZZWFyKG4sdCxlKSxpLnNldEhvdXJzKDAsMCwwKSxpfWZ1bmN0aW9uIGRkKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIFJzKG4pW2dyLkxvY2FsZUlkXX0obik7aWYoQ2JbZV09Q2JbZV18fHt9LENiW2VdW3RdKXJldHVybiBDYltlXVt0XTtsZXQgaT0iIjtzd2l0Y2godCl7Y2FzZSJzaG9ydERhdGUiOmk9bncobixhcy5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPW53KG4sYXMuTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPW53KG4sYXMuTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1udyhuLGFzLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPWl3KG4sYXMuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1pdyhuLGFzLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1pdyhuLGFzLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9aXcobixhcy5GdWxsKTticmVhaztjYXNlInNob3J0IjpsZXQgcj1kZChuLCJzaG9ydFRpbWUiKSxvPWRkKG4sInNob3J0RGF0ZSIpO2k9b3cocncobixhcy5TaG9ydCksW3Isb10pO2JyZWFrO2Nhc2UibWVkaXVtIjpsZXQgcz1kZChuLCJtZWRpdW1UaW1lIiksYT1kZChuLCJtZWRpdW1EYXRlIik7aT1vdyhydyhuLGFzLk1lZGl1bSksW3MsYV0pO2JyZWFrO2Nhc2UibG9uZyI6bGV0IGw9ZGQobiwibG9uZ1RpbWUiKSxjPWRkKG4sImxvbmdEYXRlIik7aT1vdyhydyhuLGFzLkxvbmcpLFtsLGNdKTticmVhaztjYXNlImZ1bGwiOmxldCBkPWRkKG4sImZ1bGxUaW1lIiksdT1kZChuLCJmdWxsRGF0ZSIpO2k9b3cocncobixhcy5GdWxsKSxbZCx1XSl9cmV0dXJuIGkmJihDYltlXVt0XT1pKSxpfWZ1bmN0aW9uIG93KG4sdCl7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSgvXHsoW159XSspfS9nLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG51bGwhPXQmJmkgaW4gdD90W2ldOmV9KSksbn1mdW5jdGlvbiBTbChuLHQsZT0iLSIsaSxyKXtsZXQgbz0iIjsobjwwfHxyJiZuPD0wKSYmKHI/bj0xLW46KG49LW4sbz1lKSk7bGV0IHM9U3RyaW5nKG4pO2Zvcig7cy5sZW5ndGg8dDspcz0iMCIrcztyZXR1cm4gaSYmKHM9cy5zbGljZShzLmxlbmd0aC10KSksbytzfWZ1bmN0aW9uIGVvKG4sdCxlPTAsaT0hMSxyPSExKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtsZXQgYT1mdW5jdGlvbihuLHQpe3N3aXRjaChuKXtjYXNlIElpLkZ1bGxZZWFyOnJldHVybiB0LmdldEZ1bGxZZWFyKCk7Y2FzZSBJaS5Nb250aDpyZXR1cm4gdC5nZXRNb250aCgpO2Nhc2UgSWkuRGF0ZTpyZXR1cm4gdC5nZXREYXRlKCk7Y2FzZSBJaS5Ib3VyczpyZXR1cm4gdC5nZXRIb3VycygpO2Nhc2UgSWkuTWludXRlczpyZXR1cm4gdC5nZXRNaW51dGVzKCk7Y2FzZSBJaS5TZWNvbmRzOnJldHVybiB0LmdldFNlY29uZHMoKTtjYXNlIElpLkZyYWN0aW9uYWxTZWNvbmRzOnJldHVybiB0LmdldE1pbGxpc2Vjb25kcygpO2Nhc2UgSWkuRGF5OnJldHVybiB0LmdldERheSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERhdGVUeXBlIHZhbHVlICIke259Ii5gKX19KG4sbyk7aWYoKGU+MHx8YT4tZSkmJihhKz1lKSxuPT09SWkuSG91cnMpMD09PWEmJi0xMj09PWUmJihhPTEyKTtlbHNlIGlmKG49PT1JaS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gU2wobiwzKS5zdWJzdHJpbmcoMCx0KX0oYSx0KTtsZXQgbD11ZChzLEdvLk1pbnVzU2lnbik7cmV0dXJuIFNsKGEsdCxsLGkscil9fWZ1bmN0aW9uIG9yKG4sdCxlPWtvLkZvcm1hdCxpPSExKXtyZXR1cm4gZnVuY3Rpb24ocixvKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSxyLG8pe3N3aXRjaChlKXtjYXNlIERpLk1vbnRoczpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPVJzKG4pLG89TmEoW2lbZ3IuTW9udGhzRm9ybWF0XSxpW2dyLk1vbnRoc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gTmEobyxlKX0odCxyLGkpW24uZ2V0TW9udGgoKV07Y2FzZSBEaS5EYXlzOnJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9UnMobiksbz1OYShbaVtnci5EYXlzRm9ybWF0XSxpW2dyLkRheXNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIE5hKG8sZSl9KHQscixpKVtuLmdldERheSgpXTtjYXNlIERpLkRheVBlcmlvZHM6bGV0IHM9bi5nZXRIb3VycygpLGE9bi5nZXRNaW51dGVzKCk7aWYobyl7bGV0IGM9ZnVuY3Rpb24obil7bGV0IHQ9UnMobik7cmV0dXJuIEhqKHQpLCh0W2dyLkV4dHJhRGF0YV1bMl18fFtdKS5tYXAoaT0+InN0cmluZyI9PXR5cGVvZiBpP3pPKGkpOlt6TyhpWzBdKSx6TyhpWzFdKV0pfSh0KSxkPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1ScyhuKTtIaihpKTtsZXQgbz1OYShbaVtnci5FeHRyYURhdGFdWzBdLGlbZ3IuRXh0cmFEYXRhXVsxXV0sdCl8fFtdO3JldHVybiBOYShvLGUpfHxbXX0odCxyLGkpLHU9Yy5maW5kSW5kZXgocD0+e2lmKEFycmF5LmlzQXJyYXkocCkpe2xldFtmLG1dPXAsYj1zPj1mLmhvdXJzJiZhPj1mLm1pbnV0ZXMsTT1zPG0uaG91cnN8fHM9PT1tLmhvdXJzJiZhPG0ubWludXRlcztpZihmLmhvdXJzPG0uaG91cnMpe2lmKGImJk0pcmV0dXJuITB9ZWxzZSBpZihifHxNKXJldHVybiEwfWVsc2UgaWYocC5ob3Vycz09PXMmJnAubWludXRlcz09PWEpcmV0dXJuITA7cmV0dXJuITF9KTtpZigtMSE9PXUpcmV0dXJuIGRbdV19cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1ScyhuKSxvPU5hKFtpW2dyLkRheVBlcmlvZHNGb3JtYXRdLGlbZ3IuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gTmEobyxlKX0odCxyLGkpW3M8MTI/MDoxXTtjYXNlIERpLkVyYXM6cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIE5hKFJzKG4pW2dyLkVyYXNdLHQpfSh0LGkpW24uZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgJHtlfWApfX0ocixvLG4sdCxlLGkpfX1mdW5jdGlvbiBzdyhuKXtyZXR1cm4gZnVuY3Rpb24odCxlLGkpe2xldCByPS0xKmksbz11ZChlLEdvLk1pbnVzU2lnbikscz1yPjA/TWF0aC5mbG9vcihyLzYwKTpNYXRoLmNlaWwoci82MCk7c3dpdGNoKG4pe2Nhc2UgRWwuU2hvcnQ6cmV0dXJuKHI+PTA/IisiOiIiKStTbChzLDIsbykrU2woTWF0aC5hYnMociU2MCksMixvKTtjYXNlIEVsLlNob3J0R01UOnJldHVybiJHTVQiKyhyPj0wPyIrIjoiIikrU2wocywxLG8pO2Nhc2UgRWwuTG9uZzpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK1NsKHMsMixvKSsiOiIrU2woTWF0aC5hYnMociU2MCksMixvKTtjYXNlIEVsLkV4dGVuZGVkOnJldHVybiAwPT09aT8iWiI6KHI+PTA/IisiOiIiKStTbChzLDIsbykrIjoiK1NsKE1hdGguYWJzKHIlNjApLDIsbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gem9uZSB3aWR0aCAiJHtufSJgKX19fXZhciB3dWU9MCxjdz00O2Z1bmN0aW9uIHpqKG4pe3JldHVybiB1dyhuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKyhjdy1uLmdldERheSgpKSl9ZnVuY3Rpb24gVU8obix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEscz1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigocytvKS83KX1lbHNle2xldCBvPXpqKGUpLHM9ZnVuY3Rpb24obil7bGV0IHQ9dXcobix3dWUsMSkuZ2V0RGF5KCk7cmV0dXJuIHV3KG4sMCwxKyh0PD1jdz9jdzpjdys3KS10KX0oby5nZXRGdWxsWWVhcigpKSxhPW8uZ2V0VGltZSgpLXMuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKGEvNjA0OGU1KX1yZXR1cm4gU2wocixuLHVkKGksR28uTWludXNTaWduKSl9fWZ1bmN0aW9uIGF3KG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIFNsKHpqKGUpLmdldEZ1bGxZZWFyKCksbix1ZChpLEdvLk1pbnVzU2lnbiksdCl9fXZhciBqTz17fTtmdW5jdGlvbiBVaihuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIEFqKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgUnVlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvLFJqPTIyLHB3PSIuIixNYj0iMCIsUHVlPSI7IixPdWU9IiwiLEdPPSIjIjtmdW5jdGlvbiAkTyhuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtyZXR1cm4gUnMobilbZ3IuTnVtYmVyRm9ybWF0c11bdF19KHQsbHcuRGVjaW1hbCkscj1mdW5jdGlvbihuLHQ9Ii0iKXtsZXQgZT17bWluSW50OjEsbWluRnJhYzowLG1heEZyYWM6MCxwb3NQcmU6IiIscG9zU3VmOiIiLG5lZ1ByZToiIixuZWdTdWY6IiIsZ1NpemU6MCxsZ1NpemU6MH0saT1uLnNwbGl0KFB1ZSkscj1pWzBdLG89aVsxXSxzPS0xIT09ci5pbmRleE9mKHB3KT9yLnNwbGl0KHB3KTpbci5zdWJzdHJpbmcoMCxyLmxhc3RJbmRleE9mKE1iKSsxKSxyLnN1YnN0cmluZyhyLmxhc3RJbmRleE9mKE1iKSsxKV0sYT1zWzBdLGw9c1sxXXx8IiI7ZS5wb3NQcmU9YS5zdWJzdHJpbmcoMCxhLmluZGV4T2YoR08pKTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7bGV0IHU9bC5jaGFyQXQoZCk7dT09PU1iP2UubWluRnJhYz1lLm1heEZyYWM9ZCsxOnU9PT1HTz9lLm1heEZyYWM9ZCsxOmUucG9zU3VmKz11fWxldCBjPWEuc3BsaXQoT3VlKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgZD1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLHU9by5pbmRleE9mKEdPKTtlLm5lZ1ByZT1vLnN1YnN0cmluZygwLHUpLnJlcGxhY2UoLycvZywiIiksZS5uZWdTdWY9by5zbGljZSh1K2QpLnJlcGxhY2UoLycvZywiIil9ZWxzZSBlLm5lZ1ByZT10K2UucG9zUHJlLGUubmVnU3VmPWUucG9zU3VmO3JldHVybiBlfShpLHVkKHQsR28uTWludXNTaWduKSk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvLHM9ITEpe2xldCBhPSIiLGw9ITE7aWYoaXNGaW5pdGUobikpe2xldCBjPWZ1bmN0aW9uKG4pe2xldCBpLHIsbyxzLGEsdD1NYXRoLmFicyhuKSsiIixlPTA7Zm9yKChyPXQuaW5kZXhPZihwdykpPi0xJiYodD10LnJlcGxhY2UocHcsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wO3QuY2hhckF0KG8pPT09TWI7bysrKTtpZihvPT09KGE9dC5sZW5ndGgpKWk9WzBdLHI9MTtlbHNle2ZvcihhLS07dC5jaGFyQXQoYSk9PT1NYjspYS0tO2ZvcihyLT1vLGk9W10scz0wO288PWE7bysrLHMrKylpW3NdPU51bWJlcih0LmNoYXJBdChvKSl9cmV0dXJuIHI+UmomJihpPWkuc3BsaWNlKDAsUmotMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTtzJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IGQ9dC5taW5JbnQsdT10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHg9by5tYXRjaChSdWUpO2lmKG51bGw9PT14KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IFI9eFsxXSxBPXhbM10sVj14WzVdO251bGwhPVImJihkPVdPKFIpKSxudWxsIT1BJiYodT1XTyhBKSksbnVsbCE9Vj9wPVdPKFYpOm51bGwhPUEmJnU+cCYmKHA9dSl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLHM9bytuLmludGVnZXJMZW4sYT1pW3NdO2lmKHM+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLHMpKTtmb3IobGV0IHU9czt1PGkubGVuZ3RoO3UrKylpW3VdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxzPW8rMSksaVswXT0wO2ZvcihsZXQgdT0xO3U8czt1KyspaVt1XT0wfWlmKGE+PTUpaWYocy0xPDApe2ZvcihsZXQgdT0wO3U+czt1LS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbcy0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbixkPWkucmVkdWNlUmlnaHQoZnVuY3Rpb24odSxwLGYsbSl7cmV0dXJuIG1bZl09KHArPXUpPDEwP3A6cC0xMCxsJiYoMD09PW1bZl0mJmY+PWM/bS5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO2QmJihpLnVuc2hpZnQoZCksbi5pbnRlZ2VyTGVuKyspfShjLHUscCk7bGV0IGY9Yy5kaWdpdHMsbT1jLmludGVnZXJMZW4sYj1jLmV4cG9uZW50LE09W107Zm9yKGw9Zi5ldmVyeSh4PT4heCk7bTxkO20rKylmLnVuc2hpZnQoMCk7Zm9yKDttPDA7bSsrKWYudW5zaGlmdCgwKTttPjA/TT1mLnNwbGljZShtLGYubGVuZ3RoKTooTT1mLGY9WzBdKTtsZXQgeT1bXTtmb3IoZi5sZW5ndGg+PXQubGdTaXplJiZ5LnVuc2hpZnQoZi5zcGxpY2UoLXQubGdTaXplLGYubGVuZ3RoKS5qb2luKCIiKSk7Zi5sZW5ndGg+dC5nU2l6ZTspeS51bnNoaWZ0KGYuc3BsaWNlKC10LmdTaXplLGYubGVuZ3RoKS5qb2luKCIiKSk7Zi5sZW5ndGgmJnkudW5zaGlmdChmLmpvaW4oIiIpKSxhPXkuam9pbih1ZChlLGkpKSxNLmxlbmd0aCYmKGErPXVkKGUscikrTS5qb2luKCIiKSksYiYmKGErPXVkKGUsR28uRXhwb25lbnRpYWwpKyIrIitiKX1lbHNlIGE9dWQoZSxHby5JbmZpbml0eSk7cmV0dXJuIGE9bjwwJiYhbD90Lm5lZ1ByZSthK3QubmVnU3VmOnQucG9zUHJlK2ErdC5wb3NTdWYsYX0obixyLHQsR28uR3JvdXAsR28uRGVjaW1hbCxlKX1mdW5jdGlvbiBXTyhuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIG13KG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgcU89L1xzKy8sUGo9W10seW49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLmluaXRpYWxDbGFzc2VzPVBqLHRoaXMuc3RhdGVNYXA9bmV3IE1hcH1zZXQga2xhc3MoZSl7dGhpcy5pbml0aWFsQ2xhc3Nlcz1udWxsIT1lP2UudHJpbSgpLnNwbGl0KHFPKTpQan1zZXQgbmdDbGFzcyhlKXt0aGlzLnJhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdChxTyk6ZX1uZ0RvQ2hlY2soKXtmb3IobGV0IGkgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShpLCEwKTtsZXQgZT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQpZm9yKGxldCBpIG9mIGUpdGhpcy5fdXBkYXRlU3RhdGUoaSwhMCk7ZWxzZSBpZihudWxsIT1lKWZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhlKSl0aGlzLl91cGRhdGVTdGF0ZShpLEJvb2xlYW4oZVtpXSkpO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGUsaSl7bGV0IHI9dGhpcy5zdGF0ZU1hcC5nZXQoZSk7dm9pZCAwIT09cj8oci5lbmFibGVkIT09aSYmKHIuY2hhbmdlZD0hMCxyLmVuYWJsZWQ9aSksci50b3VjaGVkPSEwKTp0aGlzLnN0YXRlTWFwLnNldChlLHtlbmFibGVkOmksY2hhbmdlZDohMCx0b3VjaGVkOiEwfSl9X2FwcGx5U3RhdGVEaWZmKCl7Zm9yKGxldCBlIG9mIHRoaXMuc3RhdGVNYXApe2xldCBpPWVbMF0scj1lWzFdO3IuY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoaSxyLmVuYWJsZWQpLHIuY2hhbmdlZD0hMSk6ci50b3VjaGVkfHwoci5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhpLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShpKSksci50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoZSxpKXsoZT1lLnRyaW0oKSkubGVuZ3RoPjAmJmUuc3BsaXQocU8pLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHdsKSxDKHhiKSxDKE1lKSxDKG1jKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLG5uPSgoKT0+e2NsYXNzIG57c2V0IG5nRm9yT2YoZSl7dGhpcy5fbmdGb3JPZj1lLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGUpe3RoaXMuX3RyYWNrQnlGbj1lfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl92aWV3Q29udGFpbmVyPWUsdGhpcy5fdGVtcGxhdGU9aSx0aGlzLl9kaWZmZXJzPXIsdGhpcy5fbmdGb3JPZj1udWxsLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLHMpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1zP3ZvaWQgMDpzKTtlbHNlIGlmKG51bGw9PXMpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBhPWkuZ2V0KG8pO2kubW92ZShhLHMpLGtqKGEscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgYT1pLmdldChyKS5jb250ZXh0O2EuaW5kZXg9cixhLmNvdW50PW8sYS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e2tqKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoc2kpLEMoU2kpLEMod2wpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24ga2oobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgRmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyBRTyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtGaigibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtGaigibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoc2kpLEMoU2kpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFFPPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIEZqKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtwbyh0KX0nLmApfXZhciBmdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LHNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10sdGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goZSl7dGhpcy5fbmdTd2l0Y2g9ZSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGUpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGUpfV9tYXRjaENhc2UoZSl7bGV0IGk9ZT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8aSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGl9X3VwZGF0ZURlZmF1bHRDYXNlcyhlKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoPjAmJmUhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9ZTtmb3IobGV0IGkgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWkuZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgZncoZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhzaSksQyhTaSksQyhzciw5KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHV1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGZ3KGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSxDKFNpKSxDKHNyLDkpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxwdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxzPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOkFhLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmkscyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIscyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyh4YiksQyhtYykpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxMcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjpzfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLHM/e2luamVjdG9yOnN9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbR3RdfSksbn0pKCk7ZnVuY3Rpb24gaHcobix0KXtyZXR1cm4gbmV3IHl0KDIxMDAsITEpfXZhciBIdWU9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0senVlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGN0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYoaGgoZSkpcmV0dXJuIEh1ZTtpZihUTyhlKSlyZXR1cm4genVlO3Rocm93IGh3KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0LDE2KSl9LG4uXHUwMjc1cGlwZT1LbSh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxqdWU9bmV3IGllKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLEd1ZT1uZXcgaWUoIkRBVEVfUElQRV9ERUZBVUxUX09QVElPTlMiKSxnaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWksdGhpcy5kZWZhdWx0T3B0aW9ucz1yfXRyYW5zZm9ybShlLGkscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiB5dWUoZSxpPz90aGlzLmRlZmF1bHRPcHRpb25zPy5kYXRlRm9ybWF0Pz8ibWVkaXVtRGF0ZSIsb3x8dGhpcy5sb2NhbGUscj8/dGhpcy5kZWZhdWx0T3B0aW9ucz8udGltZXpvbmU/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKHMpe3Rocm93IGh3KCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGNkLDE2KSxDKGp1ZSwyNCksQyhHdWUsMjQpKX0sbi5cdTAyNzVwaXBlPUttKHtuYW1lOiJkYXRlIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiEwfSksbn0pKCksTGE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9sb2NhbGU9ZX10cmFuc2Zvcm0oZSxpLHIpe2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hKG51bGw9PW58fCIiPT09bnx8biE9bil9KGUpKXJldHVybiBudWxsO3I9cnx8dGhpcy5fbG9jYWxlO3RyeXtsZXQgbz1mdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFpc05hTihOdW1iZXIobiktcGFyc2VGbG9hdChuKSkpcmV0dXJuIE51bWJlcihuKTtpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKGAke259IGlzIG5vdCBhIG51bWJlcmApO3JldHVybiBufShlKTtyZXR1cm4gJE8obyxyLGkpfWNhdGNoKG8pe3Rocm93IGh3KCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGNkLDE2KSl9LG4uXHUwMjc1cGlwZT1LbSh7bmFtZToibnVtYmVyIix0eXBlOm4scHVyZTohMCxzdGFuZGFsb25lOiEwfSksbn0pKCksamo9KCgpPT57Y2xhc3Mgbnt0cmFuc2Zvcm0oZSxpLHIpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoIXRoaXMuc3VwcG9ydHMoZSkpdGhyb3cgaHcoKTtyZXR1cm4gZS5zbGljZShpLHIpfXN1cHBvcnRzKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8QXJyYXkuaXNBcnJheShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cGlwZT1LbSh7bmFtZToic2xpY2UiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxQZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksZWs9ImJyb3dzZXIiO2Z1bmN0aW9uIGd3KG4pe3JldHVybiBuPT09ZWt9bmV3IHlsKCIxNS4yLjkiKTt2YXIgUXA9Y2xhc3N7fTtmdW5jdGlvbiBadWUobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn12YXIgS3VlPW49Pm4uc3JjLEp1ZT1uZXcgaWUoIkltYWdlTG9hZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+S3VlfSk7ZnVuY3Rpb24gX3cobix0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2Ygbnx8IiI9PT1uLnRyaW0oKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBVUkwobiksITB9Y2F0Y2h7cmV0dXJuITF9fShpKXx8ZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgeXQoMjk1OSwhMSl9KCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpP24uc2xpY2UoMCwtMSk6bn0oaSksW3twcm92aWRlOkp1ZSx1c2VWYWx1ZTpzPT4oZnVuY3Rpb24obil7cmV0dXJuL15odHRwcz86XC9cLy8udGVzdChuKX0ocy5zcmMpJiZmdW5jdGlvbihuLHQpe3Rocm93IG5ldyB5dCgyOTU5LCExKX0oKSxuKGksey4uLnMsc3JjOlp1ZShzLnNyYyl9KSl9XX19X3coZnVuY3Rpb24obix0KXtsZXQgZT0iZm9ybWF0PWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3aWR0aD0ke3Qud2lkdGh9YCksYCR7bn0vY2RuLWNnaS9pbWFnZS8ke2V9LyR7dC5zcmN9YH0pLF93KGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZfYXV0byxxX2F1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3XyR7dC53aWR0aH1gKSxgJHtufS9pbWFnZS91cGxvYWQvJHtlfS8ke3Quc3JjfWB9KSxfdyhmdW5jdGlvbihuLHQpe2xldCByLHtzcmM6ZSx3aWR0aDppfT10O3JldHVybiByPWk/W24sYHRyOnctJHtpfWAsZV06W24sZV0sci5qb2luKCIvIil9KSxfdyhmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pLG5ldyBpZSgiUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QiKSxuZXcgaWUoIk5HX09QVElNSVpFRF9QUkVMT0FERURfSU1BR0VTIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IFNldH0pO3ZhciBidyxvcGU9e2JyZWFrcG9pbnRzOlsxNiwzMiw0OCw2NCw5NiwxMjgsMjU2LDM4NCw2NDAsNzUwLDgyOCwxMDgwLDEyMDAsMTkyMCwyMDQ4LDM4NDBdfSxuaz0obmV3IGllKCJJbWFnZUNvbmZpZyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm9wZX0pLGNsYXNzIGV4dGVuZHMgZHd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fSksRGI9Y2xhc3MgZXh0ZW5kcyBua3tzdGF0aWMgbWFrZUN1cnJlbnQoKXt2YXIgbjtuPW5ldyBEYixZT3x8KFlPPW4pfW9uQW5kQ2FuY2VsKHQsZSxpKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYodCl7bGV0IGU9KFNiPVNifHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP1NiLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGw7cmV0dXJuIG51bGw9PWU/bnVsbDpmdW5jdGlvbihuKXsoYnc9Ynd8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuc2V0QXR0cmlidXRlKCJocmVmIixuKTtsZXQgdD1idy5wYXRobmFtZTtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKT90OmAvJHt0fWB9KGUpfXJlc2V0QmFzZUVsZW1lbnQoKXtTYj1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUodCl7cmV0dXJuIG13KGRvY3VtZW50LmNvb2tpZSx0KX19LFNiPW51bGwsUWo9bmV3IGllKCJUUkFOU0lUSU9OX0lEIiksZHBlPVt7cHJvdmlkZTpPTyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4oKT0+e2UuZ2V0KFpNKS5kb25lUHJvbWlzZS50aGVuKCgpPT57bGV0IGk9VGwoKSxyPXQucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbbmctdHJhbnNpdGlvbj0iJHtufSJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaS5yZW1vdmUocltvXSl9KX19LGRlcHM6W1FqLEx0LE1pXSxtdWx0aTohMH1dLHVwZT0oKCk9PntjbGFzcyBue2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdnc9bmV3IGllKCJFdmVudE1hbmFnZXJQbHVnaW5zIikseXc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3pvbmU9aSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGUuZm9yRWFjaChyPT57ci5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWUuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoaSkuYWRkRXZlbnRMaXN0ZW5lcihlLGkscil9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoaSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcihlLGkscil9Z2V0Wm9uZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGUpe2xldCBpPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChlKTtpZihpKXJldHVybiBpO2xldCByPXRoaXMuX3BsdWdpbnM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107aWYocy5zdXBwb3J0cyhlKSlyZXR1cm4gdGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGUscyksc310aHJvdyBuZXcgRXJyb3IoYE5vIGV2ZW50IG1hbmFnZXIgcGx1Z2luIGZvdW5kIGZvciBldmVudCAke2V9YCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsodncpLGsoYXQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx4dz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb2M9dH1hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxpKXtsZXQgcj1UbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke3J9IGZvciBldmVudCAke2V9YCk7cmV0dXJuIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLGUsaSl9fSxaaj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy51c2FnZUNvdW50PW5ldyBNYXB9YWRkU3R5bGVzKGUpe2ZvcihsZXQgaSBvZiBlKTE9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoaSwxKSYmdGhpcy5vblN0eWxlQWRkZWQoaSl9cmVtb3ZlU3R5bGVzKGUpe2ZvcihsZXQgaSBvZiBlKTA9PT10aGlzLmNoYW5nZVVzYWdlQ291bnQoaSwtMSkmJnRoaXMub25TdHlsZVJlbW92ZWQoaSl9b25TdHlsZVJlbW92ZWQoZSl7fW9uU3R5bGVBZGRlZChlKXt9Z2V0QWxsU3R5bGVzKCl7cmV0dXJuIHRoaXMudXNhZ2VDb3VudC5rZXlzKCl9Y2hhbmdlVXNhZ2VDb3VudChlLGkpe2xldCByPXRoaXMudXNhZ2VDb3VudCxvPXIuZ2V0KGUpPz8wO3JldHVybiBvKz1pLG8+MD9yLnNldChlLG8pOnIuZGVsZXRlKGUpLG99bmdPbkRlc3Ryb3koKXtmb3IobGV0IGUgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLm9uU3R5bGVSZW1vdmVkKGUpO3RoaXMudXNhZ2VDb3VudC5jbGVhcigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxFYj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWmp7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmRvYz1lLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMucmVzZXRIb3N0Tm9kZXMoKX1vblN0eWxlQWRkZWQoZSl7Zm9yKGxldCBpIG9mIHRoaXMuaG9zdE5vZGVzKXRoaXMuYWRkU3R5bGVUb0hvc3QoaSxlKX1vblN0eWxlUmVtb3ZlZChlKXtsZXQgaT10aGlzLnN0eWxlUmVmO2kuZ2V0KGUpPy5mb3JFYWNoKG89Pm8ucmVtb3ZlKCkpLGkuZGVsZXRlKGUpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN0eWxlUmVmLmNsZWFyKCksdGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoZSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGUpO2ZvcihsZXQgaSBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMuYWRkU3R5bGVUb0hvc3QoZSxpKX1yZW1vdmVIb3N0KGUpe3RoaXMuaG9zdE5vZGVzLmRlbGV0ZShlKX1hZGRTdHlsZVRvSG9zdChlLGkpe2xldCByPXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci50ZXh0Q29udGVudD1pLGUuYXBwZW5kQ2hpbGQocik7bGV0IG89dGhpcy5zdHlsZVJlZi5nZXQoaSk7bz9vLnB1c2gocik6dGhpcy5zdHlsZVJlZi5zZXQoaSxbcl0pfXJlc2V0SG9zdE5vZGVzKCl7bGV0IGU9dGhpcy5ob3N0Tm9kZXM7ZS5jbGVhcigpLGUuYWRkKHRoaXMuZG9jLmhlYWQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEx0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdGs9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sb2s9LyVDT01QJS9nLEpqPW5ldyBpZSgiUmVtb3ZlU3R5bGVzT25Db21wRGVzdG9yeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiExfSk7ZnVuY3Rpb24gJGoobix0KXtyZXR1cm4gdC5mbGF0KDEwMCkubWFwKGU9PmUucmVwbGFjZShvayxuKSl9ZnVuY3Rpb24gV2oobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgVGI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmV2ZW50TWFuYWdlcj1lLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1pLHRoaXMuYXBwSWQ9cix0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnk9byx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgSWIoZSl9Y3JlYXRlUmVuZGVyZXIoZSxpKXtpZighZXx8IWkpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO2xldCByPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihlLGkpO3JldHVybiByIGluc3RhbmNlb2YgQ3c/ci5hcHBseVRvSG9zdChlKTpyIGluc3RhbmNlb2YgQWImJnIuYXBwbHlTdHlsZXMoKSxyfWdldE9yQ3JlYXRlUmVuZGVyZXIoZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQsbz1yLmdldChpLmlkKTtpZighbyl7bGV0IHM9dGhpcy5ldmVudE1hbmFnZXIsYT10aGlzLnNoYXJlZFN0eWxlc0hvc3QsbD10aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnk7c3dpdGNoKGkuZW5jYXBzdWxhdGlvbil7Y2FzZSByYS5FbXVsYXRlZDpvPW5ldyBDdyhzLGEsaSx0aGlzLmFwcElkLGwpO2JyZWFrO2Nhc2UgcmEuU2hhZG93RG9tOnJldHVybiBuZXcgcmsocyxhLGUsaSk7ZGVmYXVsdDpvPW5ldyBBYihzLGEsaSxsKX1vLm9uRGVzdHJveT0oKT0+ci5kZWxldGUoaS5pZCksci5zZXQoaS5pZCxvKX1yZXR1cm4gb31uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfWJlZ2luKCl7fWVuZCgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh5dyksayhFYiksayhZcCksayhKaikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEliPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiBlP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0a1tlXXx8ZSx0KTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9YXBwZW5kQ2hpbGQodCxlKXsoWWoodCk/dC5jb250ZW50OnQpLmFwcGVuZENoaWxkKGUpfWluc2VydEJlZm9yZSh0LGUsaSl7dCYmKFlqKHQpP3QuY29udGVudDp0KS5pbnNlcnRCZWZvcmUoZSxpKX1yZW1vdmVDaGlsZCh0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtsZXQgaT0ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0O2lmKCFpKXRocm93IG5ldyBFcnJvcihgVGhlIHNlbGVjdG9yICIke3R9IiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50c2ApO3JldHVybiBlfHwoaS50ZXh0Q29udGVudD0iIiksaX1wYXJlbnROb2RlKHQpe3JldHVybiB0LnBhcmVudE5vZGV9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKHQsZSxpLHIpe2lmKHIpe2U9cisiOiIrZTtsZXQgbz10a1tyXTtvP3Quc2V0QXR0cmlidXRlTlMobyxlLGkpOnQuc2V0QXR0cmlidXRlKGUsaSl9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLGkpfXJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl7aWYoaSl7bGV0IHI9dGtbaV07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUoYCR7aX06JHtlfWApfWVsc2UgdC5yZW1vdmVBdHRyaWJ1dGUoZSl9YWRkQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9cmVtb3ZlQ2xhc3ModCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9c2V0U3R5bGUodCxlLGkscil7ciYoQWEuRGFzaENhc2V8QWEuSW1wb3J0YW50KT90LnN0eWxlLnNldFByb3BlcnR5KGUsaSxyJkFhLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6dC5zdHlsZVtlXT1pfXJlbW92ZVN0eWxlKHQsZSxpKXtpJkFhLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn1zZXRQcm9wZXJ0eSh0LGUsaSl7dFtlXT1pfXNldFZhbHVlKHQsZSl7dC5ub2RlVmFsdWU9ZX1saXN0ZW4odCxlLGkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxXaihpKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0LGUsV2ooaSkpfX07ZnVuY3Rpb24gWWoobil7cmV0dXJuIlRFTVBMQVRFIj09PW4udGFnTmFtZSYmdm9pZCAwIT09bi5jb250ZW50fSJAIi5jaGFyQ29kZUF0KDApO3ZhciByaz1jbGFzcyBleHRlbmRzIElie2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89JGooci5pZCxyLnN0eWxlcyk7Zm9yKGxldCBzIG9mIG8pe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1zLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChhKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX0sQWI9Y2xhc3MgZXh0ZW5kcyBJYntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89aS5pZCl7c3VwZXIodCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0b3J5PXIsdGhpcy5yZW5kZXJlclVzYWdlQ291bnQ9MCx0aGlzLnN0eWxlcz0kaihvLGkuc3R5bGVzKX1hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXModGhpcy5zdHlsZXMpLHRoaXMucmVuZGVyZXJVc2FnZUNvdW50Kyt9ZGVzdHJveSgpeyF0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Rvcnl8fCh0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVzKSx0aGlzLnJlbmRlcmVyVXNhZ2VDb3VudC0tLDA9PT10aGlzLnJlbmRlcmVyVXNhZ2VDb3VudCYmdGhpcy5vbkRlc3Ryb3k/LigpKX19LEN3PWNsYXNzIGV4dGVuZHMgQWJ7Y29uc3RydWN0b3IodCxlLGkscixvKXtsZXQgcz1yKyItIitpLmlkO3N1cGVyKHQsZSxpLG8scyksdGhpcy5jb250ZW50QXR0cj0iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2Uob2sscyksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2Uob2ssbil9KHMpfWFwcGx5VG9Ib3N0KHQpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxicGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHh3e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKX1yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYaj1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSx2cGU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LHlwZT17YWx0Om49Pm4uYWx0S2V5LGNvbnRyb2w6bj0+bi5jdHJsS2V5LG1ldGE6bj0+bi5tZXRhS2V5LHNoaWZ0Om49Pm4uc2hpZnRLZXl9LHhwZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHd7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9c3VwcG9ydHMoZSl7cmV0dXJuIG51bGwhPW4ucGFyc2VFdmVudE5hbWUoZSl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7bGV0IG89bi5wYXJzZUV2ZW50TmFtZShpKSxzPW4uZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+VGwoKS5vbkFuZENhbmNlbChlLG8uZG9tRXZlbnROYW1lLHMpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoZSl7bGV0IGk9ZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIikscj1pLnNoaWZ0KCk7aWYoMD09PWkubGVuZ3RofHwia2V5ZG93biIhPT1yJiYia2V5dXAiIT09cilyZXR1cm4gbnVsbDtsZXQgbz1uLl9ub3JtYWxpemVLZXkoaS5wb3AoKSkscz0iIixhPWkuaW5kZXhPZigiY29kZSIpO2lmKGE+LTEmJihpLnNwbGljZShhLDEpLHM9ImNvZGUuIiksWGouZm9yRWFjaChjPT57bGV0IGQ9aS5pbmRleE9mKGMpO2Q+LTEmJihpLnNwbGljZShkLDEpLHMrPWMrIi4iKX0pLHMrPW8sMCE9aS5sZW5ndGh8fDA9PT1vLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD17fTtyZXR1cm4gbC5kb21FdmVudE5hbWU9cixsLmZ1bGxLZXk9cyxsfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoZSxpKXtsZXQgcj12cGVbZS5rZXldfHxlLmtleSxvPSIiO3JldHVybiBpLmluZGV4T2YoImNvZGUuIik+LTEmJihyPWUuY29kZSxvPSJjb2RlLiIpLCEobnVsbD09cnx8IXIpJiYocj1yLnRvTG93ZXJDYXNlKCksIiAiPT09cj9yPSJzcGFjZSI6Ii4iPT09ciYmKHI9ImRvdCIpLFhqLmZvckVhY2gocz0+e3MhPT1yJiYoMCx5cGVbc10pKGUpJiYobys9cysiLiIpfSksbys9cixvPT09aSl9c3RhdGljIGV2ZW50Q2FsbGJhY2soZSxpLHIpe3JldHVybiBvPT57bi5tYXRjaEV2ZW50RnVsbEtleUNvZGUobyxlKSYmci5ydW5HdWFyZGVkKCgpPT5pKG8pKX19c3RhdGljIF9ub3JtYWxpemVLZXkoZSl7cmV0dXJuImVzYyI9PT1lPyJlc2NhcGUiOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxTcGU9W3twcm92aWRlOnZjLHVzZVZhbHVlOmVrfSx7cHJvdmlkZTprTyx1c2VWYWx1ZTpmdW5jdGlvbigpe0RiLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTpMdCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG49ZG9jdW1lbnQsWVI9bixkb2N1bWVudDt2YXIgbn0sZGVwczpbXX1dLGFrPUJPKE1qLCJicm93c2VyIixTcGUpLGVHPW5ldyBpZSgiIiksRXBlPVt7cHJvdmlkZTp2Yix1c2VDbGFzczpjbGFzc3thZGRUb1dpbmRvdyh0KXtVci5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGkscj0hMCk9PntsZXQgbz10LmZpbmRUZXN0YWJpbGl0eUluVHJlZShpLHIpO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0ZXN0YWJpbGl0eSBmb3IgZWxlbWVudC4iKTtyZXR1cm4gb30sVXIuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PnQuZ2V0QWxsVGVzdGFiaWxpdGllcygpLFVyLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PnQuZ2V0QWxsUm9vdEVsZW1lbnRzKCksVXIuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChVci5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksVXIuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChpPT57bGV0IHI9VXIuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKSxvPXIubGVuZ3RoLHM9ITEsYT1mdW5jdGlvbihsKXtzPXN8fGwsby0tLDA9PW8mJmkocyl9O3IuZm9yRWFjaChmdW5jdGlvbihsKXtsLndoZW5TdGFibGUoYSl9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsaSl7cmV0dXJuIG51bGw9PWU/bnVsbDp0LmdldFRlc3RhYmlsaXR5KGUpPz8oaT9UbCgpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6Tk8sdXNlQ2xhc3M6S00sZGVwczpbYXQsSk0sdmJdfSx7cHJvdmlkZTpLTSx1c2VDbGFzczpLTSxkZXBzOlthdCxKTSx2Yl19XSxUcGU9W3twcm92aWRlOk5NLHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6cnMsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgcnN9LGRlcHM6W119LHtwcm92aWRlOnZ3LHVzZUNsYXNzOmJwZSxtdWx0aTohMCxkZXBzOltMdCxhdCx2Y119LHtwcm92aWRlOnZ3LHVzZUNsYXNzOnhwZSxtdWx0aTohMCxkZXBzOltMdF19LHtwcm92aWRlOlRiLHVzZUNsYXNzOlRiLGRlcHM6W3l3LEViLFlwLEpqXX0se3Byb3ZpZGU6ZmMsdXNlRXhpc3Rpbmc6VGJ9LHtwcm92aWRlOlpqLHVzZUV4aXN0aW5nOkVifSx7cHJvdmlkZTpFYix1c2VDbGFzczpFYixkZXBzOltMdF19LHtwcm92aWRlOnl3LHVzZUNsYXNzOnl3LGRlcHM6W3Z3LGF0XX0se3Byb3ZpZGU6UXAsdXNlQ2xhc3M6dXBlLGRlcHM6W119LFtdXSxNdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTpZcCx1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpRaix1c2VFeGlzdGluZzpZcH0sZHBlXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoZUcsMTIpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlsuLi5UcGUsLi4uRXBlXSxpbXBvcnRzOltQZSx3al19KSxufSkoKSxacD0obmV3IGllKCJIYW1tZXJHZXN0dXJlQ29uZmlnIiksbmV3IGllKCJIYW1tZXJMb2FkZXIiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyhlfHxuKTprKHRHKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpKSx0Rz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWnB7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZX1zYW5pdGl6ZShlLGkpe2lmKG51bGw9PWkpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UganIuTk9ORTpyZXR1cm4gaTtjYXNlIGpyLkhUTUw6cmV0dXJuIHhsKGksIkhUTUwiKT9EcyhpKTpwTyh0aGlzLl9kb2MsU3RyaW5nKGkpKS50b1N0cmluZygpO2Nhc2UganIuU1RZTEU6cmV0dXJuIHhsKGksIlN0eWxlIik/RHMoaSk6aTtjYXNlIGpyLlNDUklQVDppZih4bChpLCJTY3JpcHQiKSlyZXR1cm4gRHMoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBqci5VUkw6cmV0dXJuIHhsKGksIlVSTCIpP0RzKGkpOmxiKFN0cmluZyhpKSk7Y2FzZSBqci5SRVNPVVJDRV9VUkw6aWYoeGwoaSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gRHMoaSk7dGhyb3cgbmV3IEVycm9yKGB1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgJHt0Yn0pYCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSAke3RifSlgKX19YnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgWFIobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRUihuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFNjcmlwdChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBaUihuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFVybChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBLUihuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEpSKG4pfShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbihlKXtsZXQgaT1udWxsO3JldHVybiBpPWU/bmV3IGU6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB0RyhuLmdldChMdCkpfShrKE1pKSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxSYj0obmV3IHlsKCIxNS4yLjkiKSxXVihpRygpLDEpLGNsYXNze30pLHd3PWNsYXNze30seGM9IioiO2Z1bmN0aW9uIF9yKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBDaShuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIE9iKG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiBTdyhuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gcm4obil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gd2kobix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24ga2Iobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBnaShuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIEtwKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIEpwKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiByRyhuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBtdT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7ckcoKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LFBiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP3JHKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChzPT57cy5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxzLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxzLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgocyxhKT0+TWF0aC5tYXgocyxhLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fSxFdz0iISI7ZnVuY3Rpb24gb0cobil7cmV0dXJuIG5ldyB5dCgzZTMsITEpfWZ1bmN0aW9uIElrKCl7cmV0dXJuIHR5cGVvZiBwcm9jZXNzPCJ1IiYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChwcm9jZXNzKX1mdW5jdGlvbiBodShuKXtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG11O2Nhc2UgMTpyZXR1cm4gblswXTtkZWZhdWx0OnJldHVybiBuZXcgUGIobil9fWZ1bmN0aW9uIHlHKG4sdCxlLGkscj1uZXcgTWFwLG89bmV3IE1hcCl7bGV0IHM9W10sYT1bXSxsPS0xLGM9bnVsbDtpZihpLmZvckVhY2goZD0+e2xldCB1PWQuZ2V0KCJvZmZzZXQiKSxwPXU9PWwsZj1wJiZjfHxuZXcgTWFwO2QuZm9yRWFjaCgobSxiKT0+e2xldCBNPWIseT1tO2lmKCJvZmZzZXQiIT09Yilzd2l0Y2goTT10Lm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLHMpLHkpe2Nhc2UgRXc6eT1yLmdldChiKTticmVhaztjYXNlIHhjOnk9by5nZXQoYik7YnJlYWs7ZGVmYXVsdDp5PXQubm9ybWFsaXplU3R5bGVWYWx1ZShiLE0seSxzKX1mLnNldChNLHkpfSkscHx8YS5wdXNoKGYpLGM9ZixsPXV9KSxzLmxlbmd0aCl0aHJvdyBuZXcgeXQoMzUwMiwhMSk7cmV0dXJuIGF9ZnVuY3Rpb24gQWsobix0LGUsaSl7c3dpdGNoKHQpe2Nhc2Uic3RhcnQiOm4ub25TdGFydCgoKT0+aShlJiZjayhlLCJzdGFydCIsbikpKTticmVhaztjYXNlImRvbmUiOm4ub25Eb25lKCgpPT5pKGUmJmNrKGUsImRvbmUiLG4pKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpuLm9uRGVzdHJveSgoKT0+aShlJiZjayhlLCJkZXN0cm95IixuKSkpfX1mdW5jdGlvbiBjayhuLHQsZSl7bGV0IG89Umsobi5lbGVtZW50LG4udHJpZ2dlck5hbWUsbi5mcm9tU3RhdGUsbi50b1N0YXRlLHR8fG4ucGhhc2VOYW1lLGUudG90YWxUaW1lPz9uLnRvdGFsVGltZSwhIWUuZGlzYWJsZWQpLHM9bi5fZGF0YTtyZXR1cm4gbnVsbCE9cyYmKG8uX2RhdGE9cyksb31mdW5jdGlvbiBSayhuLHQsZSxpLHI9IiIsbz0wLHMpe3JldHVybntlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxmcm9tU3RhdGU6ZSx0b1N0YXRlOmkscGhhc2VOYW1lOnIsdG90YWxUaW1lOm8sZGlzYWJsZWQ6ISFzfX1mdW5jdGlvbiBjYShuLHQsZSl7bGV0IGk9bi5nZXQodCk7cmV0dXJuIGl8fG4uc2V0KHQsaT1lKSxpfWZ1bmN0aW9uIHNHKG4pe2xldCB0PW4uaW5kZXhPZigiOiIpO3JldHVybltuLnN1YnN0cmluZygxLHQpLG4uc2xpY2UodCsxKV19dmFyIGhrPShuLHQpPT4hMSx4Rz0obix0LGUpPT5bXSxDRz1udWxsO2Z1bmN0aW9uIFBrKG4pe2xldCB0PW4ucGFyZW50Tm9kZXx8bi5ob3N0O3JldHVybiB0PT09Q0c/bnVsbDp0fShJaygpfHx0eXBlb2YgRWxlbWVudDwidSIpJiYodHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiPyhDRz0oKCk9PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkoKSxoaz0obix0KT0+e2Zvcig7dDspe2lmKHQ9PT1uKXJldHVybiEwO3Q9UGsodCl9cmV0dXJuITF9KTpoaz0obix0KT0+bi5jb250YWlucyh0KSx4Rz0obix0LGUpPT57aWYoZSlyZXR1cm4gQXJyYXkuZnJvbShuLnF1ZXJ5U2VsZWN0b3JBbGwodCkpO2xldCBpPW4ucXVlcnlTZWxlY3Rvcih0KTtyZXR1cm4gaT9baV06W119KTt2YXIgJHA9bnVsbCxhRz0hMTt2YXIgTUc9aGssd0c9eEcsT2s9KCgpPT57Y2xhc3Mgbnt2YWxpZGF0ZVN0eWxlUHJvcGVydHkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4peyRwfHwoJHA9KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsKXx8e30sYUc9ISEkcC5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gJHAuc3R5bGUpO2xldCB0PSEwO3JldHVybiAkcC5zdHlsZSYmIWZ1bmN0aW9uKG4pe3JldHVybiJlYmtpdCI9PW4uc3Vic3RyaW5nKDEsNil9KG4pJiYodD1uIGluICRwLnN0eWxlLCF0JiZhRyYmKHQ9IldlYmtpdCIrbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStuLnNsaWNlKDEpaW4gJHAuc3R5bGUpKSx0fShlKX1tYXRjaGVzRWxlbWVudChlLGkpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudChlLGkpe3JldHVybiBNRyhlLGkpfWdldFBhcmVudEVsZW1lbnQoZSl7cmV0dXJuIFBrKGUpfXF1ZXJ5KGUsaSxyKXtyZXR1cm4gd0coZSxpLHIpfWNvbXB1dGVTdHlsZShlLGkscil7cmV0dXJuIHJ8fCIifWFuaW1hdGUoZSxpLHIsbyxzLGE9W10sbCl7cmV0dXJuIG5ldyBtdShyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVYj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5OT09QPW5ldyBPayxufSkoKSx1ZmU9MWUzLEVHPSJuZy1lbnRlciIsZ2s9Im5nLWxlYXZlIixUdz0ibmctdHJpZ2dlciIsUnc9Ii5uZy10cmlnZ2VyIixsRz0ibmctYW5pbWF0aW5nIixfaz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gcGQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDpiayhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIGJrKG4sdCl7cmV0dXJuInMiPT09dD9uKnVmZTpufWZ1bmN0aW9uIFB3KG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAscz0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiB0LnB1c2gob0coKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9YmsocGFyc2VGbG9hdChhWzFdKSxhWzJdKTtsZXQgbD1hWzNdO251bGwhPWwmJihvPWJrKHBhcnNlRmxvYXQobCksYVs0XSkpO2xldCBjPWFbNV07YyYmKHM9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBhPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyB5dCgzMTAwLCExKSksYT0hMCksbzwwJiYodC5wdXNoKG5ldyB5dCgzMTAxLCExKSksYT0hMCksYSYmdC5zcGxpY2UobCwwLG9HKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOnN9fShuLHQsZSl9ZnVuY3Rpb24gamIobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiBURyhuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBiaChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gY0cobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIERHKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9Y0coMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9Y0coMCxfZmUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24gQ2Mobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1rayhyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksSWsoKSYmREcobikpfWZ1bmN0aW9uIHRmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPWtrKGkpO24uc3R5bGVbcl09IiJ9KSxJaygpJiZERyhuKSl9ZnVuY3Rpb24gRmIobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTpTdyhuKTpufXZhciB2az1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBJRyhuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT12ay5leGVjKG4pOyl0LnB1c2goZVsxXSk7dmsubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gTGIobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZSh2aywobyxzKT0+e2xldCBhPXRbc107cmV0dXJuIG51bGw9PWEmJihlLnB1c2gobmV3IHl0KDMwMDMsITEpKSxhPSIiKSxhLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gT3cobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBnZmU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIGtrKG4pe3JldHVybiBuLnJlcGxhY2UoZ2ZlLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBfZmUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGxhKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyB5dCgzMDA0LCExKX19ZnVuY3Rpb24gQUcobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19dmFyIGt3PSIqIjtmdW5jdGlvbiBDZmUobix0KXtsZXQgZT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goaT0+ZnVuY3Rpb24obix0LGUpe2lmKCI6Ij09blswXSl7bGV0IGw9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybihlLGkpPT5wYXJzZUZsb2F0KGkpPnBhcnNlRmxvYXQoZSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKTxwYXJzZUZsb2F0KGUpO2RlZmF1bHQ6cmV0dXJuIHQucHVzaChuZXcgeXQoMzAxNiwhMSkpLCIqID0+ICoifX0obixlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbClyZXR1cm4gdm9pZCB0LnB1c2gobCk7bj1sfWxldCBpPW4ubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIGUucHVzaChuZXcgeXQoMzAxNSwhMSkpLHQ7bGV0IHI9aVsxXSxvPWlbMl0scz1pWzNdO3QucHVzaChkRyhyLHMpKSwiPCI9PW9bMF0mJiEocj09a3cmJnM9PWt3KSYmdC5wdXNoKGRHKHMscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBEdz1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksSXc9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBkRyhuLHQpe2xldCBlPUR3LmhhcyhuKXx8SXcuaGFzKG4pLGk9RHcuaGFzKHQpfHxJdy5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgcz1uPT1rd3x8bj09cixhPXQ9PWt3fHx0PT1vO3JldHVybiFzJiZlJiYiYm9vbGVhbiI9PXR5cGVvZiByJiYocz1yP0R3LmhhcyhuKTpJdy5oYXMobikpLCFhJiZpJiYiYm9vbGVhbiI9PXR5cGVvZiBvJiYoYT1vP0R3Lmhhcyh0KTpJdy5oYXModCkpLHMmJmF9fXZhciBTZmU9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24ga0cobix0LGUsaSl7cmV0dXJuIG5ldyB5ayhuKS5idWlsZCh0LGUsaSl9dmFyIHlrPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RyaXZlcj10fWJ1aWxkKHQsZSxpKXtsZXQgcj1uZXcgeGsoZSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUociksbGEodGhpcyxGYih0KSxyKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZSh0KXt0LmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLHQuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLHQuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIodCxlKXtsZXQgaT1lLnF1ZXJ5Q291bnQ9MCxyPWUuZGVwQ291bnQ9MCxvPVtdLHM9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKG5ldyB5dCgzMDA2LCExKSksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGE9PntpZih0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGUpLDA9PWEudHlwZSl7bGV0IGw9YSxjPWwubmFtZTtjLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGQ9PntsLm5hbWU9ZCxvLnB1c2godGhpcy52aXNpdFN0YXRlKGwsZSkpfSksbC5uYW1lPWN9ZWxzZSBpZigxPT1hLnR5cGUpe2xldCBsPXRoaXMudmlzaXRUcmFuc2l0aW9uKGEsZSk7aSs9bC5xdWVyeUNvdW50LHIrPWwuZGVwQ291bnQscy5wdXNoKGwpfWVsc2UgZS5lcnJvcnMucHVzaChuZXcgeXQoMzAwNywhMSkpfSkse3R5cGU6NyxuYW1lOnQubmFtZSxzdGF0ZXM6byx0cmFuc2l0aW9uczpzLHF1ZXJ5Q291bnQ6aSxkZXBDb3VudDpyLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZSh0LGUpe2xldCBpPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxyPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihpLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7bGV0IG89bmV3IFNldCxzPXJ8fHt9O2kuc3R5bGVzLmZvckVhY2goYT0+e2EgaW5zdGFuY2VvZiBNYXAmJmEuZm9yRWFjaChsPT57SUcobCkuZm9yRWFjaChjPT57cy5oYXNPd25Qcm9wZXJ0eShjKXx8by5hZGQoYyl9KX0pfSksby5zaXplJiYoT3coby52YWx1ZXMoKSksZS5lcnJvcnMucHVzaChuZXcgeXQoMzAwOCwhMSkpKX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOmksb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19dmlzaXRUcmFuc2l0aW9uKHQsZSl7ZS5xdWVyeUNvdW50PTAsZS5kZXBDb3VudD0wO2xldCBpPWxhKHRoaXMsRmIodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6Q2ZlKHQuZXhwcixlLmVycm9ycyksYW5pbWF0aW9uOmkscXVlcnlDb3VudDplLnF1ZXJ5Q291bnQsZGVwQ291bnQ6ZS5kZXBDb3VudCxvcHRpb25zOmVmKHQub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UodCxlKXtyZXR1cm57dHlwZToyLHN0ZXBzOnQuc3RlcHMubWFwKGk9PmxhKHRoaXMsaSxlKSksb3B0aW9uczplZih0Lm9wdGlvbnMpfX12aXNpdEdyb3VwKHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZSxyPTAsbz10LnN0ZXBzLm1hcChzPT57ZS5jdXJyZW50VGltZT1pO2xldCBhPWxhKHRoaXMscyxlKTtyZXR1cm4gcj1NYXRoLm1heChyLGUuY3VycmVudFRpbWUpLGF9KTtyZXR1cm4gZS5jdXJyZW50VGltZT1yLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOmVmKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWZ1bmN0aW9uKG4sdCl7aWYobi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIGRrKFB3KG4sdCkuZHVyYXRpb24sMCwiIik7bGV0IGU9bjtpZihlLnNwbGl0KC9ccysvKS5zb21lKG89PiJ7Ij09by5jaGFyQXQoMCkmJiJ7Ij09by5jaGFyQXQoMSkpKXtsZXQgbz1kaygwLDAsIiIpO3JldHVybiBvLmR5bmFtaWM9ITAsby5zdHJWYWx1ZT1lLG99bGV0IHI9UHcoZSx0KTtyZXR1cm4gZGsoci5kdXJhdGlvbixyLmRlbGF5LHIuZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1pO2xldCByLG89dC5zdHlsZXM/dC5zdHlsZXM6cm4oe30pO2lmKDU9PW8udHlwZSlyPXRoaXMudmlzaXRLZXlmcmFtZXMobyxlKTtlbHNle2xldCBzPXQuc3R5bGVzLGE9ITE7aWYoIXMpe2E9ITA7bGV0IGM9e307aS5lYXNpbmcmJihjLmVhc2luZz1pLmVhc2luZykscz1ybihjKX1lLmN1cnJlbnRUaW1lKz1pLmR1cmF0aW9uK2kuZGVsYXk7bGV0IGw9dGhpcy52aXNpdFN0eWxlKHMsZSk7bC5pc0VtcHR5U3RlcD1hLHI9bH1yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6aSxzdHlsZTpyLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZSh0LGUpe2xldCBpPXRoaXMuX21ha2VTdHlsZUFzdCh0LGUpO3JldHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGksZSksaX1fbWFrZVN0eWxlQXN0KHQsZSl7bGV0IGk9W10scj1BcnJheS5pc0FycmF5KHQuc3R5bGVzKT90LnN0eWxlczpbdC5zdHlsZXNdO2ZvcihsZXQgYSBvZiByKSJzdHJpbmciPT10eXBlb2YgYT9hPT09eGM/aS5wdXNoKGEpOmUuZXJyb3JzLnB1c2gobmV3IHl0KDMwMDIsITEpKTppLnB1c2goVEcoYSkpO2xldCBvPSExLHM9bnVsbDtyZXR1cm4gaS5mb3JFYWNoKGE9PntpZihhIGluc3RhbmNlb2YgTWFwJiYoYS5oYXMoImVhc2luZyIpJiYocz1hLmdldCgiZWFzaW5nIiksYS5kZWxldGUoImVhc2luZyIpKSwhbykpZm9yKGxldCBsIG9mIGEudmFsdWVzKCkpaWYobC50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe289ITA7YnJlYWt9fSkse3R5cGU6NixzdHlsZXM6aSxlYXNpbmc6cyxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOm8sb3B0aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdCh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7aSYmbz4wJiYoby09aS5kdXJhdGlvbitpLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKHM9Pnsic3RyaW5nIiE9dHlwZW9mIHMmJnMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWUuY29sbGVjdGVkU3R5bGVzLmdldChlLmN1cnJlbnRRdWVyeVNlbGVjdG9yKSxkPWMuZ2V0KGwpLHU9ITA7ZCYmKG8hPXImJm8+PWQuc3RhcnRUaW1lJiZyPD1kLmVuZFRpbWUmJihlLmVycm9ycy5wdXNoKG5ldyB5dCgzMDEwLCExKSksdT0hMSksbz1kLnN0YXJ0VGltZSksdSYmYy5zZXQobCx7c3RhcnRUaW1lOm8sZW5kVGltZTpyfSksZS5vcHRpb25zJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9dC5wYXJhbXN8fHt9LHI9SUcobik7ci5sZW5ndGgmJnIuZm9yRWFjaChvPT57aS5oYXNPd25Qcm9wZXJ0eShvKXx8ZS5wdXNoKG5ldyB5dCgzMDAxLCExKSl9KX0oYSxlLm9wdGlvbnMsZS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyh0LGUpe2xldCBpPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWUuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBlLmVycm9ycy5wdXNoKG5ldyB5dCgzMDExLCExKSksaTtsZXQgbz0wLHM9W10sYT0hMSxsPSExLGM9MCxkPXQuc3RlcHMubWFwKHk9PntsZXQgeD10aGlzLl9tYWtlU3R5bGVBc3QoeSxlKSxSPW51bGwhPXgub2Zmc2V0P3gub2Zmc2V0OmZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbnVsbDtsZXQgdD1udWxsO2lmKEFycmF5LmlzQXJyYXkobikpbi5mb3JFYWNoKGU9PntpZihlIGluc3RhbmNlb2YgTWFwJiZlLmhhcygib2Zmc2V0Iikpe2xldCBpPWU7dD1wYXJzZUZsb2F0KGkuZ2V0KCJvZmZzZXQiKSksaS5kZWxldGUoIm9mZnNldCIpfX0pO2Vsc2UgaWYobiBpbnN0YW5jZW9mIE1hcCYmbi5oYXMoIm9mZnNldCIpKXtsZXQgZT1uO3Q9cGFyc2VGbG9hdChlLmdldCgib2Zmc2V0IikpLGUuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gdH0oeC5zdHlsZXMpLEE9MDtyZXR1cm4gbnVsbCE9UiYmKG8rKyxBPXgub2Zmc2V0PVIpLGw9bHx8QTwwfHxBPjEsYT1hfHxBPGMsYz1BLHMucHVzaChBKSx4fSk7bCYmZS5lcnJvcnMucHVzaChuZXcgeXQoMzAxMiwhMSkpLGEmJmUuZXJyb3JzLnB1c2gobmV3IHl0KDMyMDAsITEpKTtsZXQgdT10LnN0ZXBzLmxlbmd0aCxwPTA7bz4wJiZvPHU/ZS5lcnJvcnMucHVzaChuZXcgeXQoMzIwMiwhMSkpOjA9PW8mJihwPTEvKHUtMSkpO2xldCBmPXUtMSxtPWUuY3VycmVudFRpbWUsYj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxNPWIuZHVyYXRpb247cmV0dXJuIGQuZm9yRWFjaCgoeSx4KT0+e2xldCBSPXA+MD94PT1mPzE6cCp4OnNbeF0sQT1SKk07ZS5jdXJyZW50VGltZT1tK2IuZGVsYXkrQSxiLmR1cmF0aW9uPUEsdGhpcy5fdmFsaWRhdGVTdHlsZUFzdCh5LGUpLHkub2Zmc2V0PVIsaS5zdHlsZXMucHVzaCh5KX0pLGl9dmlzaXRSZWZlcmVuY2UodCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpsYSh0aGlzLEZiKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOmVmKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7cmV0dXJuIGUuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6ZWYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczplZih0Lm9wdGlvbnMpfX12aXNpdFF1ZXJ5KHQsZSl7bGV0IGk9ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixyPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDtsZXRbbyxzXT1mdW5jdGlvbihuKXtsZXQgdD0hIW4uc3BsaXQoL1xzKixccyovKS5maW5kKGU9PiI6c2VsZiI9PWUpO3JldHVybiB0JiYobj1uLnJlcGxhY2UoU2ZlLCIiKSksbj1uLnJlcGxhY2UoL0BcKi9nLFJ3KS5yZXBsYWNlKC9AXHcrL2csZT0+UncrIi0iK2Uuc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxfayksW24sdF19KHQuc2VsZWN0b3IpO2UuY3VycmVudFF1ZXJ5U2VsZWN0b3I9aS5sZW5ndGg/aSsiICIrbzpvLGNhKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7bGV0IGE9bGEodGhpcyxGYih0LmFuaW1hdGlvbiksZSk7cmV0dXJuIGUuY3VycmVudFF1ZXJ5PW51bGwsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLHt0eXBlOjExLHNlbGVjdG9yOm8sbGltaXQ6ci5saW1pdHx8MCxvcHRpb25hbDohIXIub3B0aW9uYWwsaW5jbHVkZVNlbGY6cyxhbmltYXRpb246YSxvcmlnaW5hbFNlbGVjdG9yOnQuc2VsZWN0b3Isb3B0aW9uczplZih0Lm9wdGlvbnMpfX12aXNpdFN0YWdnZXIodCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaChuZXcgeXQoMzAxMywhMSkpO2xldCBpPSJmdWxsIj09PXQudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OlB3KHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOmxhKHRoaXMsRmIodC5hbmltYXRpb24pLGUpLHRpbWluZ3M6aSxvcHRpb25zOm51bGx9fX0seGs9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5lcnJvcnM9dCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX07ZnVuY3Rpb24gZWYobil7cmV0dXJuIG4/KG49amIobikpLnBhcmFtcyYmKG4ucGFyYW1zPWZ1bmN0aW9uKG4pe3JldHVybiBuP2piKG4pOm51bGx9KG4ucGFyYW1zKSk6bj17fSxufWZ1bmN0aW9uIGRrKG4sdCxlKXtyZXR1cm57ZHVyYXRpb246bixkZWxheTp0LGVhc2luZzplfX1mdW5jdGlvbiBGayhuLHQsZSxpLHIsbyxzPW51bGwsYT0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50Om4sa2V5ZnJhbWVzOnQscHJlU3R5bGVQcm9wczplLHBvc3RTdHlsZVByb3BzOmksZHVyYXRpb246cixkZWxheTpvLHRvdGFsVGltZTpyK28sZWFzaW5nOnMsc3ViVGltZWxpbmU6YX19dmFyIEJiPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0KHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0KHQpfHxbXX1hcHBlbmQodCxlKXtsZXQgaT10aGlzLl9tYXAuZ2V0KHQpO2l8fHRoaXMuX21hcC5zZXQodCxpPVtdKSxpLnB1c2goLi4uZSl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fSxQZmU9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGtmZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gRkcobix0LGUsaSxyLG89bmV3IE1hcCxzPW5ldyBNYXAsYSxsLGM9W10pe3JldHVybihuZXcgQ2spLmJ1aWxkS2V5ZnJhbWVzKG4sdCxlLGkscixvLHMsYSxsLGMpfXZhciBDaz1jbGFzc3tidWlsZEtleWZyYW1lcyh0LGUsaSxyLG8scyxhLGwsYyxkPVtdKXtjPWN8fG5ldyBCYjtsZXQgdT1uZXcgVmIodCxlLGMscixvLGQsW10pO3Uub3B0aW9ucz1sO2xldCBwPWwuZGVsYXk/cGQobC5kZWxheSk6MDt1LmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHApLHUuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbc10sbnVsbCx1LmVycm9ycyxsKSxsYSh0aGlzLGksdSk7bGV0IGY9dS50aW1lbGluZXMuZmlsdGVyKG09Pm0uY29udGFpbnNBbmltYXRpb24oKSk7aWYoZi5sZW5ndGgmJmEuc2l6ZSl7bGV0IG07Zm9yKGxldCBiPWYubGVuZ3RoLTE7Yj49MDtiLS0pe2xldCBNPWZbYl07aWYoTS5lbGVtZW50PT09ZSl7bT1NO2JyZWFrfX1tJiYhbS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpJiZtLnNldFN0eWxlcyhbYV0sbnVsbCx1LmVycm9ycyxsKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAobT0+bS5idWlsZEtleWZyYW1lcygpKTpbRmsoZSxbXSxbXSxbXSwwLHAsIiIsITEpXX12aXNpdFRyaWdnZXIodCxlKXt9dmlzaXRTdGF0ZSh0LGUpe312aXNpdFRyYW5zaXRpb24odCxlKXt9dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtsZXQgaT1lLnN1Ykluc3RydWN0aW9ucy5nZXQoZS5lbGVtZW50KTtpZihpKXtsZXQgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKSxvPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHM9dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMoaSxyLHIub3B0aW9ucyk7byE9cyYmZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocyl9ZS5wcmV2aW91c05vZGU9dH12aXNpdEFuaW1hdGVSZWYodCxlKXtsZXQgaT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFt0Lm9wdGlvbnMsdC5hbmltYXRpb24ub3B0aW9uc10sZSxpKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGkpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGkuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyh0LGUsaSl7Zm9yKGxldCByIG9mIHQpe2xldCBvPXI/LmRlbGF5O2lmKG8pe2xldCBzPSJudW1iZXIiPT10eXBlb2Ygbz9vOnBkKExiKG8scj8ucGFyYW1zPz97fSxlLmVycm9ycykpO2kuZGVsYXlOZXh0U3RlcChzKX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyh0LGUsaSl7bGV0IG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscz1udWxsIT1pLmR1cmF0aW9uP3BkKGkuZHVyYXRpb24pOm51bGwsYT1udWxsIT1pLmRlbGF5P3BkKGkuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1zJiZ0LmZvckVhY2gobD0+e2xldCBjPWUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwscyxhKTtvPU1hdGgubWF4KG8sYy5kdXJhdGlvbitjLmRlbGF5KX0pLG99dmlzaXRSZWZlcmVuY2UodCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxsYSh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTZXF1ZW5jZSh0LGUpe2xldCBpPWUuc3ViQ29udGV4dENvdW50LHI9ZSxvPXQub3B0aW9ucztpZihvJiYoby5wYXJhbXN8fG8uZGVsYXkpJiYocj1lLmNyZWF0ZVN1YkNvbnRleHQobyksci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1vLmRlbGF5KSl7Nj09ci5wcmV2aW91c05vZGUudHlwZSYmKHIuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLHIucHJldmlvdXNOb2RlPUZ3KTtsZXQgcz1wZChvLmRlbGF5KTtyLmRlbGF5TmV4dFN0ZXAocyl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2gocz0+bGEodGhpcyxzLHIpKSxyLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxyLnN1YkNvbnRleHRDb3VudD5pJiZyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1bXSxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/cGQodC5vcHRpb25zLmRlbGF5KTowO3Quc3RlcHMuZm9yRWFjaChzPT57bGV0IGE9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7byYmYS5kZWxheU5leHRTdGVwKG8pLGxhKHRoaXMscyxhKSxyPU1hdGgubWF4KHIsYS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGkucHVzaChhLmN1cnJlbnRUaW1lbGluZSl9KSxpLmZvckVhY2gocz0+ZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhzKSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUociksZS5wcmV2aW91c05vZGU9dH1fdmlzaXRUaW1pbmcodCxlKXtpZih0LmR5bmFtaWMpe2xldCBpPXQuc3RyVmFsdWU7cmV0dXJuIFB3KGUucGFyYW1zP0xiKGksZS5wYXJhbXMsZS5lcnJvcnMpOmksZS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjp0LmR1cmF0aW9uLGRlbGF5OnQuZGVsYXksZWFzaW5nOnQuZWFzaW5nfX12aXNpdEFuaW1hdGUodCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyh0LnRpbWluZ3MsZSkscj1lLmN1cnJlbnRUaW1lbGluZTtpLmRlbGF5JiYoZS5pbmNyZW1lbnRUaW1lKGkuZGVsYXkpLHIuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2xldCBvPXQuc3R5bGU7NT09by50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMobyxlKTooZS5pbmNyZW1lbnRUaW1lKGkuZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShvLGUpLHIuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsZS5wcmV2aW91c05vZGU9dH12aXNpdFN0eWxlKHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZWxpbmUscj1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshciYmaS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkmJmkuZm9yd2FyZEZyYW1lKCk7bGV0IG89ciYmci5lYXNpbmd8fHQuZWFzaW5nO3QuaXNFbXB0eVN0ZXA/aS5hcHBseUVtcHR5U3RlcChvKTppLnNldFN0eWxlcyh0LnN0eWxlcyxvLGUuZXJyb3JzLGUub3B0aW9ucyksZS5wcmV2aW91c05vZGU9dH12aXNpdEtleWZyYW1lcyh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sbz1pLmR1cmF0aW9uLGE9ZS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO2EuZWFzaW5nPWkuZWFzaW5nLHQuc3R5bGVzLmZvckVhY2gobD0+e2EuZm9yd2FyZFRpbWUoKGwub2Zmc2V0fHwwKSpvKSxhLnNldFN0eWxlcyhsLnN0eWxlcyxsLmVhc2luZyxlLmVycm9ycyxlLm9wdGlvbnMpLGEuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGEpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIrbyksZS5wcmV2aW91c05vZGU9dH12aXNpdFF1ZXJ5KHQsZSl7bGV0IGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscj10Lm9wdGlvbnN8fHt9LG89ci5kZWxheT9wZChyLmRlbGF5KTowO28mJig2PT09ZS5wcmV2aW91c05vZGUudHlwZXx8MD09aSYmZS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPUZ3KTtsZXQgcz1pLGE9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFyLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPWEubGVuZ3RoO2xldCBsPW51bGw7YS5mb3JFYWNoKChjLGQpPT57ZS5jdXJyZW50UXVlcnlJbmRleD1kO2xldCB1PWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMsYyk7byYmdS5kZWxheU5leHRTdGVwKG8pLGM9PT1lLmVsZW1lbnQmJihsPXUuY3VycmVudFRpbWVsaW5lKSxsYSh0aGlzLHQuYW5pbWF0aW9uLHUpLHUuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHM9TWF0aC5tYXgocyx1LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxlLmN1cnJlbnRRdWVyeUluZGV4PTAsZS5jdXJyZW50UXVlcnlUb3RhbD0wLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHMpLGwmJihlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpLGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3RhZ2dlcih0LGUpe2xldCBpPWUucGFyZW50Q29udGV4dCxyPWUuY3VycmVudFRpbWVsaW5lLG89dC50aW1pbmdzLHM9TWF0aC5hYnMoby5kdXJhdGlvbiksYT1zKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLGw9cyplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChvLmR1cmF0aW9uPDA/InJldmVyc2UiOm8uZWFzaW5nKXtjYXNlInJldmVyc2UiOmw9YS1sO2JyZWFrO2Nhc2UiZnVsbCI6bD1pLmN1cnJlbnRTdGFnZ2VyVGltZX1sZXQgZD1lLmN1cnJlbnRUaW1lbGluZTtsJiZkLmRlbGF5TmV4dFN0ZXAobCk7bGV0IHU9ZC5jdXJyZW50VGltZTtsYSh0aGlzLHQuYW5pbWF0aW9uLGUpLGUucHJldmlvdXNOb2RlPXQsaS5jdXJyZW50U3RhZ2dlclRpbWU9ci5jdXJyZW50VGltZS11KyhyLnN0YXJ0VGltZS1pLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUpfX0sRnc9e30sVmI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1pLHRoaXMuX2VudGVyQ2xhc3NOYW1lPXIsdGhpcy5fbGVhdmVDbGFzc05hbWU9byx0aGlzLmVycm9ycz1zLHRoaXMudGltZWxpbmVzPWEsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1Gdyx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9bHx8bmV3IHZoKHRoaXMuX2RyaXZlcixlLDApLGEucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVwZGF0ZU9wdGlvbnModCxlKXtpZighdClyZXR1cm47bGV0IGk9dCxyPXRoaXMub3B0aW9ucztudWxsIT1pLmR1cmF0aW9uJiYoci5kdXJhdGlvbj1wZChpLmR1cmF0aW9uKSksbnVsbCE9aS5kZWxheSYmKHIuZGVsYXk9cGQoaS5kZWxheSkpO2xldCBvPWkucGFyYW1zO2lmKG8pe2xldCBzPXIucGFyYW1zO3N8fChzPXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKG8pLmZvckVhY2goYT0+eyghZXx8IXMuaGFzT3duUHJvcGVydHkoYSkpJiYoc1thXT1MYihvW2FdLHMsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtsZXQgdD17fTtpZih0aGlzLm9wdGlvbnMpe2xldCBlPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoZSl7bGV0IGk9dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57aVtyXT1lW3JdfSl9fXJldHVybiB0fWNyZWF0ZVN1YkNvbnRleHQodD1udWxsLGUsaSl7bGV0IHI9ZXx8dGhpcy5lbGVtZW50LG89bmV3IFZiKHRoaXMuX2RyaXZlcixyLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsocixpfHwwKSk7cmV0dXJuIG8ucHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLG8uY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLG8ub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLG8udXBkYXRlT3B0aW9ucyh0KSxvLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsby5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLG8ucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50Kyssb310cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPUZ3LHRoaXMuY3VycmVudFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LHQpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh0LGUsaSl7bGV0IHI9e2R1cmF0aW9uOmU/P3QuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGk/PzApK3QuZGVsYXksZWFzaW5nOiIifSxvPW5ldyBNayh0aGlzLl9kcml2ZXIsdC5lbGVtZW50LHQua2V5ZnJhbWVzLHQucHJlU3R5bGVQcm9wcyx0LnBvc3RTdHlsZVByb3BzLHIsdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2gobykscn1pbmNyZW1lbnRUaW1lKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfWRlbGF5TmV4dFN0ZXAodCl7dD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHQpfWludm9rZVF1ZXJ5KHQsZSxpLHIsbyxzKXtsZXQgYT1bXTtpZihyJiZhLnB1c2godGhpcy5lbGVtZW50KSx0Lmxlbmd0aD4wKXt0PSh0PXQucmVwbGFjZShQZmUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShrZmUsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgYz10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9aSk7MCE9PWkmJihjPWk8MD9jLnNsaWNlKGMubGVuZ3RoK2ksYy5sZW5ndGgpOmMuc2xpY2UoMCxpKSksYS5wdXNoKC4uLmMpfXJldHVybiFvJiYwPT1hLmxlbmd0aCYmcy5wdXNoKG5ldyB5dCgzMDE0LCExKSksYX19LHZoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPWksdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPXIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZWFzaW5nPW51bGwsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgdmgodGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fHhjKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUseGMpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyx4Yyl9ZWxzZSBiaChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFthLGxdb2Ygcyl7bGV0IGM9TGIobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGEsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoYSl8fHRoaXMuX2JhY2tGaWxsLnNldChhLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChhKT8/eGMpLHRoaXMuX3VwZGF0ZVN0eWxlKGEsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWJoKGEsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKChkLHUpPT57ZD09PUV3P3QuYWRkKHUpOmQ9PT14YyYmZS5hZGQodSl9KSxpfHxjLnNldCgib2Zmc2V0IixsL3RoaXMuZHVyYXRpb24pLHIucHVzaChjKX0pO2xldCBvPXQuc2l6ZT9Pdyh0LnZhbHVlcygpKTpbXSxzPWUuc2l6ZT9PdyhlLnZhbHVlcygpKTpbXTtpZihpKXtsZXQgYT1yWzBdLGw9bmV3IE1hcChhKTthLnNldCgib2Zmc2V0IiwwKSxsLnNldCgib2Zmc2V0IiwxKSxyPVthLGxdfXJldHVybiBGayh0aGlzLmVsZW1lbnQscixvLHMsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fSxNaz1jbGFzcyBleHRlbmRzIHZoe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGE9ITEpe3N1cGVyKHQsZSxzLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1pLHRoaXMucHJlU3R5bGVQcm9wcz1yLHRoaXMucG9zdFN0eWxlUHJvcHM9byx0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1hLHRoaXMudGltaW5ncz17ZHVyYXRpb246cy5kdXJhdGlvbixkZWxheTpzLmRlbGF5LGVhc2luZzpzLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgdD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6ZSxkdXJhdGlvbjppLGVhc2luZzpyfT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmUpe2xldCBvPVtdLHM9aStlLGE9ZS9zLGw9YmgodFswXSk7bC5zZXQoIm9mZnNldCIsMCksby5wdXNoKGwpO2xldCBjPWJoKHRbMF0pO2Muc2V0KCJvZmZzZXQiLHBHKGEpKSxvLnB1c2goYyk7bGV0IGQ9dC5sZW5ndGgtMTtmb3IobGV0IHU9MTt1PD1kO3UrKyl7bGV0IHA9YmgodFt1XSksZj1wLmdldCgib2Zmc2V0Iik7cC5zZXQoIm9mZnNldCIscEcoKGUrZippKS9zKSksby5wdXNoKHApfWk9cyxlPTAscj0iIix0PW99cmV0dXJuIEZrKHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGksZSxyLCEwKX19O2Z1bmN0aW9uIHBHKG4sdD0zKXtsZXQgZT1NYXRoLnBvdygxMCx0LTEpO3JldHVybiBNYXRoLnJvdW5kKG4qZSkvZX12YXIgbmY9Y2xhc3N7fSxOZmU9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pLE53PWNsYXNzIGV4dGVuZHMgbmZ7bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIGtrKHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLGkscil7bGV0IG89IiIscz1pLnRvU3RyaW5nKCkudHJpbSgpO2lmKE5mZS5oYXMoZSkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlvPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJnIucHVzaChuZXcgeXQoMzAwNSwhMSkpfXJldHVybiBzK299fTtmdW5jdGlvbiBmRyhuLHQsZSxpLHIsbyxzLGEsbCxjLGQsdSxwKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGlzUmVtb3ZhbFRyYW5zaXRpb246cixmcm9tU3RhdGU6ZSxmcm9tU3R5bGVzOm8sdG9TdGF0ZTppLHRvU3R5bGVzOnMsdGltZWxpbmVzOmEscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOmQsdG90YWxUaW1lOnUsZXJyb3JzOnB9fXZhciB1az17fSxMdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPWl9bWF0Y2godCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIG4uc29tZShvPT5vKHQsZSxpLHIpKX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLGkscil9YnVpbGRTdHlsZXModCxlLGkpe2xldCByPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT10JiYocj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQodD8udG9TdHJpbmcoKSl8fHIpLHI/ci5idWlsZFN0eWxlcyhlLGkpOm5ldyBNYXB9YnVpbGQodCxlLGkscixvLHMsYSxsLGMsZCl7bGV0IHU9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8dWssbT10aGlzLmJ1aWxkU3R5bGVzKGksYSYmYS5wYXJhbXN8fHVrLHUpLGI9bCYmbC5wYXJhbXN8fHVrLE09dGhpcy5idWlsZFN0eWxlcyhyLGIsdSkseT1uZXcgU2V0LHg9bmV3IE1hcCxSPW5ldyBNYXAsQT0idm9pZCI9PT1yLFY9e3BhcmFtczpCZmUoYixwKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sdGU9ZD9bXTpGRyh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLG8scyxtLE0sVixjLHUpLEs9MDtpZih0ZS5mb3JFYWNoKFhlPT57Sz1NYXRoLm1heChYZS5kdXJhdGlvbitYZS5kZWxheSxLKX0pLHUubGVuZ3RoKXJldHVybiBmRyhlLHRoaXMuX3RyaWdnZXJOYW1lLGkscixBLG0sTSxbXSxbXSx4LFIsSyx1KTt0ZS5mb3JFYWNoKFhlPT57bGV0IERlPVhlLmVsZW1lbnQsRD1jYSh4LERlLG5ldyBTZXQpO1hlLnByZVN0eWxlUHJvcHMuZm9yRWFjaChjZT0+RC5hZGQoY2UpKTtsZXQgcmU9Y2EoUixEZSxuZXcgU2V0KTtYZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGNlPT5yZS5hZGQoY2UpKSxEZSE9PWUmJnkuYWRkKERlKX0pO2xldCB4ZT1Pdyh5LnZhbHVlcygpKTtyZXR1cm4gZkcoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxtLE0sdGUseGUseCxSLEspfX07ZnVuY3Rpb24gQmZlKG4sdCl7bGV0IGU9amIodCk7Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmbnVsbCE9bltpXSYmKGVbaV09bltpXSk7cmV0dXJuIGV9ZnVuY3Rpb24gbUcobix0LGUpe24uaGFzKHQpP24uaGFzKGUpfHxuLnNldChlLG4uZ2V0KHQpKTpuLmhhcyhlKSYmbi5zZXQodCxuLmdldChlKSl9dmFyIHpmZT1uZXcgQmIsaEc9Im5nLWFuaW1hdGUtcXVldWVkIixwaz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIscWZlPVtdLE5HPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxZZmU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LEJhPSJfX25nX3JlbW92ZWQiLEhiPWNsYXNze2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9KGk/dC52YWx1ZTp0KT8/bnVsbCxpKXtsZXQgbz1qYih0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyh0KXtsZXQgZT10LnBhcmFtcztpZihlKXtsZXQgaT10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e251bGw9PWlbcl0mJihpW3JdPWVbcl0pfSl9fX0sTmI9InZvaWQiLGZrPW5ldyBIYihOYiksemI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLnRyaWdnZXJOYW1lPWUsdGhpcy5lbGVtZW50PWksdGhpcy5fcGxheWVyPW5ldyBtdSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIodCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGUsaSk9PntlLmZvckVhY2gocj0+QWsodCxpLHZvaWQgMCxyKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJnQub25TdGFydCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLHQub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSx0Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KHQsZSl7Y2EodGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9b25Eb25lKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfW9uU3RhcnQodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0Iix0KSx0aGlzLl9wbGF5ZXIub25TdGFydCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfX07ZnVuY3Rpb24gQXcobil7cmV0dXJuIG4mJjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uIGdHKG4sdCl7bGV0IGU9bi5zdHlsZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9dD8/Im5vbmUiLGV9ZnVuY3Rpb24gX0cobix0LGUsaSxyKXtsZXQgbz1bXTtlLmZvckVhY2gobD0+by5wdXNoKGdHKGwpKSk7bGV0IHM9W107aS5mb3JFYWNoKChsLGMpPT57bGV0IGQ9bmV3IE1hcDtsLmZvckVhY2godT0+e2xldCBwPXQuY29tcHV0ZVN0eWxlKGMsdSxyKTtkLnNldCh1LHApLCghcHx8MD09cC5sZW5ndGgpJiYoY1tCYV09WWZlLHMucHVzaChjKSl9KSxuLnNldChjLGQpfSk7bGV0IGE9MDtyZXR1cm4gZS5mb3JFYWNoKGw9PmdHKGwsb1thKytdKSksc31mdW5jdGlvbiBiRyhuLHQpe2xldCBlPW5ldyBNYXA7aWYobi5mb3JFYWNoKGE9PmUuc2V0KGEsW10pKSwwPT10Lmxlbmd0aClyZXR1cm4gZTtsZXQgaT0xLHI9bmV3IFNldCh0KSxvPW5ldyBNYXA7ZnVuY3Rpb24gcyhhKXtpZighYSlyZXR1cm4gaTtsZXQgbD1vLmdldChhKTtpZihsKXJldHVybiBsO2xldCBjPWEucGFyZW50Tm9kZTtyZXR1cm4gbD1lLmhhcyhjKT9jOnIuaGFzKGMpP2k6cyhjKSxvLnNldChhLGwpLGx9cmV0dXJuIHQuZm9yRWFjaChhPT57bGV0IGw9cyhhKTtsIT09aSYmZS5nZXQobCkucHVzaChhKX0pLGV9ZnVuY3Rpb24gVmEobix0KXtuLmNsYXNzTGlzdD8uYWRkKHQpfWZ1bmN0aW9uIF9oKG4sdCl7bi5jbGFzc0xpc3Q/LnJlbW92ZSh0KX1mdW5jdGlvbiBLZmUobix0LGUpe2h1KGUpLm9uRG9uZSgoKT0+bi5wcm9jZXNzTGVhdmVOb2RlKHQpKX1mdW5jdGlvbiBMRyhuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdO2kgaW5zdGFuY2VvZiBQYj9MRyhpLnBsYXllcnMsdCk6dC5wdXNoKGkpfX1mdW5jdGlvbiB2RyhuLHQsZSl7bGV0IGk9ZS5nZXQobik7aWYoIWkpcmV0dXJuITE7bGV0IHI9dC5nZXQobik7cmV0dXJuIHI/aS5mb3JFYWNoKG89PnIuYWRkKG8pKTp0LnNldChuLGkpLGUuZGVsZXRlKG4pLCEwfXZhciBndT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgY2xhc3N7X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWNvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1nZXQgcXVldWVkUGxheWVycygpe2xldCB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZT0+e2UucGxheWVycy5mb3JFYWNoKGk9PntpLnF1ZXVlZCYmdC5wdXNoKGkpfSl9KSx0fWNyZWF0ZU5hbWVzcGFjZSh0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9aSx0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9bmV3IE1hcCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxWYShlLHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3Rlbih0LGUsaSxyKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKGUpKXRocm93IG5ldyB5dCgzMzAyLCExKTtpZihudWxsPT1pfHwwPT1pLmxlbmd0aCl0aHJvdyBuZXcgeXQoMzMwMywhMSk7aWYoInN0YXJ0IiE9KG49aSkmJiJkb25lIiE9bil0aHJvdyBuZXcgeXQoMzQwMCwhMSk7dmFyIG47bGV0IG89Y2EodGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxzPXtuYW1lOmUscGhhc2U6aSxjYWxsYmFjazpyfTtvLnB1c2gocyk7bGV0IGE9Y2EodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCx0LG5ldyBNYXApO3JldHVybiBhLmhhcyhlKXx8KFZhKHQsVHcpLFZhKHQsVHcrIi0iK2UpLGEuc2V0KGUsZmspKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57bGV0IGw9by5pbmRleE9mKHMpO2w+PTAmJm8uc3BsaWNlKGwsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGUpfHxhLmRlbGV0ZShlKX0pfX1yZWdpc3Rlcih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXModCkmJih0aGlzLl90cmlnZ2Vycy5zZXQodCxlKSwhMCl9X2dldFRyaWdnZXIodCl7bGV0IGU9dGhpcy5fdHJpZ2dlcnMuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyB5dCgzNDAxLCExKTtyZXR1cm4gZX10cmlnZ2VyKHQsZSxpLHI9ITApe2xldCBvPXRoaXMuX2dldFRyaWdnZXIoZSkscz1uZXcgemIodGhpcy5pZCxlLHQpLGE9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7YXx8KFZhKHQsVHcpLFZhKHQsVHcrIi0iK2UpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KHQsYT1uZXcgTWFwKSk7bGV0IGw9YS5nZXQoZSksYz1uZXcgSGIoaSx0aGlzLmlkKTtpZighKGkmJmkuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZsJiZjLmFic29yYk9wdGlvbnMobC5vcHRpb25zKSxhLnNldChlLGMpLGx8fChsPWZrKSxjLnZhbHVlIT09TmImJmwudmFsdWU9PT1jLnZhbHVlKXtpZighZnVuY3Rpb24obix0KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPU9iamVjdC5rZXlzKHQpO2lmKGUubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpZighdC5oYXNPd25Qcm9wZXJ0eShvKXx8bltvXSE9PXRbb10pcmV0dXJuITF9cmV0dXJuITB9KGwucGFyYW1zLGMucGFyYW1zKSl7bGV0IGI9W10sTT1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMsYikseT1vLm1hdGNoU3R5bGVzKGMudmFsdWUsYy5wYXJhbXMsYik7Yi5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKGIpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57dGYodCxNKSxDYyh0LHkpfSl9cmV0dXJufWxldCBwPWNhKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO3AuZm9yRWFjaChiPT57Yi5uYW1lc3BhY2VJZD09dGhpcy5pZCYmYi50cmlnZ2VyTmFtZT09ZSYmYi5xdWV1ZWQmJmIuZGVzdHJveSgpfSk7bGV0IGY9by5tYXRjaFRyYW5zaXRpb24obC52YWx1ZSxjLnZhbHVlLHQsYy5wYXJhbXMpLG09ITE7aWYoIWYpe2lmKCFyKXJldHVybjtmPW8uZmFsbGJhY2tUcmFuc2l0aW9uLG09ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmYsZnJvbVN0YXRlOmwsdG9TdGF0ZTpjLHBsYXllcjpzLGlzRmFsbGJhY2tUcmFuc2l0aW9uOm19KSxtfHwoVmEodCxoRykscy5vblN0YXJ0KCgpPT57X2godCxoRyl9KSkscy5vbkRvbmUoKCk9PntsZXQgYj10aGlzLnBsYXllcnMuaW5kZXhPZihzKTtiPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGIsMSk7bGV0IE09dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKE0pe2xldCB5PU0uaW5kZXhPZihzKTt5Pj0wJiZNLnNwbGljZSh5LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHMpLHAucHVzaChzKSxzfWRlcmVnaXN0ZXIodCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKHQpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChlPT5lLmRlbGV0ZSh0KSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKChlLGkpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoaSxlLmZpbHRlcihyPT5yLm5hbWUhPXQpKX0pfWNsZWFyRWxlbWVudENhY2hlKHQpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKHQpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKHQpO2xldCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCxSdywhMCk7aS5mb3JFYWNoKHI9PntpZihyW0JhXSlyZXR1cm47bGV0IG89dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChyKTtvLnNpemU/by5mb3JFYWNoKHM9PnMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHIsZSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUocil9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmZvckVhY2gocj0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsaSxyKXtsZXQgbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KSxzPW5ldyBNYXA7aWYobyl7bGV0IGE9W107aWYoby5mb3JFYWNoKChsLGMpPT57aWYocy5zZXQoYyxsLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoYykpe2xldCBkPXRoaXMudHJpZ2dlcih0LGMsTmIscik7ZCYmYS5wdXNoKGQpfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUscyksaSYmaHUoYSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpe2xldCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLGk9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmaSl7bGV0IHI9bmV3IFNldDtlLmZvckVhY2gobz0+e2xldCBzPW8ubmFtZTtpZihyLmhhcyhzKSlyZXR1cm47ci5hZGQocyk7bGV0IGw9dGhpcy5fdHJpZ2dlcnMuZ2V0KHMpLmZhbGxiYWNrVHJhbnNpdGlvbixjPWkuZ2V0KHMpfHxmayxkPW5ldyBIYihOYiksdT1uZXcgemIodGhpcy5pZCxzLHQpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6cyx0cmFuc2l0aW9uOmwsZnJvbVN0YXRlOmMsdG9TdGF0ZTpkLHBsYXllcjp1LGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZSh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZTtpZih0LmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpcmV0dXJuO2xldCByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXtsZXQgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZXtsZXQgcz10O2Zvcig7cz1zLnBhcmVudE5vZGU7KWlmKGkuc3RhdGVzQnlFbGVtZW50LmdldChzKSl7cj0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLHIpaS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk7ZWxzZXtsZXQgbz10W0JhXTsoIW98fG89PT1ORykmJihpLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19aW5zZXJ0Tm9kZSh0LGUpe1ZhKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyh0KXtsZXQgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChpPT57bGV0IHI9aS5wbGF5ZXI7aWYoci5kZXN0cm95ZWQpcmV0dXJuO2xldCBvPWkuZWxlbWVudCxzPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO3MmJnMuZm9yRWFjaChhPT57aWYoYS5uYW1lPT1pLnRyaWdnZXJOYW1lKXtsZXQgbD1SayhvLGkudHJpZ2dlck5hbWUsaS5mcm9tU3RhdGUudmFsdWUsaS50b1N0YXRlLnZhbHVlKTtsLl9kYXRhPXQsQWsoaS5wbGF5ZXIsYS5waGFzZSxsLGEuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e3IuZGVzdHJveSgpfSk6ZS5wdXNoKGkpfSksdGhpcy5fcXVldWU9W10sZS5zb3J0KChpLHIpPT57bGV0IG89aS50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxzPXIudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW98fDA9PXM/by1zOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGkuZWxlbWVudCxyLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfWVsZW1lbnRDb250YWluc0RhdGEodCl7bGV0IGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksZT0hIXRoaXMuX3F1ZXVlLmZpbmQoaT0+aS5lbGVtZW50PT09dCl8fGUsZX19KHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsaSksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09aX1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMaXN0LHI9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihpLmxlbmd0aC0xPj0wKXtsZXQgcz0hMSxhPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoZSk7Zm9yKDthOyl7bGV0IGw9ci5nZXQoYSk7aWYobCl7bGV0IGM9aS5pbmRleE9mKGwpO2kuc3BsaWNlKGMrMSwwLHQpLHM9ITA7YnJlYWt9YT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpfXN8fGkudW5zaGlmdCh0KX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gci5zZXQoZSx0KSx0fXJlZ2lzdGVyKHQsZSl7bGV0IGk9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3JldHVybiBpfHwoaT10aGlzLmNyZWF0ZU5hbWVzcGFjZSh0LGUpKSxpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSl7bGV0IHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxpKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaCgoKT0+e3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGkuaG9zdEVsZW1lbnQpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07bGV0IHI9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGkpO3I+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKHIsMSl9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+aS5kZXN0cm95KGUpKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCl7bGV0IGU9bmV3IFNldCxpPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihpKWZvcihsZXQgciBvZiBpLnZhbHVlcygpKWlmKHIubmFtZXNwYWNlSWQpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHIubmFtZXNwYWNlSWQpO28mJmUuYWRkKG8pfXJldHVybiBlfXRyaWdnZXIodCxlLGkscil7aWYoQXcoZSkpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKG8pcmV0dXJuIG8udHJpZ2dlcihlLGksciksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZSh0LGUsaSxyKXtpZighQXcoZSkpcmV0dXJuO2xldCBvPWVbQmFdO2lmKG8mJm8uc2V0Rm9yUmVtb3ZhbCl7by5zZXRGb3JSZW1vdmFsPSExLG8uc2V0Rm9yTW92ZT0hMDtsZXQgcz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtzPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHMsMSl9aWYodCl7bGV0IHM9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7cyYmcy5pbnNlcnROb2RlKGUsaSl9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfWNvbGxlY3RFbnRlckVsZW1lbnQodCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxWYSh0LHBrKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksX2godCxwaykpfXJlbW92ZU5vZGUodCxlLGkscil7aWYoQXcoZSkpe2xldCBvPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpZihvP28ucmVtb3ZlTm9kZShlLHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLHIpLGkpe2xldCBzPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO3MmJnMuaWQhPT10JiZzLnJlbW92ZU5vZGUoZSxyKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLHIpfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxpLHIsbyl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtCYV09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjppLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6b319bGlzdGVuKHQsZSxpLHIsbyl7cmV0dXJuIEF3KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLGkscixvKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLGkscixvKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsaSxyLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxvKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUncsITApO2UuZm9yRWFjaChpPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChpKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoZT10aGlzLmRyaXZlci5xdWVyeSh0LF9rLCEwKSxlLmZvckVhY2goaT0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGkpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PntpLnF1ZXVlZD9pLm1hcmtlZEZvckRlc3Ryb3k9ITA6aS5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChpPT5pLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gaHUodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PnQoKSk7dCgpfSl9cHJvY2Vzc0xlYXZlTm9kZSh0KXtsZXQgZT10W0JhXTtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHRbQmFdPU5HLGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtsZXQgaT10aGlzLl9mZXRjaE5hbWVzcGFjZShlLm5hbWVzcGFjZUlkKTtpJiZpLmNsZWFyRWxlbWVudENhY2hlKHQpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKHQsZS5zZXRGb3JSZW1vdmFsKX10LmNsYXNzTGlzdD8uY29udGFpbnMocGspJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goaT0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGksITEpfSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGkscik9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGkscikpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtpKyspVmEodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2ldLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2xldCBpPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhpLHQpfWZpbmFsbHl7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goaT0+aSgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtsZXQgaT10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGUubGVuZ3RoP2h1KGUpLm9uRG9uZSgoKT0+e2kuZm9yRWFjaChyPT5yKCkpfSk6aS5mb3JFYWNoKHI9PnIoKSl9fXJlcG9ydEVycm9yKHQpe3Rocm93IG5ldyB5dCgzNDAyLCExKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7bGV0IGk9bmV3IEJiLHI9W10sbz1uZXcgTWFwLHM9W10sYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAsZD1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKG5lPT57ZC5hZGQobmUpO2xldCBkZT10aGlzLmRyaXZlci5xdWVyeShuZSwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCBwZT0wO3BlPGRlLmxlbmd0aDtwZSsrKWQuYWRkKGRlW3BlXSl9KTtsZXQgdT10aGlzLmJvZHlOb2RlLHA9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLGY9YkcocCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLG09bmV3IE1hcCxiPTA7Zi5mb3JFYWNoKChuZSxkZSk9PntsZXQgcGU9RUcrYisrO20uc2V0KGRlLHBlKSxuZS5mb3JFYWNoKGplPT5WYShqZSxwZSkpfSk7bGV0IE09W10seT1uZXcgU2V0LHg9bmV3IFNldDtmb3IobGV0IG5lPTA7bmU8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtuZSsrKXtsZXQgZGU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW25lXSxwZT1kZVtCYV07cGUmJnBlLnNldEZvclJlbW92YWwmJihNLnB1c2goZGUpLHkuYWRkKGRlKSxwZS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoZGUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChqZT0+eS5hZGQoamUpKTp4LmFkZChkZSkpfWxldCBSPW5ldyBNYXAsQT1iRyhwLEFycmF5LmZyb20oeSkpO0EuZm9yRWFjaCgobmUsZGUpPT57bGV0IHBlPWdrK2IrKztSLnNldChkZSxwZSksbmUuZm9yRWFjaChqZT0+VmEoamUscGUpKX0pLHQucHVzaCgoKT0+e2YuZm9yRWFjaCgobmUsZGUpPT57bGV0IHBlPW0uZ2V0KGRlKTtuZS5mb3JFYWNoKGplPT5faChqZSxwZSkpfSksQS5mb3JFYWNoKChuZSxkZSk9PntsZXQgcGU9Ui5nZXQoZGUpO25lLmZvckVhY2goamU9Pl9oKGplLHBlKSl9KSxNLmZvckVhY2gobmU9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUobmUpfSl9KTtsZXQgVj1bXSx0ZT1bXTtmb3IobGV0IG5lPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7bmU+PTA7bmUtLSl0aGlzLl9uYW1lc3BhY2VMaXN0W25lXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGUpLmZvckVhY2gocGU9PntsZXQgamU9cGUucGxheWVyLENlPXBlLmVsZW1lbnQ7aWYoVi5wdXNoKGplKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtsZXQgd3Q9Q2VbQmFdO2lmKHd0JiZ3dC5zZXRGb3JNb3ZlKXtpZih3dC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiZ3dC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyhwZS50cmlnZ2VyTmFtZSkpe2xldCBvbj13dC5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmdldChwZS50cmlnZ2VyTmFtZSksdmU9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHBlLmVsZW1lbnQpO2lmKHZlJiZ2ZS5oYXMocGUudHJpZ2dlck5hbWUpKXtsZXQgbXQ9dmUuZ2V0KHBlLnRyaWdnZXJOYW1lKTttdC52YWx1ZT1vbix2ZS5zZXQocGUudHJpZ2dlck5hbWUsbXQpfX1yZXR1cm4gdm9pZCBqZS5kZXN0cm95KCl9fWxldCBOZT0hdXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh1LENlKSxsdD1SLmdldChDZSksTXQ9bS5nZXQoQ2UpLHB0PXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24ocGUsaSxNdCxsdCxOZSk7aWYocHQuZXJyb3JzJiZwdC5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIHRlLnB1c2gocHQpO2lmKE5lKXJldHVybiBqZS5vblN0YXJ0KCgpPT50ZihDZSxwdC5mcm9tU3R5bGVzKSksamUub25EZXN0cm95KCgpPT5DYyhDZSxwdC50b1N0eWxlcykpLHZvaWQgci5wdXNoKGplKTtpZihwZS5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gamUub25TdGFydCgoKT0+dGYoQ2UscHQuZnJvbVN0eWxlcykpLGplLm9uRGVzdHJveSgoKT0+Q2MoQ2UscHQudG9TdHlsZXMpKSx2b2lkIHIucHVzaChqZSk7bGV0IE9lPVtdO3B0LnRpbWVsaW5lcy5mb3JFYWNoKHd0PT57d3Quc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh3dC5lbGVtZW50KXx8T2UucHVzaCh3dCl9KSxwdC50aW1lbGluZXM9T2UsaS5hcHBlbmQoQ2UscHQudGltZWxpbmVzKSxzLnB1c2goe2luc3RydWN0aW9uOnB0LHBsYXllcjpqZSxlbGVtZW50OkNlfSkscHQucXVlcmllZEVsZW1lbnRzLmZvckVhY2god3Q9PmNhKGEsd3QsW10pLnB1c2goamUpKSxwdC5wcmVTdHlsZVByb3BzLmZvckVhY2goKHd0LG9uKT0+e2lmKHd0LnNpemUpe2xldCB2ZT1sLmdldChvbik7dmV8fGwuc2V0KG9uLHZlPW5ldyBTZXQpLHd0LmZvckVhY2goKG10LGZ0KT0+dmUuYWRkKGZ0KSl9fSkscHQucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgod3Qsb24pPT57bGV0IHZlPWMuZ2V0KG9uKTt2ZXx8Yy5zZXQob24sdmU9bmV3IFNldCksd3QuZm9yRWFjaCgobXQsZnQpPT52ZS5hZGQoZnQpKX0pfSk7aWYodGUubGVuZ3RoKXtsZXQgbmU9W107dGUuZm9yRWFjaChkZT0+e25lLnB1c2gobmV3IHl0KDM1MDUsITEpKX0pLFYuZm9yRWFjaChkZT0+ZGUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKG5lKX1sZXQgSz1uZXcgTWFwLHhlPW5ldyBNYXA7cy5mb3JFYWNoKG5lPT57bGV0IGRlPW5lLmVsZW1lbnQ7aS5oYXMoZGUpJiYoeGUuc2V0KGRlLGRlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChuZS5wbGF5ZXIubmFtZXNwYWNlSWQsbmUuaW5zdHJ1Y3Rpb24sSykpfSksci5mb3JFYWNoKG5lPT57bGV0IGRlPW5lLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGRlLCExLG5lLm5hbWVzcGFjZUlkLG5lLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goamU9PntjYShLLGRlLFtdKS5wdXNoKGplKSxqZS5kZXN0cm95KCl9KX0pO2xldCBYZT1NLmZpbHRlcihuZT0+dkcobmUsbCxjKSksRGU9bmV3IE1hcDtfRyhEZSx0aGlzLmRyaXZlcix4LGMseGMpLmZvckVhY2gobmU9Pnt2RyhuZSxsLGMpJiZYZS5wdXNoKG5lKX0pO2xldCByZT1uZXcgTWFwO2YuZm9yRWFjaCgobmUsZGUpPT57X0cocmUsdGhpcy5kcml2ZXIsbmV3IFNldChuZSksbCxFdyl9KSxYZS5mb3JFYWNoKG5lPT57bGV0IGRlPURlLmdldChuZSkscGU9cmUuZ2V0KG5lKTtEZS5zZXQobmUsbmV3IE1hcChbLi4uQXJyYXkuZnJvbShkZT8uZW50cmllcygpPz9bXSksLi4uQXJyYXkuZnJvbShwZT8uZW50cmllcygpPz9bXSldKSl9KTtsZXQgY2U9W10sZmU9W10sYmU9e307cy5mb3JFYWNoKG5lPT57bGV0e2VsZW1lbnQ6ZGUscGxheWVyOnBlLGluc3RydWN0aW9uOmplfT1uZTtpZihpLmhhcyhkZSkpe2lmKGQuaGFzKGRlKSlyZXR1cm4gcGUub25EZXN0cm95KCgpPT5DYyhkZSxqZS50b1N0eWxlcykpLHBlLmRpc2FibGVkPSEwLHBlLm92ZXJyaWRlVG90YWxUaW1lKGplLnRvdGFsVGltZSksdm9pZCByLnB1c2gocGUpO2xldCBDZT1iZTtpZih4ZS5zaXplPjEpe2xldCBsdD1kZSxNdD1bXTtmb3IoO2x0PWx0LnBhcmVudE5vZGU7KXtsZXQgcHQ9eGUuZ2V0KGx0KTtpZihwdCl7Q2U9cHQ7YnJlYWt9TXQucHVzaChsdCl9TXQuZm9yRWFjaChwdD0+eGUuc2V0KHB0LENlKSl9bGV0IE5lPXRoaXMuX2J1aWxkQW5pbWF0aW9uKHBlLm5hbWVzcGFjZUlkLGplLEssbyxyZSxEZSk7aWYocGUuc2V0UmVhbFBsYXllcihOZSksQ2U9PT1iZSljZS5wdXNoKHBlKTtlbHNle2xldCBsdD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KENlKTtsdCYmbHQubGVuZ3RoJiYocGUucGFyZW50UGxheWVyPWh1KGx0KSksci5wdXNoKHBlKX19ZWxzZSB0ZihkZSxqZS5mcm9tU3R5bGVzKSxwZS5vbkRlc3Ryb3koKCk9PkNjKGRlLGplLnRvU3R5bGVzKSksZmUucHVzaChwZSksZC5oYXMoZGUpJiZyLnB1c2gocGUpfSksZmUuZm9yRWFjaChuZT0+e2xldCBkZT1vLmdldChuZS5lbGVtZW50KTtpZihkZSYmZGUubGVuZ3RoKXtsZXQgcGU9aHUoZGUpO25lLnNldFJlYWxQbGF5ZXIocGUpfX0pLHIuZm9yRWFjaChuZT0+e25lLnBhcmVudFBsYXllcj9uZS5zeW5jUGxheWVyRXZlbnRzKG5lLnBhcmVudFBsYXllcik6bmUuZGVzdHJveSgpfSk7Zm9yKGxldCBuZT0wO25lPE0ubGVuZ3RoO25lKyspe2xldCBkZT1NW25lXSxwZT1kZVtCYV07aWYoX2goZGUsZ2spLHBlJiZwZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGplPVtdO2lmKGEuc2l6ZSl7bGV0IE5lPWEuZ2V0KGRlKTtOZSYmTmUubGVuZ3RoJiZqZS5wdXNoKC4uLk5lKTtsZXQgbHQ9dGhpcy5kcml2ZXIucXVlcnkoZGUsX2ssITApO2ZvcihsZXQgTXQ9MDtNdDxsdC5sZW5ndGg7TXQrKyl7bGV0IHB0PWEuZ2V0KGx0W010XSk7cHQmJnB0Lmxlbmd0aCYmamUucHVzaCguLi5wdCl9fWxldCBDZT1qZS5maWx0ZXIoTmU9PiFOZS5kZXN0cm95ZWQpO0NlLmxlbmd0aD9LZmUodGhpcyxkZSxDZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGRlKX1yZXR1cm4gTS5sZW5ndGg9MCxjZS5mb3JFYWNoKG5lPT57dGhpcy5wbGF5ZXJzLnB1c2gobmUpLG5lLm9uRG9uZSgoKT0+e25lLmRlc3Ryb3koKTtsZXQgZGU9dGhpcy5wbGF5ZXJzLmluZGV4T2YobmUpO3RoaXMucGxheWVycy5zcGxpY2UoZGUsMSl9KSxuZS5wbGF5KCl9KSxjZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW0JhXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgcz1bXTtpZihlKXtsZXQgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYocz1hKX1lbHNle2xldCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoYSl7bGV0IGw9IW98fG89PU5iO2EuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxzLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYocz1zLmZpbHRlcihhPT4hKGkmJmkhPWEubmFtZXNwYWNlSWR8fHImJnIhPWEudHJpZ2dlck5hbWUpKSksc31fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCxkPWMhPT1vLHU9Y2EoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyxkLHMsYSxlLnRvU3RhdGUpLmZvckVhY2goZj0+e2xldCBtPWYuZ2V0UmVhbFBsYXllcigpO20uYmVmb3JlRGVzdHJveSYmbS5iZWZvcmVEZXN0cm95KCksZi5kZXN0cm95KCksdS5wdXNoKGYpfSl9dGYobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8scyl7bGV0IGE9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLGQ9bmV3IFNldCx1PW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAobT0+e2xldCBiPW0uZWxlbWVudDtkLmFkZChiKTtsZXQgTT1iW0JhXTtpZihNJiZNLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgbXUobS5kdXJhdGlvbixtLmRlbGF5KTtsZXQgeT1iIT09bCx4PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBMRyhuLHQpLHR9KChpLmdldChiKXx8cWZlKS5tYXAoSz0+Sy5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoSz0+ISFLLmVsZW1lbnQmJksuZWxlbWVudD09PWIpLFI9by5nZXQoYiksQT1zLmdldChiKSxWPXlHKDAsdGhpcy5fbm9ybWFsaXplciwwLG0ua2V5ZnJhbWVzLFIsQSksdGU9dGhpcy5fYnVpbGRQbGF5ZXIobSxWLHgpO2lmKG0uc3ViVGltZWxpbmUmJnImJnUuYWRkKGIpLHkpe2xldCBLPW5ldyB6Yih0LGEsYik7Sy5zZXRSZWFsUGxheWVyKHRlKSxjLnB1c2goSyl9cmV0dXJuIHRlfSk7Yy5mb3JFYWNoKG09PntjYSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LG0uZWxlbWVudCxbXSkucHVzaChtKSxtLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsbS5lbGVtZW50LG0pKX0pLGQuZm9yRWFjaChtPT5WYShtLGxHKSk7bGV0IGY9aHUocCk7cmV0dXJuIGYub25EZXN0cm95KCgpPT57ZC5mb3JFYWNoKG09Pl9oKG0sbEcpKSxDYyhsLGUudG9TdHlsZXMpfSksdS5mb3JFYWNoKG09PntjYShyLG0sW10pLnB1c2goZil9KSxmfV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IG11KHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLHI9W10sbz1rRyh0aGlzLl9kcml2ZXIsZSxpLHIpO2lmKGkubGVuZ3RoKXRocm93IG5ldyB5dCgzNTAzLCExKTt0aGlzLl9hbmltYXRpb25zLnNldCh0LG8pfV9idWlsZFBsYXllcih0LGUsaSl7bGV0IHI9dC5lbGVtZW50LG89eUcoMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxpKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixvLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9Y3JlYXRlKHQsZSxpPXt9KXtsZXQgcyxyPVtdLG89dGhpcy5fYW5pbWF0aW9ucy5nZXQodCksYT1uZXcgTWFwO2lmKG8/KHM9RkcodGhpcy5fZHJpdmVyLGUsbyxFRyxnayxuZXcgTWFwLG5ldyBNYXAsaSx6ZmUscikscy5mb3JFYWNoKGQ9PntsZXQgdT1jYShhLGQuZWxlbWVudCxuZXcgTWFwKTtkLnBvc3RTdHlsZVByb3BzLmZvckVhY2gocD0+dS5zZXQocCxudWxsKSl9KSk6KHIucHVzaChuZXcgeXQoMzMwMCwhMSkpLHM9W10pLHIubGVuZ3RoKXRocm93IG5ldyB5dCgzNTA0LCExKTthLmZvckVhY2goKGQsdSk9PntkLmZvckVhY2goKHAsZik9PntkLnNldChmLHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUodSxmLHhjKSl9KX0pO2xldCBjPWh1KHMubWFwKGQ9PntsZXQgdT1hLmdldChkLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihkLG5ldyBNYXAsdSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldCh0LGMpLGMub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kodCkpLHRoaXMucGxheWVycy5wdXNoKGMpLGN9ZGVzdHJveSh0KXtsZXQgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKHQpO2xldCBpPXRoaXMucGxheWVycy5pbmRleE9mKGUpO2k+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoaSwxKX1fZ2V0UGxheWVyKHQpe2xldCBlPXRoaXMuX3BsYXllcnNCeUlkLmdldCh0KTtpZighZSl0aHJvdyBuZXcgeXQoMzMwMSwhMSk7cmV0dXJuIGV9bGlzdGVuKHQsZSxpLHIpe2xldCBvPVJrKGUsIiIsIiIsIiIpO3JldHVybiBBayh0aGlzLl9nZXRQbGF5ZXIodCksaSxvLHIpLCgpPT57fX1jb21tYW5kKHQsZSxpLHIpe2lmKCJyZWdpc3RlciI9PWkpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcih0LHJbMF0pO2lmKCJjcmVhdGUiPT1pKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7bGV0IG89dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChpKXtjYXNlInBsYXkiOm8ucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOm8ucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpvLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpvLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6by5maW5pc2goKTticmVhaztjYXNlImluaXQiOm8uaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOm8uc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fX0odCxlLGkpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9PnRoaXMub25SZW1vdmFsQ29tcGxldGUocixvKX1yZWdpc3RlclRyaWdnZXIodCxlLGkscixvKXtsZXQgcz10KyItIityLGE9dGhpcy5fdHJpZ2dlckNhY2hlW3NdO2lmKCFhKXtsZXQgbD1bXSxjPVtdLGQ9a0codGhpcy5fZHJpdmVyLG8sbCxjKTtpZihsLmxlbmd0aCl0aHJvdyBuZXcgeXQoMzQwNCwhMSk7YT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsZS5zdGF0ZXMuZm9yRWFjaChyPT57bGV0IG89ci5vcHRpb25zJiZyLm9wdGlvbnMucGFyYW1zfHx7fTt0aGlzLnN0YXRlcy5zZXQoci5uYW1lLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHlsZXM9dCx0aGlzLmRlZmF1bHRQYXJhbXM9ZSx0aGlzLm5vcm1hbGl6ZXI9aX1idWlsZFN0eWxlcyh0LGUpe2xldCBpPW5ldyBNYXAscj1qYih0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG89PntsZXQgcz10W29dO251bGwhPT1zJiYocltvXT1zKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKG89Pnsic3RyaW5nIiE9dHlwZW9mIG8mJm8uZm9yRWFjaCgocyxhKT0+e3MmJihzPUxiKHMscixlKSk7bGV0IGw9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShhLGUpO3M9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoYSxsLHMsZSksaS5zZXQoYSxzKX0pfSksaX19KHIuc3R5bGUsbyxpKSl9KSxtRyh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxtRyh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKHI9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgTHcodCxyLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBMdyhuLHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHMsYSk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHQpfSh0LHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24odCxlLGkscil7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHM9PnMubWF0Y2godCxlLGkscikpfHxudWxsfW1hdGNoU3R5bGVzKHQsZSxpKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXModCxlLGkpfX0obix0LGUpfShyLGQsdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW3NdPWF9dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZSxyLGEpfXJlZ2lzdGVyKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfWRlc3Ryb3kodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kodCxlKX1vbkluc2VydCh0LGUsaSxyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUodCxlLGkscil9b25SZW1vdmUodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKHQsZSxyfHwhMSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl9cHJvY2Vzcyh0LGUsaSxyKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbbyxzXT1zRyhpKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKG8sZSxzLHIpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKHQsZSxpLHIpfWxpc3Rlbih0LGUsaSxyLG8pe2lmKCJAIj09aS5jaGFyQXQoMCkpe2xldFtzLGFdPXNHKGkpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4ocyxlLGEsbyl9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKHQsZSxpLHIsbyl9Zmx1c2godD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX1nZXQgcGxheWVycygpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19LHRtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fc3RhcnRTdHlsZXM9aSx0aGlzLl9lbmRTdHlsZXM9cix0aGlzLl9zdGF0ZT0wO2xldCBvPW4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQoZSk7b3x8bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChlLG89bmV3IE1hcCksdGhpcy5faW5pdGlhbFN0eWxlcz1vfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZDYyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwyJiYoQ2ModGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihDYyh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRlPDMmJihuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYodGYodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKHRmKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksQ2ModGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19cmV0dXJuIG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcCxufSkoKTtmdW5jdGlvbiBtayhuKXtsZXQgdD1udWxsO3JldHVybiBuLmZvckVhY2goKGUsaSk9PnsoZnVuY3Rpb24obil7cmV0dXJuImRpc3BsYXkiPT09bnx8InBvc2l0aW9uIj09PW59KShpKSYmKHQ9dHx8bmV3IE1hcCx0LnNldChpLGUpKX0pLHR9dmFyIEJ3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPWksdGhpcy5fc3BlY2lhbFN0eWxlcz1yLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy50aW1lPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLmN1cnJlbnRTbmFwc2hvdD1uZXcgTWFwLHRoaXMuX2R1cmF0aW9uPWkuZHVyYXRpb24sdGhpcy5fZGVsYXk9aS5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9X2J1aWxkUGxheWVyKCl7aWYodGhpcy5faW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX2luaXRpYWxpemVkPSEwO2xldCB0PXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LHQsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV06bmV3IE1hcCx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdCh0KXtsZXQgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGk9PntlLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGkpKX0pLGV9X3RyaWdnZXJXZWJBbmltYXRpb24odCxlLGkpe3JldHVybiB0LmFuaW1hdGUodGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGUpLGkpfW9uU3RhcnQodCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2godCksdGhpcy5fb25TdGFydEZucy5wdXNoKHQpfW9uRG9uZSh0KXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKHQpLHRoaXMuX29uRG9uZUZucy5wdXNoKHQpfW9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX1wbGF5KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuZG9tUGxheWVyLnBsYXkoKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9ZmluaXNoKCl7dGhpcy5pbml0KCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfXJlc2V0KCl7dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5jZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1zZXRQb3NpdGlvbih0KXt2b2lkIDA9PT10aGlzLmRvbVBsYXllciYmdGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWUvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2xldCB0PW5ldyBNYXA7dGhpcy5oYXNTdGFydGVkKCkmJnRoaXMuX2ZpbmFsS2V5ZnJhbWUuZm9yRWFjaCgoaSxyKT0+eyJvZmZzZXQiIT09ciYmdC5zZXQocix0aGlzLl9maW5pc2hlZD9pOkFHKHRoaXMuZWxlbWVudCxyKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD10fXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goaT0+aSgpKSxlLmxlbmd0aD0wfX0scm1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSYntjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9ZS5jcmVhdGVSZW5kZXJlcihpLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0aW9uOnJhLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZChlKXtsZXQgaT10aGlzLl9uZXh0QW5pbWF0aW9uSWQudG9TdHJpbmcoKTt0aGlzLl9uZXh0QW5pbWF0aW9uSWQrKztsZXQgcj1BcnJheS5pc0FycmF5KGUpP1N3KGUpOmU7cmV0dXJuIFZHKHRoaXMuX3JlbmRlcmVyLG51bGwsaSwicmVnaXN0ZXIiLFtyXSksbmV3IE5rKGksdGhpcy5fcmVuZGVyZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGZjKSxrKEx0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTms9Y2xhc3MgZXh0ZW5kcyB3d3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5faWQ9dCx0aGlzLl9yZW5kZXJlcj1lfWNyZWF0ZSh0LGUpe3JldHVybiBuZXcgTGsodGhpcy5faWQsdCxlfHx7fSx0aGlzLl9yZW5kZXJlcil9fSxMaz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmlkPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9cix0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy50b3RhbFRpbWU9MCx0aGlzLl9jb21tYW5kKCJjcmVhdGUiLGkpfV9saXN0ZW4odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudCxgQEAke3RoaXMuaWR9OiR7dH1gLGUpfV9jb21tYW5kKHQsLi4uZSl7cmV0dXJuIFZHKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLHQsZSl9b25Eb25lKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9b25TdGFydCh0KXt0aGlzLl9saXN0ZW4oInN0YXJ0Iix0KX1vbkRlc3Ryb3kodCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95Iix0KX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQoInJlc2V0IiksdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbih0KXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsdCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZW5naW5lLnBsYXllcnNbK3RoaXMuaWRdPy5nZXRQb3NpdGlvbigpPz8wfX07ZnVuY3Rpb24gVkcobix0LGUsaSxyKXtyZXR1cm4gbi5zZXRQcm9wZXJ0eSh0LGBAQCR7ZX06JHtpfWAscil9dmFyIEhHPSJALmRpc2FibGVkIixvbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fem9uZT1yLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGkub25SZW1vdmFsQ29tcGxldGU9KG8scyk9PntsZXQgYT1zPy5wYXJlbnROb2RlKG8pO2EmJnMucmVtb3ZlQ2hpbGQoYSxvKX19Y3JlYXRlUmVuZGVyZXIoZSxpKXtsZXQgbz10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGUsaSk7aWYoIShlJiZpJiZpLmRhdGEmJmkuZGF0YS5hbmltYXRpb24pKXtsZXQgZD10aGlzLl9yZW5kZXJlckNhY2hlLmdldChvKTtyZXR1cm4gZHx8KGQ9bmV3IHp3KCIiLG8sdGhpcy5lbmdpbmUsKCk9PnRoaXMuX3JlbmRlcmVyQ2FjaGUuZGVsZXRlKG8pKSx0aGlzLl9yZW5kZXJlckNhY2hlLnNldChvLGQpKSxkfWxldCBzPWkuaWQsYT1pLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoYSxlKTtsZXQgbD1kPT57QXJyYXkuaXNBcnJheShkKT9kLmZvckVhY2gobCk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKHMsYSxlLGQubmFtZSxkKX07cmV0dXJuIGkuZGF0YS5hbmltYXRpb24uZm9yRWFjaChsKSxuZXcgQmsodGhpcyxhLG8sdGhpcy5lbmdpbmUpfWJlZ2luKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfV9zY2hlZHVsZUNvdW50VGFzaygpe3RoaXMucHJvbWlzZS50aGVuKCgpPT57dGhpcy5fbWljcm90YXNrSWQrK30pfXNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhlLGkscil7ZT49MCYmZTx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bigoKT0+aShyKSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJlByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT57dGhpcy5fem9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChvPT57bGV0W3MsYV09bztzKGEpfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbaSxyXSkpfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhmYyksayhndSksayhhdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHp3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9aSx0aGlzLl9vbkRlc3Ryb3k9cix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/bz0+ZS5kZXN0cm95Tm9kZShvKTpudWxsfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZGVsZWdhdGUuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX1jcmVhdGVDb21tZW50KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCl9Y3JlYXRlVGV4dCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpfWFwcGVuZENoaWxkKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX1pbnNlcnRCZWZvcmUodCxlLGkscj0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLGkpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LHIpfXJlbW92ZUNoaWxkKHQsZSxpKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGUsdGhpcy5kZWxlZ2F0ZSxpKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQsZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfW5leHRTaWJsaW5nKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfXNldEF0dHJpYnV0ZSh0LGUsaSxyKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsaSxyKX1yZW1vdmVBdHRyaWJ1dGUodCxlLGkpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsZSxpKX1hZGRDbGFzcyh0LGUpe3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKX1yZW1vdmVDbGFzcyh0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX1zZXRTdHlsZSh0LGUsaSxyKXt0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxpLHIpfXJlbW92ZVN0eWxlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxpKX1zZXRQcm9wZXJ0eSh0LGUsaSl7IkAiPT1lLmNoYXJBdCgwKSYmZT09SEc/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LCEhaSk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsaSl9c2V0VmFsdWUodCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9bGlzdGVuKHQsZSxpKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLGkpfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnModCxlKX19LEJrPWNsYXNzIGV4dGVuZHMgend7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLmZhY3Rvcnk9dCx0aGlzLm5hbWVzcGFjZUlkPWV9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCk/Ii4iPT1lLmNoYXJBdCgxKSYmZT09SEc/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyh0LGk9dm9pZCAwPT09aXx8ISFpKTp0aGlzLmVuZ2luZS5wcm9jZXNzKHRoaXMubmFtZXNwYWNlSWQsdCxlLnNsaWNlKDEpLGkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfWxpc3Rlbih0LGUsaSl7aWYoIkAiPT1lLmNoYXJBdCgwKSl7bGV0IHI9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2RlZmF1bHQ6cmV0dXJuIG59fSh0KSxvPWUuc2xpY2UoMSkscz0iIjtyZXR1cm4iQCIhPW8uY2hhckF0KDApJiYoW28sc109ZnVuY3Rpb24obil7bGV0IHQ9bi5pbmRleE9mKCIuIik7cmV0dXJuW24uc3Vic3RyaW5nKDAsdCksbi5zbGljZSh0KzEpXX0obykpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLHIsbyxzLGE9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGEuX2RhdGF8fC0xLGksYSl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLGkpfX0sbG1lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBndXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLmJvZHksaSxyKX1uZ09uRGVzdHJveSgpe3RoaXMuZmx1c2goKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCksayhVYiksayhuZiksayh5YykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHpHPVt7cHJvdmlkZTpSYix1c2VDbGFzczpybWV9LHtwcm92aWRlOm5mLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE53fX0se3Byb3ZpZGU6Z3UsdXNlQ2xhc3M6bG1lfSx7cHJvdmlkZTpmYyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IG9tZShuLHQsZSl9LGRlcHM6W1RiLGd1LGF0XX1dLEJHPVt7cHJvdmlkZTpVYix1c2VGYWN0b3J5OigpPT5uZXcgY2xhc3N7dmFsaWRhdGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVydHkodCl7cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQodCxlKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQodCxlKXtyZXR1cm4gTUcodCxlKX1nZXRQYXJlbnRFbGVtZW50KHQpe3JldHVybiBQayh0KX1xdWVyeSh0LGUsaSl7cmV0dXJuIHdHKHQsZSxpKX1jb21wdXRlU3R5bGUodCxlLGkpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX1hbmltYXRlKHQsZSxpLHIsbyxzPVtdKXtsZXQgbD17ZHVyYXRpb246aSxkZWxheTpyLGZpbGw6MD09cj8iYm90aCI6ImZvcndhcmRzIn07byYmKGwuZWFzaW5nPW8pO2xldCBjPW5ldyBNYXAsZD1zLmZpbHRlcihmPT5mIGluc3RhbmNlb2YgQncpOyhmdW5jdGlvbihuLHQpe3JldHVybiAwPT09bnx8MD09PXR9KShpLHIpJiZkLmZvckVhY2goZj0+e2YuY3VycmVudFNuYXBzaG90LmZvckVhY2goKG0sYik9PmMuc2V0KGIsbSkpfSk7bGV0IHU9KG49ZSxuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT5URyh0KSk6W10pLm1hcChmPT5iaChmKSk7dmFyIG47dT1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxzKT0+e2kuaGFzKHMpfHxyLnB1c2gocyksaS5zZXQocyxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3IuZm9yRWFjaChhPT5zLnNldChhLEFHKG4sYSkpKX19cmV0dXJuIHR9KHQsdSxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT1tayh0WzBdKSx0Lmxlbmd0aD4xJiYoaT1tayh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPW1rKHQpKSxlfHxpP25ldyB0bWUobixlLGkpOm51bGx9KHQsdSk7cmV0dXJuIG5ldyBCdyh0LHUsbCxwKX19fSx7cHJvdmlkZTpoaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi56R10sdW1lPVt7cHJvdmlkZTpVYix1c2VDbGFzczpPa30se3Byb3ZpZGU6aGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uekddLFVHPSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/dW1lOkJHfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpCRyxpbXBvcnRzOltNd119KSxufSkoKSxVaz17fTtmdW5jdGlvbiBfZShuLHQpe2lmKFVrW25dPShVa1tuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gVmsobiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIFZrKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBWayhuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBWayhuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgcjg9IkBuZ3J4L3N0b3JlL2luaXQiLHhoPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBBaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOnI4fSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkscG1lPVt4aF0sbzg9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksakc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIikscWs9bmV3IGllKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksczg9bmV3IGllKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxHRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLGE4PW5ldyBpZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLEhrPW5ldyBpZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLFdHPW5ldyBpZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxxRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIiksems9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksWUc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxsOD1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIiksWEc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksYzg9bmV3IGllKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksUUc9bmV3IGllKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSx5aD1uZXcgaWUoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxaRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxLRz1uZXcgaWUoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIiksSkc9bmV3IGllKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLEdiPW5ldyBpZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxZaz1uZXcgaWUoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gcmYobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW3NdJiYoaVtzXT1uW3NdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24ocyxhKXtzPXZvaWQgMD09PXM/dDpzO2xldCBsPSExLGM9e307Zm9yKGxldCBkPTA7ZDxyLmxlbmd0aDtkKyspe2xldCB1PXJbZF0sZj1zW3VdLG09KDAsaVt1XSkoZixhKTtjW3VdPW0sbD1sfHxtIT09Zn1yZXR1cm4gbD9jOnN9fWZ1bmN0aW9uIGQ4KC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gdTgobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49ZDguYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxzKT0+cihvPXZvaWQgMD09PW8/aTpvLHMpfX1uZXcgaWUoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgaWUoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgV2I9Y2xhc3MgZXh0ZW5kcyBLdHt9LFV3PWNsYXNzIGV4dGVuZHMgeGh7fSxqdz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQWl7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OnMsbWV0YVJlZHVjZXJzOmEsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCBkPSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/ZDgoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0oYSkobyxsKTp1OChzLGEpKG8sbCk7cmV0dXJuIHJbY109ZCxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVXcpLGsocWspLGsoYTgpLGsoczgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxibWU9W2p3LHtwcm92aWRlOldiLHVzZUV4aXN0aW5nOmp3fSx7cHJvdmlkZTpVdyx1c2VFeGlzdGluZzp4aH1dLHFiPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHZtZT1bcWJdLEd3PWNsYXNzIGV4dGVuZHMgS3R7fSwkRz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQWl7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKFBwKHFBKSkucGlwZShCdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBxdChmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybihvLHMpPT57bGV0IGE9ZSxsPXQsYz0wO28uc3Vic2NyaWJlKFZ0KHMsZD0+e2xldCB1PWMrKztsPWE/bihsLGQsdSk6KGE9ITAsZCkscy5uZXh0KGwpfSx2b2lkIDApKX19KG4sdCxhcmd1bWVudHMubGVuZ3RoPj0yKSl9KHltZSx7c3RhdGU6b30pKTt0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPWMuc3Vic2NyaWJlKCh7c3RhdGU6ZCxhY3Rpb246dX0pPT57dGhpcy5uZXh0KGQpLHIubmV4dCh1KX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uSU5JVD1yOCxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeGgpLGsoV2IpLGsocWIpLGsocWspKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiB5bWUobj17c3RhdGU6dm9pZCAwfSxbdCxlXSl7bGV0e3N0YXRlOml9PW47cmV0dXJue3N0YXRlOmUoaSx0KSxhY3Rpb246dH19dmFyIHhtZT1bJEcse3Byb3ZpZGU6R3csdXNlRXhpc3Rpbmc6JEd9XSxBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5hY3Rpb25zT2JzZXJ2ZXI9aSx0aGlzLnJlZHVjZXJNYW5hZ2VyPXIsdGhpcy5zb3VyY2U9ZX1zZWxlY3QoZSwuLi5pKXtyZXR1cm4gdW4uY2FsbChudWxsLGUsLi4uaSkodGhpcyl9bGlmdChlKXtsZXQgaT1uZXcgbih0aGlzLHRoaXMuYWN0aW9uc09ic2VydmVyLHRoaXMucmVkdWNlck1hbmFnZXIpO3JldHVybiBpLm9wZXJhdG9yPWUsaX1kaXNwYXRjaChlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KGUpfW5leHQoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1lcnJvcihlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5lcnJvcihlKX1jb21wbGV0ZSgpe3RoaXMuYWN0aW9uc09ic2VydmVyLmNvbXBsZXRlKCl9YWRkUmVkdWNlcihlLGkpe3RoaXMucmVkdWNlck1hbmFnZXIuYWRkUmVkdWNlcihlLGkpfXJlbW92ZVJlZHVjZXIoZSl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVSZWR1Y2VyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEd3KSxrKHhoKSxrKGp3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ21lPVtBZV07ZnVuY3Rpb24gdW4obix0LC4uLmUpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgbztpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBzPVt0LC4uLmVdLmZpbHRlcihCb29sZWFuKTtvPXIucGlwZShmdW5jdGlvbiguLi5uKXtsZXQgdD1uLmxlbmd0aDtpZigwPT09dCl0aHJvdyBuZXcgRXJyb3IoImxpc3Qgb2YgcHJvcGVydGllcyBjYW5ub3QgYmUgZW1wdHkuIik7cmV0dXJuIE4oZT0+e2xldCBpPWU7Zm9yKGxldCByPTA7cjx0O3IrKyl7bGV0IG89aT8uW25bcl1dO2lmKCEodHlwZW9mIG88InUiKSlyZXR1cm47aT1vfXJldHVybiBpfSl9KG4sLi4ucykpfWVsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCB0eXBlICcke3R5cGVvZiBufScgaW4gc2VsZWN0IG9wZXJhdG9yLCBleHBlY3RlZCAnc3RyaW5nJyBvciAnZnVuY3Rpb24nYCk7bz1yLnBpcGUoTihzPT5uKHMsdCkpKX1yZXR1cm4gby5waXBlKFluKCkpfX12YXIgWGs9Imh0dHBzOi8vbmdyeC5pby9ndWlkZS9zdG9yZS9jb25maWd1cmF0aW9uL3J1bnRpbWUtY2hlY2tzIjtmdW5jdGlvbiBlOChuKXtyZXR1cm4gdm9pZCAwPT09bn1mdW5jdGlvbiB0OChuKXtyZXR1cm4gbnVsbD09PW59ZnVuY3Rpb24gcDgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobil9ZnVuY3Rpb24gZjgobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bn1mdW5jdGlvbiBqayhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiBuOChuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBtOChuLHQ9bjgsZT1uOCl7bGV0IG8saT1udWxsLHI9bnVsbDtyZXR1cm57bWVtb2l6ZWQ6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gcj1uLmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxyO2lmKCFmdW5jdGlvbihuLHQsZSl7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspaWYoIWUobltpXSx0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX0oYXJndW1lbnRzLGksdCkpcmV0dXJuIHI7bGV0IGQ9bi5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk9YXJndW1lbnRzLGUocixkKT9yOihyPWQsZCl9LHJlc2V0OmZ1bmN0aW9uKCl7aT1udWxsLHI9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uKGQpe289e3Jlc3VsdDpkfX0sY2xlYXJSZXN1bHQ6ZnVuY3Rpb24oKXtvPXZvaWQgMH19fWZ1bmN0aW9uIHEoLi4ubil7cmV0dXJuIGZ1bmN0aW9uKG4sdD17c3RhdGVGbjpPbWV9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IGk9ZTtpZihBcnJheS5pc0FycmF5KGlbMF0pKXtsZXRbZCwuLi51XT1pO2k9Wy4uLmQsLi4udV19ZWxzZSAxPT09aS5sZW5ndGgmJmZ1bmN0aW9uKG4pe3JldHVybiEhbiYmIm9iamVjdCI9PXR5cGVvZiBuJiZPYmplY3QudmFsdWVzKG4pLmV2ZXJ5KHQ9PiJmdW5jdGlvbiI9PXR5cGVvZiB0KX0oaVswXSkmJihpPWZ1bmN0aW9uKG4pe2xldCB0PU9iamVjdC52YWx1ZXMobiksZT1PYmplY3Qua2V5cyhuKTtyZXR1cm5bLi4udCwoLi4ucik9PmUucmVkdWNlKChvLHMsYSk9Pih7Li4ubyxbc106clthXX0pLHt9KV19KGlbMF0pKTtsZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLHM9ci5maWx0ZXIoZD0+ZC5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgZC5yZWxlYXNlKSxhPW4oZnVuY3Rpb24oLi4uZCl7cmV0dXJuIG8uYXBwbHkobnVsbCxkKX0pLGw9bTgoZnVuY3Rpb24oZCx1KXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW2Qscix1LGFdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCksYS5yZXNldCgpLHMuZm9yRWFjaChkPT5kLnJlbGVhc2UoKSl9LHByb2plY3RvcjphLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShtOCkoLi4ubil9ZnVuY3Rpb24gT21lKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKHM9PnMobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBFcihuKXtyZXR1cm4gcSh0PT50W25dLHQ9PnQpfWZ1bmN0aW9uIExtZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGllP2FpKG4pOm59ZnVuY3Rpb24gQm1lKG4sdCl7cmV0dXJuIHQubWFwKChlLGkpPT57aWYobltpXWluc3RhbmNlb2YgaWUpe2xldCByPWFpKG5baV0pO3JldHVybntrZXk6ZS5rZXkscmVkdWNlckZhY3Rvcnk6ci5yZWR1Y2VyRmFjdG9yeT9yLnJlZHVjZXJGYWN0b3J5OnJmLG1ldGFSZWR1Y2VyczpyLm1ldGFSZWR1Y2Vycz9yLm1ldGFSZWR1Y2VyczpbXSxpbml0aWFsU3RhdGU6ci5pbml0aWFsU3RhdGV9fXJldHVybiBlfSl9ZnVuY3Rpb24gVm1lKG4pe3JldHVybiBuLm1hcCh0PT50IGluc3RhbmNlb2YgaWU/YWkodCk6dCl9ZnVuY3Rpb24gaDgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm59ZnVuY3Rpb24gSG1lKG4sdCl7cmV0dXJuIG4uY29uY2F0KHQpfWZ1bmN0aW9uIHptZSgpe2lmKGFpKEFlLHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSByb290IFN0b3JlIGhhcyBiZWVuIHByb3ZpZGVkIG1vcmUgdGhhbiBvbmNlLiBGZWF0dXJlIG1vZHVsZXMgc2hvdWxkIHByb3ZpZGUgZmVhdHVyZSBzdGF0ZXMgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gR2sobil7T2JqZWN0LmZyZWV6ZShuKTtsZXQgdD1qayhuKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuZm9yRWFjaChlPT57aWYoIWUuc3RhcnRzV2l0aCgiXHUwMjc1IikmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpfShuLGUpJiYoIXR8fCJjYWxsZXIiIT09ZSYmImNhbGxlZSIhPT1lJiYiYXJndW1lbnRzIiE9PWUpKXtsZXQgaT1uW2VdOyhmOChpKXx8amsoaSkpJiYhT2JqZWN0LmlzRnJvemVuKGkpJiZHayhpKX19KSxufWZ1bmN0aW9uIFdrKG4sdD1bXSl7cmV0dXJuKGU4KG4pfHx0OChuKSkmJjA9PT10Lmxlbmd0aD97cGF0aDpbInJvb3QiXSx2YWx1ZTpufTpPYmplY3Qua2V5cyhuKS5yZWR1Y2UoKGkscik9PntpZihpKXJldHVybiBpO2xldCBvPW5bcl07cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBqayhuKSYmbi5oYXNPd25Qcm9wZXJ0eSgiXHUwMjc1Y21wIil9KG8pP2k6IShlOChvKXx8dDgobyl8fGZ1bmN0aW9uKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbn0obyl8fGZ1bmN0aW9uKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG59KG8pfHxwOChvKSkmJihmdW5jdGlvbihuKXtpZighZnVuY3Rpb24obil7cmV0dXJuIGY4KG4pJiYhcDgobil9KG4pKXJldHVybiExO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtyZXR1cm4gdD09PU9iamVjdC5wcm90b3R5cGV8fG51bGw9PT10fShvKT9XayhvLFsuLi50LHJdKTp7cGF0aDpbLi4udCxyXSx2YWx1ZTpvfSl9LCExKX1mdW5jdGlvbiBpOChuLHQpe2lmKCExPT09bilyZXR1cm47bGV0IGU9bi5wYXRoLmpvaW4oIi4iKSxpPW5ldyBFcnJvcihgRGV0ZWN0ZWQgdW5zZXJpYWxpemFibGUgJHt0fSBhdCAiJHtlfSIuICR7WGt9I3N0cmljdCR7dH1zZXJpYWxpemFiaWxpdHlgKTt0aHJvdyBpLnZhbHVlPW4udmFsdWUsaS51bnNlcmlhbGl6YWJsZVBhdGg9ZSxpfWZ1bmN0aW9uIFdtZShuKXtyZXR1cm57c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIHFtZSh7c3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5Om4sc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7dC5hY3Rpb24oaSkmJmk4KFdrKGkpLCJhY3Rpb24iKTtsZXQgcj1uKGUsaSk7cmV0dXJuIHQuc3RhdGUoKSYmaTgoV2sociksInN0YXRlIikscn19KGUse2FjdGlvbjppPT5uJiYhUWsoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIFltZSh7c3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5Om4sc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI9dC5hY3Rpb24oaSk/R2soaSk6aSxvPW4oZSxyKTtyZXR1cm4gdC5zdGF0ZSgpP0drKG8pOm99fShlLHthY3Rpb246aT0+biYmIVFrKGkpLHN0YXRlOigpPT50fSk6ZX1mdW5jdGlvbiBRayhuKXtyZXR1cm4gbi50eXBlLnN0YXJ0c1dpdGgoIkBuZ3J4Iil9ZnVuY3Rpb24gWG1lKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6bn0pe3JldHVybiB0PT5uP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYodC5hY3Rpb24oaSkmJiFhdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtpLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke1hrfSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gbihlLGkpfX0odCx7YWN0aW9uOmU9Pm4mJiFRayhlKX0pOnR9ZnVuY3Rpb24gUW1lKG4pe3JldHVyblt7cHJvdmlkZTpKRyx1c2VWYWx1ZTpufSx7cHJvdmlkZTpLRyx1c2VGYWN0b3J5OlptZSxkZXBzOltKR119LHtwcm92aWRlOkdiLGRlcHM6W0tHXSx1c2VGYWN0b3J5OldtZX0se3Byb3ZpZGU6eWgsbXVsdGk6ITAsZGVwczpbR2JdLHVzZUZhY3Rvcnk6WW1lfSx7cHJvdmlkZTp5aCxtdWx0aTohMCxkZXBzOltHYl0sdXNlRmFjdG9yeTpxbWV9LHtwcm92aWRlOnloLG11bHRpOiEwLGRlcHM6W0diXSx1c2VGYWN0b3J5OlhtZX1dfWZ1bmN0aW9uIGc4KCl7cmV0dXJuW3twcm92aWRlOllrLG11bHRpOiEwLGRlcHM6W0diXSx1c2VGYWN0b3J5OkttZX1dfWZ1bmN0aW9uIFptZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBLbWUobil7aWYoIW4uc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2xldCB0PU9iamVjdC5lbnRyaWVzKFVrKS5maWx0ZXIoKFssZV0pPT5lPjEpLm1hcCgoW2VdKT0+ZSk7aWYodC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7dC5tYXAoZT0+YCIke2V9ImApLmpvaW4oIiwgIil9LiAke1hrfSNzdHJpY3RhY3Rpb250eXBldW5pcXVlbmVzc2ApfWZ1bmN0aW9uIEptZShuPXt9LHQ9e30pe3JldHVyblt7cHJvdmlkZTpvOCx1c2VGYWN0b3J5OnptZX0se3Byb3ZpZGU6akcsdXNlVmFsdWU6dC5pbml0aWFsU3RhdGV9LHtwcm92aWRlOnFrLHVzZUZhY3Rvcnk6aDgsZGVwczpbakddfSx7cHJvdmlkZTpIayx1c2VWYWx1ZTpufSx7cHJvdmlkZTpxRyx1c2VFeGlzdGluZzpuIGluc3RhbmNlb2YgaWU/bjpIa30se3Byb3ZpZGU6YTgsZGVwczpbSGssW25ldyBuaChxRyldXSx1c2VGYWN0b3J5OkxtZX0se3Byb3ZpZGU6UUcsdXNlVmFsdWU6dC5tZXRhUmVkdWNlcnM/dC5tZXRhUmVkdWNlcnM6W119LHtwcm92aWRlOlpHLGRlcHM6W3loLFFHXSx1c2VGYWN0b3J5OkhtZX0se3Byb3ZpZGU6R0csdXNlVmFsdWU6dC5yZWR1Y2VyRmFjdG9yeT90LnJlZHVjZXJGYWN0b3J5OnJmfSx7cHJvdmlkZTpzOCxkZXBzOltHRyxaR10sdXNlRmFjdG9yeTp1OH0scG1lLGJtZSx2bWUseG1lLENtZSxRbWUodC5ydW50aW1lQ2hlY2tzKSxnOCgpXX1mdW5jdGlvbiAkbWUobix0LGU9e30pe3JldHVyblt7cHJvdmlkZTpZRyxtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P3t9OmV9LHtwcm92aWRlOldHLG11bHRpOiEwLHVzZVZhbHVlOntrZXk6biBpbnN0YW5jZW9mIE9iamVjdD9uLm5hbWU6bixyZWR1Y2VyRmFjdG9yeTplIGluc3RhbmNlb2YgaWV8fCFlLnJlZHVjZXJGYWN0b3J5P3JmOmUucmVkdWNlckZhY3RvcnksbWV0YVJlZHVjZXJzOmUgaW5zdGFuY2VvZiBpZXx8IWUubWV0YVJlZHVjZXJzP1tdOmUubWV0YVJlZHVjZXJzLGluaXRpYWxTdGF0ZTplIGluc3RhbmNlb2YgaWV8fCFlLmluaXRpYWxTdGF0ZT92b2lkIDA6ZS5pbml0aWFsU3RhdGV9fSx7cHJvdmlkZTpsOCxkZXBzOltZRyxXR10sdXNlRmFjdG9yeTpCbWV9LHtwcm92aWRlOnprLG11bHRpOiEwLHVzZVZhbHVlOm4gaW5zdGFuY2VvZiBPYmplY3Q/bi5yZWR1Y2VyOnR9LHtwcm92aWRlOlhHLG11bHRpOiEwLHVzZUV4aXN0aW5nOnQgaW5zdGFuY2VvZiBpZT90OnprfSx7cHJvdmlkZTpjOCxtdWx0aTohMCxkZXBzOlt6ayxbbmV3IG5oKFhHKV1dLHVzZUZhY3Rvcnk6Vm1lfSxnOCgpXX12YXIgWWI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhoKSxrKFdiKSxrKHFiKSxrKEFlKSxrKG84LDgpLGsoWWssOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxXdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyl7dGhpcy5mZWF0dXJlcz1lLHRoaXMuZmVhdHVyZVJlZHVjZXJzPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yO2xldCBhPWUubWFwKChsLGMpPT57bGV0IHU9aS5zaGlmdCgpW2NdO3JldHVybnsuLi5sLHJlZHVjZXJzOnUsaW5pdGlhbFN0YXRlOmg4KGwuaW5pdGlhbFN0YXRlKX19KTtyLmFkZEZlYXR1cmVzKGEpfW5nT25EZXN0cm95KCl7dGhpcy5yZWR1Y2VyTWFuYWdlci5yZW1vdmVGZWF0dXJlcyh0aGlzLmZlYXR1cmVzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhsOCksayhjOCksayhqdyksayhZYiksayhZayw4KSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFRyPSgoKT0+e2NsYXNzIG57c3RhdGljIGZvclJvb3QoZSxpKXtyZXR1cm57bmdNb2R1bGU6WWIscHJvdmlkZXJzOlsuLi5KbWUoZSxpKV19fXN0YXRpYyBmb3JGZWF0dXJlKGUsaSxyPXt9KXtyZXR1cm57bmdNb2R1bGU6V3cscHJvdmlkZXJzOlsuLi4kbWUoZSxpLHIpXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKTtmdW5jdGlvbiB5ZSguLi5uKXtyZXR1cm57cmVkdWNlcjpuLnBvcCgpLHR5cGVzOm4ubWFwKGk9PmkudHlwZSl9fWZ1bmN0aW9uIGJyKG4sLi4udCl7bGV0IGU9bmV3IE1hcDtmb3IobGV0IGkgb2YgdClmb3IobGV0IHIgb2YgaS50eXBlcyl7bGV0IG89ZS5nZXQocik7ZS5zZXQocixvPyhhLGwpPT5pLnJlZHVjZXIobyhhLGwpLGwpOmkucmVkdWNlcil9cmV0dXJuIGZ1bmN0aW9uKGk9bixyKXtsZXQgbz1lLmdldChyLnR5cGUpO3JldHVybiBvP28oaSxyKTppfX12YXIgZWhlPXtkaXNwYXRjaDohMCxmdW5jdGlvbmFsOiExLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6ITB9LFl3PSJfX0BuZ3J4L2VmZmVjdHNfY3JlYXRlX18iO2Z1bmN0aW9uIGFyKG4sdD17fSl7bGV0IGU9dC5mdW5jdGlvbmFsP246bigpLGk9ey4uLmVoZSwuLi50fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsWXcse3ZhbHVlOml9KSxlfWZ1bmN0aW9uIHk4KG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9ZnVuY3Rpb24geDgobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gXzgobil7cmV0dXJuIG4uZmlsdGVyKHg4KX1mdW5jdGlvbiByaGUobix0LGUpe2xldCBpPXk4KG4pLmNvbnN0cnVjdG9yLm5hbWUscj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZpbHRlcihpPT4hKCFuW2ldfHwhbltpXS5oYXNPd25Qcm9wZXJ0eShZdykpJiZuW2ldW1l3XS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGF0Y2giKSkubWFwKGk9Pih7cHJvcGVydHlOYW1lOmksLi4ubltpXVtZd119KSl9KG4pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDpzLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6YX0pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1hP2UobCx0KTpsO3JldHVybiExPT09cz9jLnBpcGUoSV8oKSk6Yy5waXBlKHF0KChuLHQpPT57bi5zdWJzY3JpYmUoVnQodCxlPT57dC5uZXh0KHdhLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh3YS5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQod2EuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKE4odT0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246dSxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gdG4oLi4ucil9dmFyIG9oZT0xMDtmdW5jdGlvbiBDOChuLHQsZT1vaGUpe3JldHVybiBuLnBpcGUoenIoaT0+KHQmJnQuaGFuZGxlRXJyb3IoaSksZTw9MT9uOkM4KG4sdCxlLTEpKSkpfXZhciB4bz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxlJiYodGhpcy5zb3VyY2U9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhxYikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGVpKC4uLm4pe3JldHVybiBrZSh0PT5uLnNvbWUoZT0+InN0cmluZyI9PXR5cGVvZiBlP2U9PT10LnR5cGU6ZS50eXBlPT09dC50eXBlKSl9dmFyIE04PW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEd1YXJkIikscXc9bmV3IGllKCJAbmdyeC9lZmZlY3RzIFVzZXIgUHJvdmlkZWQgRWZmZWN0cyIpLFprPW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEVmZmVjdHMiKSx3OD1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgUm9vdCBFZmZlY3RzIEluc3RhbmNlcyIpLGI4PW5ldyBpZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBGZWF0dXJlIEVmZmVjdHMiKSxTOD1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIEluc3RhbmNlIEdyb3VwcyIpLHNoZT1uZXcgaWUoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+Qzh9KSxFOD0iQG5ncngvZWZmZWN0cy9pbml0IjtfZShFOCk7dmFyIHVoZT0ibmdyeE9uSWRlbnRpZnlFZmZlY3RzIixoaGU9Im5ncnhPbkluaXRFZmZlY3RzIjtmdW5jdGlvbiBnaGUobil7cmV0dXJuIEtrKG4saGhlKX1mdW5jdGlvbiBLayhuLHQpe3JldHVybiBuJiZ0IGluIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3RdfXZhciBUOD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuZXJyb3JIYW5kbGVyPWUsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyPWl9YWRkRWZmZWN0cyhlKXt0aGlzLm5leHQoZSl9dG9BY3Rpb25zKCl7cmV0dXJuIHRoaXMucGlwZShMQyhlPT5mdW5jdGlvbihuKXtyZXR1cm4iT2JqZWN0IiE9PW4uY29uc3RydWN0b3IubmFtZSYmIkZ1bmN0aW9uIiE9PW4uY29uc3RydWN0b3IubmFtZX0oZSk/eTgoZSk6ZSksaG4oZT0+ZS5waXBlKExDKF9oZSkpKSxobihlPT57bGV0IGk9ZS5waXBlKEZDKG89PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1yaGUoZSxuLHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gS2sobiwibmdyeE9uUnVuRWZmZWN0cyIpfShlKT9lLm5ncnhPblJ1bkVmZmVjdHMoaSk6aX19KHRoaXMuZXJyb3JIYW5kbGVyLHRoaXMuZWZmZWN0c0Vycm9ySGFuZGxlcikobykpLE4obz0+KGZ1bmN0aW9uKG4sdCl7aWYoIk4iPT09bi5ub3RpZmljYXRpb24ua2luZCl7bGV0IGU9bi5ub3RpZmljYXRpb24udmFsdWU7IWZ1bmN0aW9uKG4pe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBuJiZuJiZuLnR5cGUmJiJzdHJpbmciPT10eXBlb2Ygbi50eXBlfShlKSYmdC5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYEVmZmVjdCAke2Z1bmN0aW9uKHtwcm9wZXJ0eU5hbWU6bixzb3VyY2VJbnN0YW5jZTp0LHNvdXJjZU5hbWU6ZX0pe2xldCBpPSJmdW5jdGlvbiI9PXR5cGVvZiB0W25dO3JldHVybmAiJHtlfS4ke1N0cmluZyhuKX0ke2k/IigpIjoiIn0iYH0obil9IGRpc3BhdGNoZWQgYW4gaW52YWxpZCBhY3Rpb246ICR7ZnVuY3Rpb24obil7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuKX1jYXRjaHtyZXR1cm4gbn19KGUpfWApKX19KG8sdGhpcy5lcnJvckhhbmRsZXIpLG8ubm90aWZpY2F0aW9uKSksa2Uobz0+Ik4iPT09by5raW5kJiZudWxsIT1vLnZhbHVlKSxxdCgobix0KT0+e24uc3Vic2NyaWJlKFZ0KHQsZT0+WkEoZSx0KSkpfSkpO3JldHVybiB0bihpLGUucGlwZShZdCgxKSxrZShnaGUpLE4obz0+by5uZ3J4T25Jbml0RWZmZWN0cygpKSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHJzKSxrKHNoZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIF9oZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEtrKG4sdWhlKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgRDg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVDgpLGsoQWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxJOD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKTtmb3IobGV0IGMgb2YgbyllLmFkZEVmZmVjdHMoYyk7ci5kaXNwYXRjaCh7dHlwZTpFOH0pfWFkZEVmZmVjdHMoZSl7dGhpcy5zb3VyY2VzLmFkZEVmZmVjdHMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVDgpLGsoRDgpLGsoQWUpLGsodzgpLGsoWWIsOCksayhXdyw4KSxrKE04LDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksdmhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7bGV0IHM9aS5mbGF0KCk7Zm9yKGxldCBhIG9mIHMpZS5hZGRFZmZlY3RzKGEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEk4KSxrKFM4KSxrKFliLDgpLGsoV3csOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx0bz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKC4uLmUpe2xldCBpPWUuZmxhdCgpLHI9XzgoaSk7cmV0dXJue25nTW9kdWxlOnZoZSxwcm92aWRlcnM6W3Ise3Byb3ZpZGU6YjgsbXVsdGk6ITAsdXNlVmFsdWU6aX0se3Byb3ZpZGU6cXcsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOlM4LG11bHRpOiEwLHVzZUZhY3Rvcnk6djgsZGVwczpbYjgscXddfV19fXN0YXRpYyBmb3JSb290KC4uLmUpe2xldCBpPWUuZmxhdCgpLHI9XzgoaSk7cmV0dXJue25nTW9kdWxlOkk4LHByb3ZpZGVyczpbcix7cHJvdmlkZTpaayx1c2VWYWx1ZTpbaV19LHtwcm92aWRlOk04LHVzZUZhY3Rvcnk6eWhlfSx7cHJvdmlkZTpxdyxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6dzgsdXNlRmFjdG9yeTp2OCxkZXBzOltaayxxd119XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKTtmdW5jdGlvbiB2OChuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiBuKWUucHVzaCguLi5pKTtmb3IobGV0IGkgb2YgdCllLnB1c2goLi4uaSk7cmV0dXJuIGUubWFwKGk9Png4KGkpP2FpKGkpOmkpfWZ1bmN0aW9uIHloZSgpe2xldCBuPWFpKEQ4LHtvcHRpb25hbDohMCxza2lwU2VsZjohMH0pLHQ9YWkoWmsse3NlbGY6ITB9KTtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIHduPSgoKT0+e3JldHVybihuPXdufHwod249e30pKVtuLlVOS05PV049MF09IlVOS05PV04iLG5bbi5FWFBFUklNRU5UUz0xXT0iRVhQRVJJTUVOVFMiLG5bbi5FWFBFUklNRU5UPTJdPSJFWFBFUklNRU5UIixuW24uQ09NUEFSRV9FWFBFUklNRU5UPTNdPSJDT01QQVJFX0VYUEVSSU1FTlQiLG5bbi5DQVJEPTRdPSJDQVJEIixuW24uTk9UX1NFVD01XT0iTk9UX1NFVCIsd247dmFyIG59KSgpLFh3PSJkZWZhdWx0RXhwZXJpbWVudElkIixDaD0oKCk9PntyZXR1cm4obj1DaHx8KENoPXt9KSlbbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCIsQ2g7dmFyIG59KSgpO2Z1bmN0aW9uIE1oKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PntsZXQgZT10LmluZGV4T2YoIjoiKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgY29sb24gZGVsaW1pdGluZyBuYW1lIGFuZCBJRDogJHt0fWApO2xldCBpPXQuc2xpY2UoMCxlKSxyPXQuc2xpY2UoZSsxKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTppLGlkOnJ9fSl9ZnVuY3Rpb24gQTgobil7cmV0dXJuIG4ubWFwKCh7YWxpYXM6dCxpZDplfSk9PmAke3R9OiR7ZX1gKS5qb2luKCIsIil9ZnVuY3Rpb24gWGIobix0KXtzd2l0Y2gobil7Y2FzZSB3bi5FWFBFUklNRU5UOnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZXhwZXJpbWVudElkIik/W3QuZXhwZXJpbWVudElkXTpbWHddO2Nhc2Ugd24uQ0FSRDp7bGV0IGU9dC5leHBlcmltZW50SWRzO3JldHVybiBlLmluZGV4T2YoIiwiKTwwP1tlXTpNaChlKS5tYXAoKHtpZDppfSk9PmkpfWNhc2Ugd24uQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBNaCh0LmV4cGVyaW1lbnRJZHMpLm1hcCgoe2lkOml9KT0+aSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRm8obix0KXtpZighbnx8IXQpcmV0dXJuIG49PT10O2lmKG4ucm91dGVLaW5kIT09dC5yb3V0ZUtpbmQpcmV0dXJuITE7bGV0IGU9WGIobi5yb3V0ZUtpbmQsbi5wYXJhbXMpLGk9WGIodC5yb3V0ZUtpbmQsdC5wYXJhbXMpO2lmKG51bGw9PT1lfHxudWxsPT09aSlyZXR1cm4gZT09PWk7aWYoZS5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMTtsZXQgcj1pLnNvcnQoKTtyZXR1cm4gZS5zb3J0KCkuZXZlcnkoKG8scyk9PnJbc109PT1vKX1mdW5jdGlvbiBKayhuKXtzd2l0Y2gobil7Y2FzZSB3bi5FWFBFUklNRU5UUzpyZXR1cm4gQ2guRVhQRVJJTUVOVFM7Y2FzZSB3bi5FWFBFUklNRU5UOmNhc2Ugd24uQ0FSRDpjYXNlIHduLkNPTVBBUkVfRVhQRVJJTUVOVDpyZXR1cm4gQ2guREFTSEJPQVJEO2Nhc2Ugd24uVU5LTk9XTjpjYXNlIHduLk5PVF9TRVQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFF3KG4sdCxlKXtsZXQgaT1KayhuKTtyZXR1cm4gbnVsbCE9PWkmJiFlLnNvbWUocj0+ci5kZWVwTGlua0dyb3VwPT09aSYmci5uYW1lc3BhY2VJZD09PXQpfXZhciBrOF9nZXRIcmVmPSgpPT53aW5kb3cubG9jYXRpb24uaHJlZixvZj0oKCk9PntjbGFzcyBue2dldEhyZWYoKXtyZXR1cm4gazhfZ2V0SHJlZigpfWdldFNlYXJjaCgpe2xldCBlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksaT1bXTtyZXR1cm4gZS5mb3JFYWNoKChyLG8pPT57aS5wdXNoKHtrZXk6byx2YWx1ZTpyfSl9KSxpfWdldEhhc2goKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhhc2h9Z2V0UGF0aCgpe3JldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9Z2V0SGlzdG9yeVN0YXRlKCl7cmV0dXJuIHdpbmRvdy5oaXN0b3J5LnN0YXRlfXJlcGxhY2VTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsIiIsZSl9cHVzaFN0YXRlVXJsKGUpe3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCIiLGUpfXJlcGxhY2VTdGF0ZURhdGEoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKGUsIiIpfW9uUG9wU3RhdGUoKXtyZXR1cm4gbWkod2luZG93LCJwb3BzdGF0ZSIpLnBpcGUoTihlPT4oe3BhdGhuYW1lOnRoaXMuZ2V0UGF0aCgpLHN0YXRlOmUuc3RhdGV9KSkpfWdldFJlc29sdmVkUGF0aChlKXtyZXR1cm4gbmV3IFVSTChlLGs4X2dldEhyZWYoKSkucGF0aG5hbWV9Z2V0RnVsbFBhdGgoZSxpLHIpe2xldCBvPXRoaXMuZ2V0UmVzb2x2ZWRQYXRoKGUpLHM9IiI7cmV0dXJuIGkubGVuZ3RoJiYocz0iPyIrZnVuY3Rpb24obil7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0e2tleTplLHZhbHVlOml9b2Ygbil0LmFwcGVuZChlLGkpO3JldHVybiB0fShpKS50b1N0cmluZygpKSxgJHtvfSR7c30ke3I/dGhpcy5nZXRIYXNoKCk6IiJ9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksc2Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmFwcFJvb3Q9dGhpcy5nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpfWdldEFwcFJvb3RGcm9tTWV0YUVsZW1lbnQoZSl7bGV0IGk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCBtZXRhW25hbWU9InRiLXJlbGF0aXZlLXJvb3QiXScpO2lmKCFpKXJldHVybiIvIjtsZXR7cGF0aG5hbWU6cn09bmV3IFVSTChpLmNvbnRlbnQsZS5nZXRIcmVmKCkpO3JldHVybiByLnJlcGxhY2UoL1wvKiQvLCIvIil9Z2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKXtyZXR1cm4gdGhpcy5hcHBSb290LnNsaWNlKDAsLTEpK2V9Z2V0QXBwUm9vdGxlc3NQYXRobmFtZShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKHRoaXMuYXBwUm9vdCk/Ii8iK2Uuc2xpY2UodGhpcy5hcHBSb290Lmxlbmd0aCk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhvZikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHdoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W29mXX0pLG59KSgpLFNoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3NmXSxpbXBvcnRzOlt3aF19KSxufSkoKSx0Rj1uZXcgaWUoIltBcHAgUm91dGluZ10gRGlydHkgVXBkYXRlcyIpLFp3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz1lfWdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmRpcnR5VXBkYXRlc1NlbGVjdG9yRmFjdG9yaWVzPz9bXX1zdGF0aWMgcmVnaXN0ZXJEaXJ0eVVwZGF0ZXMoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTp0RixtdWx0aTohMCx1c2VGYWN0b3J5OmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsodEYsOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxGOD1fZSgiW0FwcCBSb3V0aW5nXSBEaXNjYXJkaW5nIFVuc2F2ZWQgVXBkYXRlcyIpLEVoPV9lKCJbQXBwIFJvdXRpbmddIFN0YXRlIFJlaHlkcmF0ZWQgRnJvbSBVcmwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxLdz1fZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWcgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbkY9X2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRpb24gUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVGg9X2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRpbmciLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQcz1fZSgiW0FwcCBSb3V0aW5nXSBJbiBBcHAgTmF2aWdhdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksckY9bmV3IGllKCJbQXBwIFJvdXRpbmddIFByb2dyYW1tYXRpY2FsIE5hdmlnYXRpb24gUHJvdmlkZXIiKSxKdz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoaS5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtpLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgbmF2LiBNdWx0aXBsZSBuYXZpZ2F0aW9ucyBvbiBzYW1lIGtpY2sgaXMgbm90IGFsbG93ZWQuYCk7dGhpcy5wcm92aWRlcnMuc2V0KGkuYWN0aW9uQ3JlYXRvci50eXBlLGkubGFtYmRhKX19Z2V0TmF2aWdhdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyUHJvZ3JhbW1hdGljYWxOYXZpZ2F0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6ckYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHJGLDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gUWIobil7cmV0dXJuIG51bGwhPW4ucm91dGVLaW5kfWZ1bmN0aW9uIGFGKG4pe3JldHVybiBCOChuKS5tYXAoZT0+e2xldCBpPWUuc3RhcnRzV2l0aCgiOiIpO3JldHVybiBpP3twYXRoUGFydDplLGlzUGFyYW06ITAscGFyYW1OYW1lOmUuc2xpY2UoMSl9OntwYXRoUGFydDplLGlzUGFyYW06aX19KX12YXIgRGg9Y2xhc3N7c3RhdGljIGdldE1hdGNoZXIodCl7cmV0dXJuIFFiKHQpP25ldyBaYih0KTp2b2lkIDAhPT10LnJlZGlyZWN0aW9uUGF0aD9uZXcgb0YodCk6bmV3IHNGKHQpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPWFGKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sWmI9Y2xhc3MgZXh0ZW5kcyBEaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LG9GPWNsYXNzIGV4dGVuZHMgRGh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1hRih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0sc0Y9Y2xhc3MgZXh0ZW5kcyBEaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LEtiPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPURoLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiBaYiYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKFFiKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oYUYobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPUI4KHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czpkLGlzUmVkaXJlY3Rpb246dX09bDtpZih1KXtlPWQscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiBaYikpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGY9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpMOChkKSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLGQpfTtyZXR1cm4gcj97Li4uZixvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmYsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6TDgoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gQjgobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBMOChuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIGxGPW5ldyBpZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxEbD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBLYihbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgS2IoaSksaS5mb3JFYWNoKHI9PntRYihyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bEYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGxGLDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksJHc9ImFwcF9yb3V0aW5nIixKYj1FcigkdyksTm89cShKYixuPT5uLmFjdGl2ZVJvdXRlKSx6OD1xKEpiLG49Pm4ubmV4dFJvdXRlKSxVOD1xKEpiLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLGo4PXEoSmIsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxHOD1xKEpiLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cyksSGE9cShObyxuPT5uP24ucm91dGVLaW5kOnduLk5PVF9TRVQpLGRGPXEoTm8sbj0+bj9uLnBhcmFtczp7fSksbHI9cShIYSxkRiwobix0KT0+WGIobix0KSksemE9KHEoSGEsZEYsKG4sdCk9PntpZihuIT09d24uQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1NaChuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLHEoSGEsZEYsKG4sdCk9PntsZXQgZT10O2lmKG4hPT13bi5DT01QQVJFX0VYUEVSSU1FTlQmJihuIT09d24uQ0FSRHx8LTE9PT1lLmV4cGVyaW1lbnRJZHMuaW5kZXhPZigiLCIpKSlyZXR1cm57fTtsZXQgaT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9TWgobi5leHBlcmltZW50SWRzKSxpPTA7Zm9yKGxldHtpZDpyLG5hbWU6b31vZiBlKWkrKywhdC5oYXMocikmJnQuc2V0KHIse2FsaWFzVGV4dDpvLGFsaWFzTnVtYmVyOml9KTtyZXR1cm4gdH0oZSk7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhpLmVudHJpZXMoKSl9KSksdUY9X2UoIltBcHAgUm91dGluZ10gRWZmZWN0cyBJbml0IiksbHM9KCgpPT57cmV0dXJuKG49bHN8fChscz17fSkpW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIixsczt2YXIgbn0pKCksVzg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMubG9jYXRpb249cix0aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5PW8sdGhpcy5yZWdpc3RyeT1zLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZNb2R1bGU9YSx0aGlzLmFwcFJvb3RQcm92aWRlcj1sLHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJD10aGlzLmFjdGlvbnMkLnBpcGUoZWkobkYpLE4oYz0+KHtwYXRobmFtZTpjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKT90aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KGMucGF0aG5hbWUpOnRoaXMubG9jYXRpb24uZ2V0UmVzb2x2ZWRQYXRoKGMucGF0aG5hbWUpLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITEscmVwbGFjZVN0YXRlOmMucmVwbGFjZVN0YXRlPz8hMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpjLnJlc2V0TmFtZXNwYWNlZFN0YXRlP2xzLk5FVzpscy5VTkNIQU5HRUR9fX0pKSksdGhpcy5ib290c3RyYXBSZWR1Y2VycyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShlaSh1RiksTigoKT0+S3coe3JvdXRlS2luZHM6bmV3IFNldCh0aGlzLnJlZ2lzdHJ5LmdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCkpfSkpKSksdGhpcy5vbkluaXQkPXRoaXMuYWN0aW9ucyQucGlwZShlaSh1RikpLnBpcGUoU2EoMCksTigoKT0+e2xldCBjPXRoaXMubG9jYXRpb24uZ2V0SGlzdG9yeVN0YXRlKCk/Lm5hbWVzcGFjZUlkLGQ9dm9pZCAwPT09Yz97b3B0aW9uOmxzLk5FV306e29wdGlvbjpscy5GUk9NX0hJU1RPUlksbmFtZXNwYWNlSWQ6Y307cmV0dXJue3BhdGhuYW1lOnRoaXMubG9jYXRpb24uZ2V0UGF0aCgpLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITAscmVwbGFjZVN0YXRlOiEwLG5hbWVzcGFjZVVwZGF0ZTpkfX19KSksdGhpcy5vblBvcFN0YXRlJD10aGlzLmxvY2F0aW9uLm9uUG9wU3RhdGUoKS5waXBlKE4oYz0+KHtwYXRobmFtZTpjLnBhdGhuYW1lLG9wdGlvbnM6e2Jyb3dzZXJJbml0aWF0ZWQ6ITAscmVwbGFjZVN0YXRlOiEwLG5hbWVzcGFjZVVwZGF0ZTp2b2lkIDA9PT1jLnN0YXRlPy5uYW1lc3BhY2VJZD97b3B0aW9uOmxzLlVOQ0hBTkdFRH06e29wdGlvbjpscy5GUk9NX0hJU1RPUlksbmFtZXNwYWNlSWQ6Yy5zdGF0ZS5uYW1lc3BhY2VJZH19fSkpKSx0aGlzLnVzZXJJbml0TmF2Um91dGUkPXRuKHRoaXMub25OYXZpZ2F0aW9uUmVxdWVzdGVkJCx0aGlzLm9uSW5pdCQsdGhpcy5vblBvcFN0YXRlJCkucGlwZShOKGM9PntpZighYy5wYXRobmFtZS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKGBbQXBwIHJvdXRpbmddIHBhdGhuYW1lIG11c3Qgc3RhcnQgd2l0aCAnLycuIEdvdDogJHtjLnBhdGhuYW1lfWApO3JldHVybnsuLi5jLHBhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUoYy5wYXRobmFtZSl9fSksTihjPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2goYyksb3B0aW9uczpjLm9wdGlvbnN9KSkpLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQ9dGhpcy5hY3Rpb25zJC5waXBlKE4oYz0+dGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZS5nZXROYXZpZ2F0aW9uKGMpKSxrZShjPT5udWxsIT09YyksTihjPT57bGV0IG0sZD1jLHtyZXBsYWNlU3RhdGU6dT0hMSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwLHJvdXRlS2luZDpmfT1kO3JldHVybiBtPWQucm91dGVLaW5kPT09d24uQ09NUEFSRV9FWFBFUklNRU5UP3tleHBlcmltZW50SWRzOkE4KGQucm91dGVQYXJhbXMuYWxpYXNBbmRFeHBlcmltZW50SWRzKX06ZC5yb3V0ZVBhcmFtcyx7cmVwbGFjZVN0YXRlOnUscm91dGVLaW5kOmYscm91dGVQYXJhbXM6bSxyZXNldE5hbWVzcGFjZWRTdGF0ZTpwfX0pLE4oKHtyZXBsYWNlU3RhdGU6Yyxyb3V0ZUtpbmQ6ZCxyb3V0ZVBhcmFtczp1LHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9KT0+KHtyb3V0ZU1hdGNoOnRoaXMucm91dGVDb25maWdzP3RoaXMucm91dGVDb25maWdzLm1hdGNoQnlSb3V0ZUtpbmQoZCx1KTpudWxsLG9wdGlvbnM6e3JlcGxhY2VTdGF0ZTpjLGJyb3dzZXJJbml0aWF0ZWQ6ITEsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246cD9scy5ORVc6bHMuVU5DSEFOR0VEfX19KSkpLHRoaXMudmFsaWRhdGVkUm91dGVNYXRjaCQ9dG4odGhpcy51c2VySW5pdE5hdlJvdXRlJCx0aGlzLnByb2dyYW1tYXRpY2FsTmF2Um91dGUkKS5waXBlKGtlKCh7cm91dGVNYXRjaDpjfSk9PkJvb2xlYW4oYykpLE4oKHtyb3V0ZU1hdGNoOmMsb3B0aW9uczpkfSk9Pih7cm91dGVNYXRjaDpjLG9wdGlvbnM6ZH0pKSksdGhpcy5uYXZpZ2F0ZSQ9YXIoKCk9PnRoaXMudmFsaWRhdGVkUm91dGVNYXRjaCQucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChObykpLGhuKChbdSxwXSk9PntsZXQgZj1udWxsIT09cCYmRm8ocCx1LnJvdXRlTWF0Y2gpLG09dGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKTtyZXR1cm4gZnx8IW0ubGVuZ3RoP0h0KHUpOmNvKHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnkuZ2V0RGlydHlVcGRhdGVzU2VsZWN0b3JzKCkubWFwKGI9PnRoaXMuc3RvcmUuc2VsZWN0KGIpLnBpcGUoWXQoMSkpKSkucGlwZShOKGI9PnZvaWQgMCE9PWJbMF0uZXhwZXJpbWVudElkcyYmYlswXS5leHBlcmltZW50SWRzLmxlbmd0aD4wKSxrZShiPT57aWYoYil7bGV0IE09d2luZG93LmNvbmZpcm0oIllvdSBoYXZlIHVuc2F2ZWQgZWRpdHMsIGFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHRoZW0/Iik7cmV0dXJuIE0mJnRoaXMuc3RvcmUuZGlzcGF0Y2goRjgoKSksTX1yZXR1cm4hMH0pLE4oKCk9PnUpKX0pLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KGo4KSksTnQoKFt7cm91dGVNYXRjaDp1LG9wdGlvbnM6cH0sZl0pPT57aWYoIXAuYnJvd3NlckluaXRpYXRlZHx8IXUuZGVlcExpbmtQcm92aWRlcnx8cC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09bHMuRlJPTV9ISVNUT1JZJiYhUXcodS5yb3V0ZUtpbmQscC5uYW1lc3BhY2VVcGRhdGUubmFtZXNwYWNlSWQsZikpcmV0dXJuO2xldCBtPXUub3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uJiZ1LnJlZGlyZWN0aW9uT25seVF1ZXJ5UGFyYW1zP3UucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dGhpcy5sb2NhdGlvbi5nZXRTZWFyY2goKSxiPXUuZGVlcExpbmtQcm92aWRlci5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKG0pO3RoaXMuc3RvcmUuZGlzcGF0Y2goRWgoe3JvdXRlS2luZDp1LnJvdXRlS2luZCxwYXJ0aWFsU3RhdGU6Yn0pKX0pLE50KChbe3JvdXRlTWF0Y2g6dX1dKT0+e3UuYWN0aW9uJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKHUuYWN0aW9uKX0pLEpuKChbe3JvdXRlTWF0Y2g6dSxvcHRpb25zOnB9XSk9Pm51bGw9PT11LmRlZXBMaW5rUHJvdmlkZXI/SHQoe3JvdXRlOntyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFyYW1zOnUucGFyYW1zfSxwYXRobmFtZTp1LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOltdLG9wdGlvbnM6cH0pOnUuZGVlcExpbmtQcm92aWRlci5zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModGhpcy5zdG9yZSkucGlwZShOKChmLG0pPT4oe3JvdXRlOntyb3V0ZUtpbmQ6dS5yb3V0ZUtpbmQscGFyYW1zOnUucGFyYW1zfSxwYXRobmFtZTp1LnBhdGhuYW1lLHF1ZXJ5UGFyYW1zOmYsb3B0aW9uczowPT09bT9wOnsuLi5wLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmxzLlVOQ0hBTkdFRH0scmVwbGFjZVN0YXRlOiEwfX0pKSkpLE50KCh7cm91dGU6dX0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChUaCh7YWZ0ZXI6dX0pKX0pLHdyKDApKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KE5vKSksTigoW3UscF0pPT57bGV0IGY9bnVsbD09PXB8fG51bGw9PT11LnJvdXRlfHxGbyhwLHUucm91dGUpO3JldHVybnsuLi51LHByZXNlcnZlSGFzaDpmfX0pLE50KCh7cHJlc2VydmVIYXNoOnUscGF0aG5hbWU6cCxxdWVyeVBhcmFtczpmLG9wdGlvbnM6bX0pPT57KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ucGF0aG5hbWU9PT10LnBhdGhuYW1lJiZuLnF1ZXJ5UGFyYW1zLmxlbmd0aD09PXQucXVlcnlQYXJhbXMubGVuZ3RoJiZuLnF1ZXJ5UGFyYW1zLmV2ZXJ5KChlLGkpPT57bGV0IHI9dC5xdWVyeVBhcmFtc1tpXTtyZXR1cm4gZS5rZXk9PT1yLmtleSYmZS52YWx1ZT09PXIudmFsdWV9KX0pKHtwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmZ9LHtwYXRobmFtZTp0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBcHBSb290bGVzc1BhdGhuYW1lKHRoaXMubG9jYXRpb24uZ2V0UGF0aCgpKSxxdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpfSl8fChtLnJlcGxhY2VTdGF0ZT90aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxmLHUpKSk6dGhpcy5sb2NhdGlvbi5wdXNoU3RhdGVVcmwodGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdCh0aGlzLmxvY2F0aW9uLmdldEZ1bGxQYXRoKHAsZix1KSkpKX0pKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KE5vKSx0aGlzLnN0b3JlLnNlbGVjdChVOCkpLE4oKFt7cm91dGU6dSxvcHRpb25zOnB9LGYsbV0pPT57bGV0IGI9ZnVuY3Rpb24obix0LGUpe3JldHVybiB0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1scy5GUk9NX0hJU1RPUlk/dC5uYW1lc3BhY2VVcGRhdGUubmFtZXNwYWNlSWQ6bnVsbD09ZXx8dC5uYW1lc3BhY2VVcGRhdGUub3B0aW9uPT09bHMuTkVXP2Ake0RhdGUubm93KCkudG9TdHJpbmcoKX06JHtmdW5jdGlvbigpe2xldCBuPW5ldyBVaW50OEFycmF5KDMyKTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG4pO2xldCB0PSIiO2ZvcihsZXQgZSBvZiBuKXQrPShlPj40KS50b1N0cmluZygxNik7cmV0dXJuIHR9KCl9YDplfSgwLHAsbSk7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlRGF0YSh7Li4udGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKSxuYW1lc3BhY2VJZDpifSksUHMoe2JlZm9yZTpmLGFmdGVyOnUsYmVmb3JlTmFtZXNwYWNlSWQ6bSxhZnRlck5hbWVzcGFjZUlkOmJ9KX0pKSksdGhpcy5yb3V0ZUNvbmZpZ3M9cy5nZXRSb3V0ZUNvbmZpZ3MoKX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiB1RigpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKG9mKSxrKFp3KSxrKERsKSxrKEp3KSxrKHNmKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksU2hlPWJyKHthY3RpdmVSb3V0ZTpudWxsLG5leHRSb3V0ZTpudWxsLGFjdGl2ZU5hbWVzcGFjZUlkOm51bGwscmVoeWRyYXRlZERlZXBMaW5rczpbXSxyZWdpc3RlcmVkUm91dGVLZXlzOm5ldyBTZXR9LHllKFRoLChuLHthZnRlcjp0fSk9Pih7Li4ubixuZXh0Um91dGU6dH0pKSx5ZShQcywobix7YWZ0ZXI6dCxhZnRlck5hbWVzcGFjZUlkOmV9KT0+e2xldCBpPW4ucmVoeWRyYXRlZERlZXBMaW5rcztyZXR1cm4gUXcodC5yb3V0ZUtpbmQsZSxpKSYmKGk9Wy4uLmldLGkucHVzaCh7ZGVlcExpbmtHcm91cDpKayh0LnJvdXRlS2luZCksbmFtZXNwYWNlSWQ6ZX0pKSx7Li4ubixhY3RpdmVSb3V0ZTp0LG5leHRSb3V0ZTpudWxsLGFjdGl2ZU5hbWVzcGFjZUlkOmUscmVoeWRyYXRlZERlZXBMaW5rczppfX0pLHllKEt3LChuLHtyb3V0ZUtpbmRzOnR9KT0+KHsuLi5uLHJlZ2lzdGVyZWRSb3V0ZUtleXM6dH0pKSk7ZnVuY3Rpb24gcTgobix0KXtyZXR1cm4gU2hlKG4sdCl9dmFyIEloPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1p3LEp3XSxpbXBvcnRzOltEbCxUci5mb3JGZWF0dXJlKCR3LHE4KSx0by5mb3JGZWF0dXJlKFtXOF0pLFNoLHdoXX0pLG59KSgpLFk4PSJfX3RhYl9fIixYOD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZlN0b3JhZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtc3RvcmFnZSIpLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWdsb2JhbHMiKS50Zl9nbG9iYWxzLnNldFVzZUhhc2goITApLHRoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2UubWlncmF0ZUxlZ2FjeVVSTFNjaGVtZSgpfWdldFN0cmluZyhlKXtyZXR1cm4gdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5nZXRTdHJpbmcoZSl9c2V0U3RyaW5nKGUsaSxyKXt0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLnNldFN0cmluZyhlLGkscil9Z2V0UGx1Z2luSWQoKXtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoWTgpfXNldFBsdWdpbklkKGUsaSl7dGhpcy5zZXRTdHJpbmcoWTgsZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksX3U9Y2xhc3N7fSxPcz0oKCk9PntyZXR1cm4obj1Pc3x8KE9zPXt9KSkuQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsiLE9zO3ZhciBufSkoKSxJbD1fZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwRj1uZXcgaWUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MiKSxLaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZ2xvYmFsU2V0dGluZ1NlbGVjdG9ycz1bXSxlJiYodGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPWUubWFwKGk9PmkoKSkpfWdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPz9bXX1zdGF0aWMgZGVmaW5lR2xvYmFsU2V0dGluZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOnBGLG11bHRpOiEwLHVzZVZhbHVlOmV9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsocEYsOCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxROD0iX3RiX2dsb2JhbF9zZXR0aW5ncy50aW1lc2VyaWVzIixaOD0iX3RiX2dsb2JhbF9zZXR0aW5ncyIsSzg9Im5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZXN0YW1wIixlUz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx0Uz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmRj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdFN7dWlUb0JhY2tlbmQoZSl7bGV0IGk9e307cmV0dXJuIHZvaWQgMCE9PWUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLHZvaWQgMCE9PWUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLHZvaWQgMCE9PWUudG9vbHRpcFNvcnQmJihpLnRvb2x0aXBTb3J0PWUudG9vbHRpcFNvcnQpLHZvaWQgMCE9PWUuYXV0b1JlbG9hZCYmKGkuYXV0b1JlbG9hZD1lLmF1dG9SZWxvYWQpLHZvaWQgMCE9PWUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLHZvaWQgMCE9PWUucGFnZVNpemUmJihpLnBhZ2luYXRpb25TaXplPWUucGFnZVNpemUpLHZvaWQgMCE9PWUudGhlbWVPdmVycmlkZSYmKGkudGhlbWU9ZS50aGVtZU92ZXJyaWRlKSx2b2lkIDAhPT1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMmJihpLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM9ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zKSx2b2lkIDAhPT1lLnNpZGVCYXJXaWR0aEluUGVyY2VudCYmKGkuc2lkZUJhcldpZHRoSW5QZXJjZW50PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50KSx2b2lkIDAhPT1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQmJihpLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ9ZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkKSx2b2lkIDAhPT1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihpLnRpbWVTZXJpZXNDYXJkTWluV2lkdGg9ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoKSx2b2lkIDAhPT1lLnN0ZXBTZWxlY3RvckVuYWJsZWQmJihpLnN0ZXBTZWxlY3RvckVuYWJsZWQ9ZS5zdGVwU2VsZWN0b3JFbmFibGVkKSx2b2lkIDAhPT1lLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCYmKGkucmFuZ2VTZWxlY3Rpb25FbmFibGVkPWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSx2b2lkIDAhPT1lLmxpbmtlZFRpbWVFbmFibGVkJiYoaS5saW5rZWRUaW1lRW5hYmxlZD1lLmxpbmtlZFRpbWVFbmFibGVkKSx2b2lkIDAhPT1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSx2b2lkIDAhPT1lLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfWJhY2tlbmRUb1VpKGUpe2xldCBpPXt9O3JldHVybiBlLmhhc093blByb3BlcnR5KCJzY2FsYXJTbW9vdGhpbmciKSYmIm51bWJlciI9PXR5cGVvZiBlLnNjYWxhclNtb290aGluZyYmKGkuc2NhbGFyU21vb3RoaW5nPWUuc2NhbGFyU21vb3RoaW5nKSxlLmhhc093blByb3BlcnR5KCJpZ25vcmVPdXRsaWVycyIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmlnbm9yZU91dGxpZXJzJiYoaS5pZ25vcmVPdXRsaWVycz1lLmlnbm9yZU91dGxpZXJzKSxlLmhhc093blByb3BlcnR5KCJ0b29sdGlwU29ydCIpJiYic3RyaW5nIj09dHlwZW9mIGUudG9vbHRpcFNvcnQmJihpLnRvb2x0aXBTb3J0PWUudG9vbHRpcFNvcnQpLGUuaGFzT3duUHJvcGVydHkoImF1dG9SZWxvYWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZFBlcmlvZEluTXMiKSYmIm51bWJlciI9PXR5cGVvZiBlLmF1dG9SZWxvYWRQZXJpb2RJbk1zJiYoaS5hdXRvUmVsb2FkUGVyaW9kSW5Ncz1lLmF1dG9SZWxvYWRQZXJpb2RJbk1zKSxlLmhhc093blByb3BlcnR5KCJwYWdpbmF0aW9uU2l6ZSIpJiYibnVtYmVyIj09dHlwZW9mIGUucGFnaW5hdGlvblNpemUmJihpLnBhZ2VTaXplPWUucGFnaW5hdGlvblNpemUpLGUuaGFzT3duUHJvcGVydHkoInRoZW1lIikmJiJzdHJpbmciPT10eXBlb2YgZS50aGVtZSYmbmV3IFNldChPYmplY3QudmFsdWVzKE9zKSkuaGFzKGUudGhlbWUpJiYoaS50aGVtZU92ZXJyaWRlPWUudGhlbWUpLGUuaGFzT3duUHJvcGVydHkoIm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMiKSYmIm51bWJlciI9PXR5cGVvZiBlLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMmJihpLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM9ZS5ub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zKSxlLmhhc093blByb3BlcnR5KCJzaWRlQmFyV2lkdGhJblBlcmNlbnQiKSYmIm51bWJlciI9PXR5cGVvZiBlLnNpZGVCYXJXaWR0aEluUGVyY2VudCYmKGkuc2lkZUJhcldpZHRoSW5QZXJjZW50PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50KSxlLmhhc093blByb3BlcnR5KCJ0aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkIikmJiJib29sZWFuIj09dHlwZW9mIGUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNDYXJkTWluV2lkdGgiKSYmIm51bWJlciI9PXR5cGVvZiBlLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihpLnRpbWVTZXJpZXNDYXJkTWluV2lkdGg9ZS50aW1lU2VyaWVzQ2FyZE1pbldpZHRoKSxlLmhhc093blByb3BlcnR5KCJzdGVwU2VsZWN0b3JFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInJhbmdlU2VsZWN0aW9uRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCYmKGkucmFuZ2VTZWxlY3Rpb25FbmFibGVkPWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSxlLmhhc093blByb3BlcnR5KCJsaW5rZWRUaW1lRW5hYmxlZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmxpbmtlZFRpbWVFbmFibGVkJiYoaS5saW5rZWRUaW1lRW5hYmxlZD1lLmxpbmtlZFRpbWVFbmFibGVkKSxBcnJheS5pc0FycmF5KGUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVyc1swXS5uYW1lJiYoZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzLmZvckVhY2gocj0+e3IubW92YWJsZT1yLm1vdmFibGU/PyEwLHIuc29ydGFibGU9ci5zb3J0YWJsZT8/ITAsci5yZW1vdmFibGU9ci5yZW1vdmFibGU/PyEwfSksaS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksQXJyYXkuaXNBcnJheShlLnJhbmdlU2VsZWN0aW9uSGVhZGVycykmJnZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzWzBdLm5hbWUmJihlLnJhbmdlU2VsZWN0aW9uSGVhZGVycy5mb3JFYWNoKHI9PntyLm1vdmFibGU9ci5tb3ZhYmxlPz8hMCxyLnNvcnRhYmxlPXIuc29ydGFibGU/PyEwLHIucmVtb3ZhYmxlPXIucmVtb3ZhYmxlPz8hMH0pLGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSjg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShOdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFo4LEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShROCksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEs4KX0pLE4oKCk9Pnt9KSk6SnJ9ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShLOCk7cmV0dXJuIEh0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFE4KT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFo4KT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsodFMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSwkOD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTplUyx1c2VDbGFzczpKOH0sZkYse3Byb3ZpZGU6dFMsdXNlRXhpc3Rpbmc6ZkZ9XX0pLG59KSgpLG5TPSJwZXJzaXN0ZW50X3NldHRpbmdzIixlNj1xKEVyKG5TKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncyksdDY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPWFyKCgpPT57bGV0IHM9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFRoKSxZdCgxKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChlNikpLGtlKChbLGFdKT0+YSksaG4oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChJbCh7cGFydGlhbFNldHRpbmdzOmF9KSl9KSxTYSgwKSxobigoKT0+dG4oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKFluKChjLGQpPT57bGV0IHU9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXMoZCk7cmV0dXJuIHUubGVuZ3RoPT09cC5sZW5ndGgmJnUuZXZlcnkoKGYsbSk9PmY9PT1wW21dKX0pLGlhKDEpKSkpKSxDcygpKTtyZXR1cm4gcy5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShWdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoVnQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LGZsKSksKCk9PntpPW51bGx9fSl9KHMucGlwZSh3cig1MDApKSksaG4oYT0+e2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gSnI7bGV0IGw9e307Zm9yKGxldCBjIG9mIGEpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKEtpKSxrKGVTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksUmhlPWJyKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBuNihuLHQpe3JldHVybiBSaGUobix0KX12YXIgbUY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbS2ldLGltcG9ydHM6W1RyLmZvckZlYXR1cmUoblMsbjYpLHRvLmZvckZlYXR1cmUoW3Q2XSksJDhdfSksbn0pKCksZXY9Y2xhc3N7fSxvUz1jbGFzc3t9LGRhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCkscz1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKHMpOnRoaXMuaGVhZGVycy5zZXQobyxbc10pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLGldKT0+e2xldCByO2lmKHI9InN0cmluZyI9PXR5cGVvZiBpP1tpXToibnVtYmVyIj09dHlwZW9mIGk/W2kudG9TdHJpbmcoKV06aS5tYXAobz0+by50b1N0cmluZygpKSxyLmxlbmd0aD4wKXtsZXQgbz1lLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChvLHIpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLG8pfX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXModCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX1nZXQodCl7dGhpcy5pbml0KCk7bGV0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGRhP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCh0PT50aGlzLmFwcGx5VXBkYXRlKHQpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKHQpe3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KX1jbG9uZSh0KXtsZXQgZT1uZXcgZGE7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGRhP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7bGV0IGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgaT10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSwwPT09aS5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7bGV0IHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2goLi4uaSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6bGV0IG89dC52YWx1ZTtpZihvKXtsZXQgcz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFzKXJldHVybjtzPXMuZmlsdGVyKGE9Pi0xPT09by5pbmRleE9mKGEpKSwwPT09cy5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUscyl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19Zm9yRWFjaCh0KXt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSl9fSxPaGU9LyUoXGRbYS1mMC05XSkvZ2ksa2hlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBpNihuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoT2hlLCh0LGUpPT5raGVbZV0/P3QpfWZ1bmN0aW9uIGlTKG4pe3JldHVybmAke259YH12YXIgTWM9Y2xhc3N7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgY2xhc3N7ZW5jb2RlS2V5KHQpe3JldHVybiBpNih0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gaTYodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19LHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IE1hcDtyZXR1cm4gbi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2gocj0+e2xldCBvPXIuaW5kZXhPZigiPSIpLFtzLGFdPS0xPT1vP1t0LmRlY29kZUtleShyKSwiIl06W3QuZGVjb2RlS2V5KHIuc2xpY2UoMCxvKSksdC5kZWNvZGVWYWx1ZShyLnNsaWNlKG8rMSkpXSxsPWUuZ2V0KHMpfHxbXTtsLnB1c2goYSksZS5zZXQocyxsKX0pLGV9KHQuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChlPT57bGV0IGk9dC5mcm9tT2JqZWN0W2VdLHI9QXJyYXkuaXNBcnJheShpKT9pLm1hcChpUyk6W2lTKGkpXTt0aGlzLm1hcC5zZXQoZSxyKX0pKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9YXBwZW5kQWxsKHQpe2xldCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10W2ldO0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKG89PntlLnB1c2goe3BhcmFtOmksdmFsdWU6byxvcDoiYSJ9KX0pOmUucHVzaCh7cGFyYW06aSx2YWx1ZTpyLG9wOiJhIn0pfSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKHQ9PntsZXQgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKGk9PmUrIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShpKSkuam9pbigiJiIpfSkuZmlsdGVyKHQ9PiIiIT09dCkuam9pbigiJiIpfWNsb25lKHQpe2xldCBlPW5ldyBNYyh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gZS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsZS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQodCksZX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKHQ9PnRoaXMubWFwLnNldCh0LHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQodCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCh0PT57c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKGlTKHQudmFsdWUpKSx0aGlzLm1hcC5zZXQodC5wYXJhbSxlKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PXQudmFsdWUpe3RoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKTticmVha317bGV0IGk9dGhpcy5tYXAuZ2V0KHQucGFyYW0pfHxbXSxyPWkuaW5kZXhPZihpUyh0LnZhbHVlKSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dGhpcy5tYXAuc2V0KHQucGFyYW0saSk6dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pfX19KSx0aGlzLmNsb25lRnJvbT10aGlzLnVwZGF0ZXM9bnVsbCl9fTtmdW5jdGlvbiByNihuKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIG82KG4pe3JldHVybiB0eXBlb2YgQmxvYjwidSImJm4gaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIHM2KG4pe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZuIGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIGFmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2xldCBvO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxyPyh0aGlzLmJvZHk9dm9pZCAwIT09aT9pOm51bGwsbz1yKTpvPWksbyYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFvLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhby53aXRoQ3JlZGVudGlhbHMsby5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1vLnJlc3BvbnNlVHlwZSksby5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPW8uaGVhZGVycyksby5jb250ZXh0JiYodGhpcy5jb250ZXh0PW8uY29udGV4dCksby5wYXJhbXMmJih0aGlzLnBhcmFtcz1vLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZGEpLHRoaXMuY29udGV4dHx8KHRoaXMuY29udGV4dD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldCh0LGUpe3JldHVybiB0aGlzLm1hcC5zZXQodCxlKSx0aGlzfWdldCh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfHx0aGlzLm1hcC5zZXQodCx0LmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQodCl9ZGVsZXRlKHQpe3JldHVybiB0aGlzLm1hcC5kZWxldGUodCksdGhpc31oYXModCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0KX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19KSx0aGlzLnBhcmFtcyl7bGV0IHM9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09cy5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtsZXQgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStzfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBNYyx0aGlzLnVybFdpdGhQYXJhbXM9ZX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpyNih0aGlzLmJvZHkpfHxvNih0aGlzLmJvZHkpfHxzNih0aGlzLmJvZHkpfHx0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmdGhpcy5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zfHwic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgTWM/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keXx8czYodGhpcy5ib2R5KT9udWxsOm82KHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6cjYodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBNYz8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5PyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfWNsb25lKHQ9e30pe2xldCBlPXQubWV0aG9kfHx0aGlzLm1ldGhvZCxpPXQudXJsfHx0aGlzLnVybCxyPXQucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LHM9dm9pZCAwIT09dC53aXRoQ3JlZGVudGlhbHM/dC53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMsYT12b2lkIDAhPT10LnJlcG9ydFByb2dyZXNzP3QucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyxsPXQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLGM9dC5wYXJhbXN8fHRoaXMucGFyYW1zLGQ9dC5jb250ZXh0Pz90aGlzLmNvbnRleHQ7cmV0dXJuIHZvaWQgMCE9PXQuc2V0SGVhZGVycyYmKGw9T2JqZWN0LmtleXModC5zZXRIZWFkZXJzKS5yZWR1Y2UoKHUscCk9PnUuc2V0KHAsdC5zZXRIZWFkZXJzW3BdKSxsKSksdC5zZXRQYXJhbXMmJihjPU9iamVjdC5rZXlzKHQuc2V0UGFyYW1zKS5yZWR1Y2UoKHUscCk9PnUuc2V0KHAsdC5zZXRQYXJhbXNbcF0pLGMpKSxuZXcgYWYoZSxpLG8se3BhcmFtczpjLGhlYWRlcnM6bCxjb250ZXh0OmQscmVwb3J0UHJvZ3Jlc3M6YSxyZXNwb25zZVR5cGU6cix3aXRoQ3JlZGVudGlhbHM6c30pfX0sYnU9KCgpPT57cmV0dXJuKG49YnV8fChidT17fSkpW24uU2VudD0wXT0iU2VudCIsbltuLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsbltuLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZT00XT0iUmVzcG9uc2UiLG5bbi5Vc2VyPTVdPSJVc2VyIixidTt2YXIgbn0pKCksdHY9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTIwMCxpPSJPSyIpe3RoaXMuaGVhZGVycz10LmhlYWRlcnN8fG5ldyBkYSx0aGlzLnN0YXR1cz12b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czplLHRoaXMuc3RhdHVzVGV4dD10LnN0YXR1c1RleHR8fGksdGhpcy51cmw9dC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fSxudj1jbGFzcyBleHRlbmRzIHR2e2NvbnN0cnVjdG9yKHQ9e30pe3N1cGVyKHQpLHRoaXMudHlwZT1idS5SZXNwb25zZUhlYWRlcn1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IG52KHtoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sQWg9Y2xhc3MgZXh0ZW5kcyB0dntjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9YnUuUmVzcG9uc2UsdGhpcy5ib2R5PXZvaWQgMCE9PXQuYm9keT90LmJvZHk6bnVsbH1jbG9uZSh0PXt9KXtyZXR1cm4gbmV3IEFoKHtib2R5OnZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fSxBbD1jbGFzcyBleHRlbmRzIHR2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke3QudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke3Quc3RhdHVzfSAke3Quc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9dC5lcnJvcnx8bnVsbH19O2Z1bmN0aW9uIGhGKG4sdCl7cmV0dXJue2JvZHk6dCxoZWFkZXJzOm4uaGVhZGVycyxjb250ZXh0Om4uY29udGV4dCxvYnNlcnZlOm4ub2JzZXJ2ZSxwYXJhbXM6bi5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6bi5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6bi5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfX12YXIgbGY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhhbmRsZXI9ZX1yZXF1ZXN0KGUsaSxyPXt9KXtsZXQgbztpZihlIGluc3RhbmNlb2YgYWYpbz1lO2Vsc2V7bGV0IGwsYztsPXIuaGVhZGVycyBpbnN0YW5jZW9mIGRhP3IuaGVhZGVyczpuZXcgZGEoci5oZWFkZXJzKSxyLnBhcmFtcyYmKGM9ci5wYXJhbXMgaW5zdGFuY2VvZiBNYz9yLnBhcmFtczpuZXcgTWMoe2Zyb21PYmplY3Q6ci5wYXJhbXN9KSksbz1uZXcgYWYoZSxpLHZvaWQgMCE9PXIuYm9keT9yLmJvZHk6bnVsbCx7aGVhZGVyczpsLGNvbnRleHQ6ci5jb250ZXh0LHBhcmFtczpjLHJlcG9ydFByb2dyZXNzOnIucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOnIucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOnIud2l0aENyZWRlbnRpYWxzfSl9bGV0IHM9SHQobykucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBfbih0KT9obihuLHQsMSk6aG4obiwxKX0obD0+dGhpcy5oYW5kbGVyLmhhbmRsZShsKSkpO2lmKGUgaW5zdGFuY2VvZiBhZnx8ImV2ZW50cyI9PT1yLm9ic2VydmUpcmV0dXJuIHM7bGV0IGE9cy5waXBlKGtlKGw9PmwgaW5zdGFuY2VvZiBBaCkpO3N3aXRjaChyLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goby5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBhLnBpcGUoTihsPT57aWYobnVsbCE9PWwuYm9keSYmIShsLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIGwuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBhLnBpcGUoTihsPT57aWYobnVsbCE9PWwuYm9keSYmIShsLmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIGwuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBhLnBpcGUoTihsPT57aWYobnVsbCE9PWwuYm9keSYmInN0cmluZyIhPXR5cGVvZiBsLmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIGwuYm9keX0pKTtkZWZhdWx0OnJldHVybiBhLnBpcGUoTihsPT5sLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gYTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtyLm9ic2VydmV9fWApfX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLGUsaSl9Z2V0KGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixlLGkpfWhlYWQoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixlLGkpfWpzb25wKGUsaSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGUse3BhcmFtczoobmV3IE1jKS5hcHBlbmQoaSwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGUsaSl9cGF0Y2goZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixlLGhGKHIsaSkpfXBvc3QoZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGUsaEYocixpKSl9cHV0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGUsaEYocixpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoZXYpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBkNihuLHQpe3JldHVybiB0KG4pfWZ1bmN0aW9uIExoZShuLHQpe3JldHVybihlLGkpPT50LmludGVyY2VwdChlLHtoYW5kbGU6cj0+bihyLGkpfSl9dmFyIGJGPW5ldyBpZSgiSFRUUF9JTlRFUkNFUFRPUlMiKSx2Rj1uZXcgaWUoIkhUVFBfSU5URVJDRVBUT1JfRk5TIik7ZnVuY3Rpb24gVmhlKCl7bGV0IG49bnVsbDtyZXR1cm4odCxlKT0+KG51bGw9PT1uJiYobj0oYWkoYkYse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodChMaGUsZDYpKSxuKHQsZSkpfXZhciBhNj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZXZ7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuYmFja2VuZD1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKGUpe2lmKG51bGw9PT10aGlzLmNoYWluKXtsZXQgaT1BcnJheS5mcm9tKG5ldyBTZXQodGhpcy5pbmplY3Rvci5nZXQodkYpKSk7dGhpcy5jaGFpbj1pLnJlZHVjZVJpZ2h0KChyLG8pPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuKGkscik9PmUucnVuSW5Db250ZXh0KCgpPT50KGksbz0+bihvLHIpKSl9KHIsbyx0aGlzLmluamVjdG9yKSxkNil9cmV0dXJuIHRoaXMuY2hhaW4oZSxpPT50aGlzLmJhY2tlbmQuaGFuZGxlKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhvUyksayhwYykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhoZT0vXlwpXF1cfScsP1xuLyxsNj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMueGhyRmFjdG9yeT1lfWhhbmRsZShlKXtpZigiSlNPTlAiPT09ZS5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBIdHRwQ2xpZW50SnNvbnBNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgS3QoaT0+e2xldCByPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3BlbihlLm1ldGhvZCxlLnVybFdpdGhQYXJhbXMpLGUud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycy5mb3JFYWNoKChmLG0pPT5yLnNldFJlcXVlc3RIZWFkZXIoZixtLmpvaW4oIiwiKSkpLGUuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFlLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7bGV0IGY9ZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1mJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZil9aWYoZS5yZXNwb25zZVR5cGUpe2xldCBmPWUucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09Zj9mOiJ0ZXh0In1sZXQgbz1lLnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsYT0oKT0+e2lmKG51bGwhPT1zKXJldHVybiBzO2xldCBmPXIuc3RhdHVzVGV4dHx8Ik9LIixtPW5ldyBkYShyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxiPWZ1bmN0aW9uKG4pe3JldHVybiJyZXNwb25zZVVSTCJpbiBuJiZuLnJlc3BvbnNlVVJMP24ucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3Qobi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/bi5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHIpfHxlLnVybDtyZXR1cm4gcz1uZXcgbnYoe2hlYWRlcnM6bSxzdGF0dXM6ci5zdGF0dXMsc3RhdHVzVGV4dDpmLHVybDpifSksc30sbD0oKT0+e2xldHtoZWFkZXJzOmYsc3RhdHVzOm0sc3RhdHVzVGV4dDpiLHVybDpNfT1hKCkseT1udWxsOzIwNCE9PW0mJih5PXR5cGVvZiByLnJlc3BvbnNlPiJ1Ij9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09bSYmKG09eT8yMDA6MCk7bGV0IHg9bT49MjAwJiZtPDMwMDtpZigianNvbiI9PT1lLnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiB5KXtsZXQgUj15O3k9eS5yZXBsYWNlKEhoZSwiIik7dHJ5e3k9IiIhPT15P0pTT04ucGFyc2UoeSk6bnVsbH1jYXRjaChBKXt5PVIseCYmKHg9ITEseT17ZXJyb3I6QSx0ZXh0Onl9KX19eD8oaS5uZXh0KG5ldyBBaCh7Ym9keTp5LGhlYWRlcnM6ZixzdGF0dXM6bSxzdGF0dXNUZXh0OmIsdXJsOk18fHZvaWQgMH0pKSxpLmNvbXBsZXRlKCkpOmkuZXJyb3IobmV3IEFsKHtlcnJvcjp5LGhlYWRlcnM6ZixzdGF0dXM6bSxzdGF0dXNUZXh0OmIsdXJsOk18fHZvaWQgMH0pKX0sYz1mPT57bGV0e3VybDptfT1hKCksYj1uZXcgQWwoe2Vycm9yOmYsc3RhdHVzOnIuc3RhdHVzfHwwLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOm18fHZvaWQgMH0pO2kuZXJyb3IoYil9LGQ9ITEsdT1mPT57ZHx8KGkubmV4dChhKCkpLGQ9ITApO2xldCBtPXt0eXBlOmJ1LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmYubG9hZGVkfTtmLmxlbmd0aENvbXB1dGFibGUmJihtLnRvdGFsPWYudG90YWwpLCJ0ZXh0Ij09PWUucmVzcG9uc2VUeXBlJiYhIXIucmVzcG9uc2VUZXh0JiYobS5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksaS5uZXh0KG0pfSxwPWY9PntsZXQgbT17dHlwZTpidS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6Zi5sb2FkZWR9O2YubGVuZ3RoQ29tcHV0YWJsZSYmKG0udG90YWw9Zi50b3RhbCksaS5uZXh0KG0pfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGUucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix1KSxudWxsIT09byYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKG8pLGkubmV4dCh7dHlwZTpidS5TZW50fSksKCk9PntyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHUpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnJlYWR5U3RhdGUhPT1yLkRPTkUmJnIuYWJvcnQoKX19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhRcCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHU2PW5ldyBpZSgiWFNSRl9FTkFCTEVEIiksamhlPW5ldyBpZSgiWFNSRl9DT09LSUVfTkFNRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLFdoZT1uZXcgaWUoIlhTUkZfSEVBREVSX05BTUUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRPS0VOIn0pLHNTPWNsYXNze30scWhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZG9jPWUsdGhpcy5wbGF0Zm9ybT1pLHRoaXMuY29va2llTmFtZT1yLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2xldCBlPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGUhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1tdyhlLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWUpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEx0KSxrKHZjKSxrKGpoZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIFloZShuLHQpe2xldCBlPW4udXJsLnRvTG93ZXJDYXNlKCk7aWYoIWFpKHU2KXx8IkdFVCI9PT1uLm1ldGhvZHx8IkhFQUQiPT09bi5tZXRob2R8fGUuc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxlLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIHQobik7bGV0IGk9YWkoc1MpLmdldFRva2VuKCkscj1haShXaGUpO3JldHVybiBudWxsIT1pJiYhbi5oZWFkZXJzLmhhcyhyKSYmKG49bi5jbG9uZSh7aGVhZGVyczpuLmhlYWRlcnMuc2V0KHIsaSl9KSksdChuKX12YXIgclM9KCgpPT57cmV0dXJuKG49clN8fChyUz17fSkpW24uSW50ZXJjZXB0b3JzPTBdPSJJbnRlcmNlcHRvcnMiLG5bbi5MZWdhY3lJbnRlcmNlcHRvcnM9MV09IkxlZ2FjeUludGVyY2VwdG9ycyIsbltuLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uPTJdPSJDdXN0b21Yc3JmQ29uZmlndXJhdGlvbiIsbltuLk5vWHNyZlByb3RlY3Rpb249M109Ik5vWHNyZlByb3RlY3Rpb24iLG5bbi5Kc29ucFN1cHBvcnQ9NF09Ikpzb25wU3VwcG9ydCIsbltuLlJlcXVlc3RzTWFkZVZpYVBhcmVudD01XT0iUmVxdWVzdHNNYWRlVmlhUGFyZW50IixyUzt2YXIgbn0pKCk7ZnVuY3Rpb24gUWhlKC4uLm4pe2xldCB0PVtsZixsNixhNix7cHJvdmlkZTpldix1c2VFeGlzdGluZzphNn0se3Byb3ZpZGU6b1MsdXNlRXhpc3Rpbmc6bDZ9LHtwcm92aWRlOnZGLHVzZVZhbHVlOlloZSxtdWx0aTohMH0se3Byb3ZpZGU6dTYsdXNlVmFsdWU6ITB9LHtwcm92aWRlOnNTLHVzZUNsYXNzOnFoZX1dO2ZvcihsZXQgZSBvZiBuKXQucHVzaCguLi5lLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybnsiXHUwMjc1cHJvdmlkZXJzIjpufX0odCl9dmFyIGM2PW5ldyBpZSgiTEVHQUNZX0lOVEVSQ0VQVE9SX0ZOIikscDY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUWhlKHsiXHUwMjc1a2luZCI6clMuTGVnYWN5SW50ZXJjZXB0b3JzLCJcdTAyNzVwcm92aWRlcnMiOlt7cHJvdmlkZTpjNix1c2VGYWN0b3J5OlZoZX0se3Byb3ZpZGU6dkYsdXNlRXhpc3Rpbmc6YzYsbXVsdGk6ITB9XX0pXX0pLG59KSgpLGFTPSJmZWF0dXJlIixSaD1FcihhUyksdnU9cShSaCxuPT5uLmlzRmVhdHVyZUZsYWdzTG9hZGVkKSxrcz1xKFJoLG49Pih7Li4ubi5kZWZhdWx0RmxhZ3MsLi4ubi5mbGFnT3ZlcnJpZGVzfSkpLG02PXEoUmgsbj0+bi5kZWZhdWx0RmxhZ3MpLGl2PXEoUmgsbj0+bi5mbGFnT3ZlcnJpZGVzfHx7fSksY2Y9cShSaCxuPT5uLm1ldGFkYXRhKSxQaD1xKFJoLG49PntsZXQgdD17fTtmb3IobGV0IGUgaW4gbi5mbGFnT3ZlcnJpZGVzKXtsZXQgaT1uLm1ldGFkYXRhW2VdO2kmJmkucXVlcnlQYXJhbU92ZXJyaWRlJiZpLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuJiYodFtlXT1uLmZsYWdPdmVycmlkZXNbZV0pfXJldHVybiB0fSksaDY9cShrcyxuPT5uLmlzQXV0b0RhcmtNb2RlQWxsb3dlZCksUmw9cShrcyxuPT5udWxsIT09bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlP24uZW5hYmxlRGFya01vZGVPdmVycmlkZTpuLmRlZmF1bHRFbmFibGVEYXJrTW9kZSksbFM9cShrcyxuPT5uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGUpLGc2PXEoa3Msbj0+bi5lbmFibGVkRXhwZXJpbWVudGFsUGx1Z2lucyksXzY9cShrcyxuPT5uLmluQ29sYWIpLGNTPXEoa3Msbj0+bi5tZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZCkseUY9cShrcyxuPT5uLmZvcmNlU3ZnKSxiNj1xKGtzLG49PnZvaWQgMCE9PW4uc2hvd0ZsYWdzKSxkUz1xKGtzLG49Pm4uZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiksbWQ9cShrcyxuPT5uLmVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMpO2Z1bmN0aW9uIEpoZShuLHQpe2lmKCFuKXJldHVybjtsZXQgZT1uIGluc3RhbmNlb2YgRm9ybURhdGE/ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldFtlLGldb2Ygbi5lbnRyaWVzKCkpdFtlXT1pO3JldHVybiB0fShuKTpuO3JldHVybiB0P3tbdF06SlNPTi5zdHJpbmdpZnkoZSl9OmV9dmFyICRoZT0iWC1YU1JGLVByb3RlY3RlZCI7ZnVuY3Rpb24geEYobil7bGV0IHQ9bi5oZWFkZXJzfHxuZXcgZGE7cmV0dXJuIHQ9dC5hcHBlbmQoJGhlLCIxIiksey4uLm4saGVhZGVyczp0fX12YXIgVWE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hcHBSb290UHJvdmlkZXI9ZSx0aGlzLmh0dHA9aSx0aGlzLnN0b3JlPXJ9cmVzb2x2ZUFwcFJvb3QoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSk6ZX1nZXQoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc29sdmVBcHBSb290KGUpLGkpfXBvc3QoZSxpLHI9e30sbyl7cmV0dXJuIHI9eEYociksdGhpcy5zdG9yZS5zZWxlY3QodnUpLnBpcGUoa2Uocz0+Qm9vbGVhbihzKSksWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoXzYpKSxobigoWyxzXSk9PntsZXQgYT10aGlzLnJlc29sdmVBcHBSb290KGUpO3JldHVybiBzP3RoaXMuaHR0cC5nZXQoYSx7aGVhZGVyczpyLmhlYWRlcnM/P3t9LHBhcmFtczpKaGUoaSxvKX0pOnRoaXMuaHR0cC5wb3N0KGEsaSxyKX0pKX1wdXQoZSxpLHI9e30pe3JldHVybiB0aGlzLmh0dHAucHV0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSx4RihyKSl9ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5yZXNvbHZlQXBwUm9vdChlKSx4RihpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoc2YpLGsobGYpLGsoQWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxPaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltVYV0saW1wb3J0czpbcDYsU2hdfSksbn0pKCksamE9KCgpPT57cmV0dXJuKG49amF8fChqYT17fSkpLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIixqYTt2YXIgbn0pKCksdjY9bmV3IGllKCJUZW5zb3JCb2FyZCBicmFuZCBuYW1lIiksbm89KCgpPT57cmV0dXJuKG49bm98fChubz17fSkpLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIixubzt2YXIgbn0pKCksRHI9KCgpPT57cmV0dXJuKG49RHJ8fChEcj17fSkpLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkiLERyO3ZhciBufSkoKTtmdW5jdGlvbiB5NihuKXtsZXQgdD1qYS5VTktOT1dOO3JldHVybiBuIGluc3RhbmNlb2YgQWwmJig0MDQ9PT1uLnN0YXR1cyYmKHQ9amEuTk9UX0ZPVU5EKSw0MDM9PT1uLnN0YXR1cyYmKHQ9amEuUEVSTUlTU0lPTl9ERU5JRUQpKSxlYShuZXcgb3YodCkpfXZhciBvdj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhaWx1cmVDb2RlPXR9fSx1Uz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMudGZCYWNrZW5kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfWZldGNoUGx1Z2luc0xpc3RpbmcoZSl7bGV0IGk9ZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldCBlIG9mIG4pdC5hcHBlbmQoImV4cGVyaW1lbnRhbFBsdWdpbiIsZSk7cmV0dXJuIHR9KGUpLHI9aT9gZGF0YS9wbHVnaW5zX2xpc3Rpbmc/JHtpLnRvU3RyaW5nKCl9YDoiZGF0YS9wbHVnaW5zX2xpc3RpbmciO3JldHVybiB0aGlzLmh0dHAuZ2V0KHIpLnBpcGUoenIoeTYpKX1mZXRjaEVudmlyb25tZW50KCl7cmV0dXJuIGNvKFt0aGlzLmh0dHAuZ2V0KCJkYXRhL2Vudmlyb25tZW50IiksJHIodGhpcy50ZkJhY2tlbmQuZW52aXJvbm1lbnRTdG9yZS5yZWZyZXNoKCkpXSkucGlwZShOKChbcl0pPT5yKSx6cih5NikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFVhKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseDY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbdVNdLGltcG9ydHM6W09oXX0pLG59KSgpLFRlPSgoKT0+e3JldHVybihuPVRlfHwoVGU9e30pKVtuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCIsVGU7dmFyIG59KSgpLHdjPV9lKCJbQ29yZV0gUGx1Z2luIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwUz1fZSgiW0NvcmVdIFBsdWdpbiBVcmwgSGFzaCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQzY9X2UoIltDb3JlXSBMb2FkZWQiKSxGcz1fZSgiW0NvcmVdIFVzZXIgVHJpZ2dlcmVkIFJlbG9hZCIpLGNzPV9lKCJbQ29yZV0gQXV0byBSZWxvYWQiKSxmUz1fZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggUmVxdWVzdGVkIiksZGY9X2UoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzdj1fZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbVM9X2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFJlcXVlc3RlZCIpLGhTPV9lKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBTdWNjZXNzZnVsIiksZ1M9X2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIEZhaWxlZCIpLF9TPV9lKCJbQ29yZV0gRW52aXJvbm1lbnQgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE02PV9lKCJbQ29yZV0gUnVuIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdzY9X2UoIltDb3JlXSBSdW4gRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtoPV9lKCJbQ29yZV0gU2lkZSBCYXIgV2lkdGggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJTPV9lKCJbQ29yZV0gUnVucyBUYWJsZSBGdWxsIFNjcmVlbiBUb2dnbGVkIik7ZnVuY3Rpb24gdWYobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6YnIocix5ZShQcywoYSx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDpkLGFmdGVyTmFtZXNwYWNlSWQ6dX0pPT57bGV0IHA9YTtyZXR1cm4gZCE9PXUmJihwPWZ1bmN0aW9uKGEsbCxjKXtsZXQgZD17Li4uYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGYgb2YgaSlwW2ZdPWFbZl07ZD17Li4uZCxbbF06cH19bGV0IHU9e307cmV0dXJuIGEucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP3U9YS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJih1PW4pLHsuLi5hLC4uLnUscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTpkfX0oYSxkLHUpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24gcGYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgbHY9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpUZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMCxydW5zVGFibGVGdWxsU2NyZWVuOiExfSxuZ2U9YnIobHYseWUod2MscFMsKG4se3BsdWdpbjp0fSk9Pih7Li4ubixhY3RpdmVQbHVnaW46dH0pKSx5ZShmUyxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6VGUuTE9BRElOR30scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6VGUuTE9BRElOR319KSkseWUoc3YsKG4se2ZhaWx1cmVDb2RlOnR9KT0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOlRlLkZBSUxFRH0scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6VGUuRkFJTEVELGZhaWx1cmVDb2RlOnR9fSkpLHllKGRmLChuLHtwbHVnaW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLmZpbmQocz0+dFtzXS5lbmFibGVkKXx8bnVsbCxpPW4uYWN0aXZlUGx1Z2lufHxlLHI9RGF0ZS5ub3coKSxvPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1UZS5MT0FERUQmJihvPXtzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnJ9KSx7Li4ubixhY3RpdmVQbHVnaW46aSxjb3JlRGF0YUxvYWRTdGF0ZTpvLHBsdWdpbnM6dCxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyLGZhaWx1cmVDb2RlOm51bGx9fX0pLHllKG1TLG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpUZS5MT0FESU5HfSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpUZS5MT0FESU5HfX0pKSx5ZShoUyxuPT57bGV0IHQ9RGF0ZS5ub3coKSxlPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucGx1Z2luc0xpc3RMb2FkZWQuc3RhdGU9PT1UZS5MT0FERUQmJihlPXtzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9KSx7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTplLHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOlRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6dH19fSkseWUoZ1Msbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOlRlLkZBSUxFRH0scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6VGUuRkFJTEVEfX0pKSx5ZShfUywobix7ZW52aXJvbm1lbnQ6dH0pPT4oey4uLm4sZW52aXJvbm1lbnQ6dH0pKSx5ZSh3Niwobix7cnVuczp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1bnM6dH0pKSx5ZShNNiwobix7bmV4dFNlbGVjdGlvbjp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0KHQpfSkpLHllKGtoLChuLHt3aWR0aEluUGVyY2VudDp0fSk9Pih7Li4ubixzaWRlQmFyV2lkdGhJblBlcmNlbnQ6TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxMDApfSkpLHllKElsLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9ey4uLm59LGk9dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiZpPD0xMDAmJihlLnNpZGVCYXJXaWR0aEluUGVyY2VudD1pKSxlfSkseWUoYlMsbj0+KHsuLi5uLHJ1bnNUYWJsZUZ1bGxTY3JlZW46IW4ucnVuc1RhYmxlRnVsbFNjcmVlbn0pKSkse3JlZHVjZXJzOmlnZX09dWYobHYse30pO2Z1bmN0aW9uIFM2KG4sdCl7cmV0dXJuIHBmKG5nZSxpZ2UpKG4sdCl9dmFyIGhkPUVyKCJjb3JlIikseVM9cShoZCxuPT5uLnBsdWdpbnNMaXN0TG9hZGVkKSxFNj1xKGhkLG49Pm4ucG9seW1lclJ1bnNMb2FkU3RhdGUpLFQ2PXEoaGQsbj0+bi5jb3JlRGF0YUxvYWRTdGF0ZS5zdGF0ZSksRmg9cShoZCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLmxhc3RMb2FkZWRUaW1lSW5NcyksV289cShoZCxuPT5uLmFjdGl2ZVBsdWdpbiksTmg9cShoZCxuPT5uLnBsdWdpbnMpLHhTPXEoaGQsbj0+bi5lbnZpcm9ubWVudCksQ1M9cShoZCxuPT5uLnNpZGVCYXJXaWR0aEluUGVyY2VudCksTGg9cShoZCxuPT5uLnJ1bnNUYWJsZUZ1bGxTY3JlZW4pLEQ2PW5ldyBTZXQoW3duLkNPTVBBUkVfRVhQRVJJTUVOVCx3bi5FWFBFUklNRU5ULHduLk5PVF9TRVRdKSxJNj0oKCk9PntjbGFzcyBue3JlZnJlc2hQb2x5bWVyUnVucygpe3JldHVybiAkcih0aGlzLnRmQmFja2VuZC5yZWYucnVuc1N0b3JlLnJlZnJlc2goKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hFbnZpcm9ubWVudCgpLnBpcGUoTnQoZT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goX1Moe2Vudmlyb25tZW50OmV9KSl9KSl9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy53ZWJhcHBEYXRhU291cmNlPXIsdGhpcy50ZkJhY2tlbmQ9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH0sdGhpcy5vbkRhc2hib2FyZExvYWQkPXRuKHRoaXMuYWN0aW9ucyQucGlwZShlaShDNixQcyksQnQodGhpcy5zdG9yZS5zZWxlY3QoTm8pKSxZbigoWyxvXSxbLHNdKT0+Rm8obyxzKSkpLHRoaXMuYWN0aW9ucyQucGlwZShlaShjcyxGcykpKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEhhKSksa2UoKFssb10pPT5ENi5oYXMobykpLGFjKDEsdm9pZCAwLHtsZWFkaW5nOiEwfSkpLHRoaXMuZmV0Y2hXZWJBcHBEYXRhJD1hcigoKT0+e2xldCBvPXRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KHlTKSx0aGlzLnN0b3JlLnNlbGVjdChnNikpLGtlKChbLHtzdGF0ZTphfV0pPT5hIT09VGUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goZlMoKSkpLGhuKChbLCxhXSk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PXJjKG4pLGU9T0Mobik7cmV0dXJuIGUubGVuZ3RoP25ldyBLdChpPT57bGV0IHI9ZS5tYXAoKCk9PltdKSxvPWUubWFwKCgpPT4hMSk7aS5hZGQoKCk9PntyPW89bnVsbH0pO2ZvcihsZXQgcz0wOyFpLmNsb3NlZCYmczxlLmxlbmd0aDtzKyspaWkoZVtzXSkuc3Vic2NyaWJlKFZ0KGksYT0+e2lmKHJbc10ucHVzaChhKSxyLmV2ZXJ5KGw9PmwubGVuZ3RoKSl7bGV0IGw9ci5tYXAoYz0+Yy5zaGlmdCgpKTtpLm5leHQodD90KC4uLmwpOmwpLHIuc29tZSgoYyxkKT0+IWMubGVuZ3RoJiZvW2RdKSYmaS5jb21wbGV0ZSgpfX0sKCk9PntvW3NdPSEwLCFyW3NdLmxlbmd0aCYmaS5jb21wbGV0ZSgpfSkpO3JldHVybigpPT57cj1vPW51bGx9fSk6SnJ9KHRoaXMud2ViYXBwRGF0YVNvdXJjZS5mZXRjaFBsdWdpbnNMaXN0aW5nKGEpLHRoaXMuZmV0Y2hFbnZpcm9ubWVudCgpKS5waXBlKE4oKFtsXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGRmKHtwbHVnaW5zOmx9KSl9KSx6cihsPT4odGhpcy5zdG9yZS5kaXNwYXRjaChzdihsIGluc3RhbmNlb2Ygb3Y/e2ZhaWx1cmVDb2RlOmwuZmFpbHVyZUNvZGV9OntmYWlsdXJlQ29kZTpqYS5VTktOT1dOfSkpLEpyKSkpKSk7cmV0dXJuIHRuKG8sdGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoTigoWyxhXSk9PmEpLEpuKGE9PmEhPT13bi5DT01QQVJFX0VYUEVSSU1FTlQ/SHQoW10pOnRoaXMuc3RvcmUuc2VsZWN0KHphKS5waXBlKFluKChsLGMpPT57bGV0IGQ9T2JqZWN0LmVudHJpZXMobCksdT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGMpKTtpZihkLmxlbmd0aCE9PXUuc2l6ZSlyZXR1cm4hMTtmb3IobGV0W3AsZl1vZiBkKWlmKCF1LmdldChwKXx8dS5nZXQocCkuYWxpYXNUZXh0IT09Zi5hbGlhc1RleHR8fHUuZ2V0KHApLmFsaWFzTnVtYmVyIT09Zi5hbGlhc051bWJlcilyZXR1cm4hMTtyZXR1cm4hMH0pLFNhKDApLGFjKDUwMCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSkpLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEhhKSx0aGlzLnN0b3JlLnNlbGVjdChFNikpLGtlKChbLGEsbF0pPT5ENi5oYXMoYSkmJmwuc3RhdGUhPT1UZS5MT0FESU5HKSxOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobVMoKSl9KSxKbigoKT0+dGhpcy5yZWZyZXNoUG9seW1lclJ1bnMoKSksTnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGhTKCkpfSksenIoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKGdTKCkpLEpyKSkpKX0se2Rpc3BhdGNoOiExfSksdGhpcy5kaXNwYXRjaENoYW5nZVBsdWdpbiQ9YXIoKCk9PnRuKHRoaXMub25EYXNoYm9hcmRMb2FkJCx0aGlzLmFjdGlvbnMkLnBpcGUoZWkoZGYpKSkucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChXbykpLE4oKFssb10pPT5vKSxZbigpLGtlKG89Pm51bGwhPT1vKSxZdCgxKSxOdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh3Yyh7cGx1Z2luOm99KSl9KSkse2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeG8pLGsoQWUpLGsodVMpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxDRj1uZXcgaWUoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiBBNihuKXtyZXR1cm57aW5pdGlhbFN0YXRlOnsuLi5sdixhY3RpdmVQbHVnaW46bi5nZXRQbHVnaW5JZCgpfHxudWxsfX19ZnVuY3Rpb24gc2dlKCl7cmV0dXJuIHEoQ1Msbj0+KHtzaWRlQmFyV2lkdGhJblBlcmNlbnQ6bn0pKX12YXIgR2E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6Q0YsZGVwczpbX3VdLHVzZUZhY3Rvcnk6QTZ9XSxpbXBvcnRzOlt0by5mb3JGZWF0dXJlKFtJNl0pLFRyLmZvckZlYXR1cmUoImNvcmUiLFM2LENGKSx4NixLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKHNnZSldfSksbn0pKCksUjY9bmV3IGllKCJbQWxlcnRdIEFjdGlvbi1Uby1BbGVydCBQcm92aWRlciIpLFNjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IobGV0IGkgb2YgZXx8W10pZm9yKGxldCByIG9mIGkpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyhyLmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3IuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChyLmFjdGlvbkNyZWF0b3IudHlwZSxyLmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyQWxlcnRBY3Rpb25zKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UjYsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFI2LDgpKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksTVM9X2UoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHl1PV9lKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCaD1fZSgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY3Y9X2UoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3Uz1fZSgiW1J1bnNdIFNpbmdsZSBSdW4gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdj1fZSgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1M9X2UoIltSdW5zXSBSdW4gU2VsZWN0b3IgUGFnaW5hdGlvbiBPcHRpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVTPV9lKCJbUnVuc10gUnVuIFNlbGVjdG9yIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHV2PV9lKCJbUnVuc10gUnVuIFNlbGVjdG9yIFJlZ2V4IEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVFM9X2UoIltSdW5zXSBSdW4gQ29sb3IgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFZoPV9lKCJbUnVuc10gUnVuIFRhYmxlIFNob3duIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSGg9X2UoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLERTPV9lKCJbUnVuc10gUnVucyBUYWJsZSBIZWFkZXIgQWRkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6aD1fZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIFJlbW92ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUz1fZSgiW1J1bnNdIFJ1bnMgVGFibGUgSGVhZGVyIE9yZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBUz1fZSgiW1J1bnNdIFJ1bnMgVGFibGUgU29ydGluZyBJbmZvIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxodD0oKCk9PntyZXR1cm4obj1odHx8KGh0PXt9KSkuQ09MT1I9IkNPTE9SIixuLlJFTEFUSVZFX1RJTUU9IlJFTEFUSVZFX1RJTUUiLG4uUlVOPSJSVU4iLG4uU1RFUD0iU1RFUCIsbi5FWFBFUklNRU5UPSJFWFBFUklNRU5UIixuLlRJTUU9IlRJTUUiLG4uVkFMVUU9IlZBTFVFIixuLlNNT09USEVEPSJTTU9PVEhFRCIsbi5WQUxVRV9DSEFOR0U9IlZBTFVFX0NIQU5HRSIsbi5TVEFSVF9TVEVQPSJTVEFSVF9TVEVQIixuLkVORF9TVEVQPSJFTkRfU1RFUCIsbi5TVEFSVF9WQUxVRT0iU1RBUlRfVkFMVUUiLG4uRU5EX1ZBTFVFPSJFTkRfVkFMVUUiLG4uTUlOX1ZBTFVFPSJNSU5fVkFMVUUiLG4uTUFYX1ZBTFVFPSJNQVhfVkFMVUUiLG4uUEVSQ0VOVEFHRV9DSEFOR0U9IlBFUkNFTlRBR0VfQ0hBTkdFIixuLlNURVBfQVRfTUFYPSJTVEVQX0FUX01BWCIsbi5TVEVQX0FUX01JTj0iU1RFUF9BVF9NSU4iLG4uTUVBTj0iTUVBTiIsbi5SQVdfQ0hBTkdFPSJSQVdfQ0hBTkdFIixuLkhQQVJBTT0iSFBBUkFNIixuLk1FVFJJQz0iTUVUUklDIixuLkNVU1RPTT0iQ1VTVE9NIixodDt2YXIgbn0pKCksZ249KCgpPT57cmV0dXJuKG49Z258fChnbj17fSkpW24uRElTQ1JFVEU9MF09IkRJU0NSRVRFIixuW24uSU5URVJWQUw9MV09IklOVEVSVkFMIixnbjt2YXIgbn0pKCksaW89KCgpPT57cmV0dXJuKG49aW98fChpbz17fSkpW24uQVNDRU5ESU5HPTBdPSJBU0NFTkRJTkciLG5bbi5ERVNDRU5ESU5HPTFdPSJERVNDRU5ESU5HIixpbzt2YXIgbn0pKCkscm89KCgpPT57cmV0dXJuKG49cm98fChybz17fSkpW24uU0lOR0xFPTBdPSJTSU5HTEUiLG5bbi5SQU5HRT0xXT0iUkFOR0UiLHJvO3ZhciBufSkoKSxOcz0oKCk9PntyZXR1cm4obj1Oc3x8KE5zPXt9KSkuU1RBVFVTX1VOS05PV049IlNUQVRVU19VTktOT1dOIixuLlNUQVRVU19TVUNDRVNTPSJTVEFUVVNfU1VDQ0VTUyIsbi5TVEFUVVNfRkFJTFVSRT0iU1RBVFVTX0ZBSUxVUkUiLG4uU1RBVFVTX1JVTk5JTkc9IlNUQVRVU19SVU5OSU5HIixOczt2YXIgbn0pKCksUlM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksRWM9e307RkEoRWMse2Rhc2hib2FyZEhwYXJhbUZpbHRlckFkZGVkOigpPT5ERixkYXNoYm9hcmRIcGFyYW1GaWx0ZXJSZW1vdmVkOigpPT5mdixkYXNoYm9hcmRNZXRyaWNGaWx0ZXJBZGRlZDooKT0+SUYsZGFzaGJvYXJkTWV0cmljRmlsdGVyUmVtb3ZlZDooKT0+bXYsaHBhcmFtc0Rpc2NyZXRlSHBhcmFtRmlsdGVyQ2hhbmdlZDooKT0+U0YsaHBhcmFtc0ZldGNoU2Vzc2lvbkdyb3Vwc1N1Y2NlZWRlZDooKT0+cHYsaHBhcmFtc0ludGVydmFsSHBhcmFtRmlsdGVyQ2hhbmdlZDooKT0+RUYsaHBhcmFtc01ldHJpY0ZpbHRlckNoYW5nZWQ6KCk9PlRGfSk7dmFyIFNGPV9lKCJbSHBhcmFtc10gSHBhcmFtcyBEaXNjcmV0ZSBIcGFyYW0gRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFRj1fZSgiW0hwYXJhbXNdIEhwYXJhbXMgSW50ZXJ2YWwgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVEY9X2UoIltIcGFyYW1zXSBIcGFyYW1zIE1ldHJpYyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHB2PV9lKCJbSHBhcmFtc10gSHBhcmFtcyBGZXRjaCBTZXNzaW9uIEdyb3VwcyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxERj1fZSgiW0hwYXJhbXNdIERhc2hib2FyZCBIcGFyYW0gRmlsdGVyIEFkZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUY9X2UoIltIcGFyYW1zXSBEYXNoYm9hcmQgTWV0cmljIEZpbHRlciBBZGRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZ2PV9lKCJbSHBhcmFtc10gRGFzaGJvYXJkIEhwYXJhbSBGaWx0ZXIgUmVtb3ZlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG12PV9lKCJbSHBhcmFtc10gRGFzaGJvYXJkIE1ldHJpYyBGaWx0ZXIgUmVtb3ZlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pO2Z1bmN0aW9uIGZmKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeShbLi4ubl0uc29ydCgpKX1mdW5jdGlvbiBodihuKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIG4pZm9yKGxldFtvLHNdb2YgcilpZihzLnR5cGU9PT1nbi5ESVNDUkVURSl7bGV0e3Bvc3NpYmxlVmFsdWVzOmEsdmFsdWVzOmx9PWUuZ2V0KG8pfHx7cG9zc2libGVWYWx1ZXM6bmV3IFNldCx2YWx1ZXM6bmV3IFNldH07Zm9yKGxldCBjIG9mIHMuZmlsdGVyVmFsdWVzKWwuYWRkKGMpO2ZvcihsZXQgYyBvZiBzLnBvc3NpYmxlVmFsdWVzKWEuYWRkKGMpO2Uuc2V0KG8se3Bvc3NpYmxlVmFsdWVzOmEsdmFsdWVzOmx9KX1lbHNle2xldCBhPWkuZ2V0KG8pO2kuc2V0KG8se2ZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4ocy5maWx0ZXJMb3dlclZhbHVlLGE/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChzLmZpbHRlclVwcGVyVmFsdWUsYT8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCksbWluVmFsdWU6TWF0aC5taW4ocy5taW5WYWx1ZSxhPy5taW5WYWx1ZT8/MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChzLm1heFZhbHVlLGE/Lm1heFZhbHVlPz8tMS8wKX0pfWZvcihsZXRbcix7dmFsdWVzOm8scG9zc2libGVWYWx1ZXM6c31db2YgZSl0LnNldChyLHt0eXBlOmduLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6ITAscG9zc2libGVWYWx1ZXM6Wy4uLnNdLGZpbHRlclZhbHVlczpbLi4ub119KTtmb3IobGV0W3Ise21pblZhbHVlOm8sbWF4VmFsdWU6cyxmaWx0ZXJMb3dlclZhbHVlOmEsZmlsdGVyVXBwZXJWYWx1ZTpsfV1vZiBpKXtpZih0LmhhcyhyKSl7bGV0IGM9dC5nZXQocik7aWYoYy50eXBlPT09Z24uRElTQ1JFVEUmJmMucG9zc2libGVWYWx1ZXMuc29tZShkPT5kKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IGNvbWJpbmUgaHBhcmFtLCAke3J9LCBhcyBpdCBpcyBvZiBtaXhlZCB0eXBlcy5gKX10LnNldChyLHt0eXBlOmduLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6byxtYXhWYWx1ZTpzLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOmx9KX1yZXR1cm4gdH1mdW5jdGlvbiBQUyhuKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgZSBvZiBuKWZvcihsZXRbaSxyXW9mIGUpe2xldCBvPXQuZ2V0KGkpO3Quc2V0KGkse3R5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCwuLi5vLG1pblZhbHVlOk1hdGgubWluKHIubWluVmFsdWUsbz8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgoci5tYXhWYWx1ZSxvPy5tYXhWYWx1ZT8/LTEvMCksZmlsdGVyTG93ZXJWYWx1ZTpNYXRoLm1pbihyLmZpbHRlckxvd2VyVmFsdWUsbz8uZmlsdGVyTG93ZXJWYWx1ZT8/MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHIuZmlsdGVyVXBwZXJWYWx1ZSxvPy5maWx0ZXJVcHBlclZhbHVlPz8tMS8wKX0pfXJldHVybiB0fWZ1bmN0aW9uIEY2KG4pe3JldHVybiBuLmRvbWFpbi50eXBlPT09Z24uRElTQ1JFVEU/e3R5cGU6Z24uRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpuLmRvbWFpbi52YWx1ZXMsZmlsdGVyVmFsdWVzOm4uZG9tYWluLnZhbHVlc306e3R5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpuLmRvbWFpbi5taW5WYWx1ZSxtYXhWYWx1ZTpuLmRvbWFpbi5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOm4uZG9tYWluLm1pblZhbHVlLGZpbHRlclVwcGVyVmFsdWU6bi5kb21haW4ubWF4VmFsdWV9fXZhciBwZ2U9YnIoe3NwZWNzOnt9LGZpbHRlcnM6e30sZGFzaGJvYXJkU3BlY3M6e2hwYXJhbXM6W10sbWV0cmljczpbXX0sZGFzaGJvYXJkU2Vzc2lvbkdyb3VwczpbXSxkYXNoYm9hcmRGaWx0ZXJzOntocGFyYW1zOm5ldyBNYXAsbWV0cmljczpuZXcgTWFwfX0seWUoU0YsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkczplLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99PXQscz1mZihlKSxhPW4uZmlsdGVyc1tzXT8/e2hwYXJhbXM6bmV3IE1hcH0sbD1hLmhwYXJhbXMuZ2V0KGkpO2lmKGwmJmwudHlwZSE9PWduLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBOZXcgZGlzY3JldGUgZmlsdGVyIG9mICR7aX0gY29uZmxpY3RzIGV4aXN0aW5nIGZpbHRlciBvZiBgK2duW2wudHlwZV0pO2xldCBjPWh2KGUuZmlsdGVyKGY9PkJvb2xlYW4obi5zcGVjc1tmXSkpLm1hcChmPT5uLnNwZWNzW2ZdLmhwYXJhbS5kZWZhdWx0RmlsdGVycykpLmdldChpKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgaHBhcmFtLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYoYy50eXBlIT09Z24uRElTQ1JFVEUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgZGlzY3JldGUgdHlwZS5gKTtsZXQgZD1uZXcgU2V0KGMucG9zc2libGVWYWx1ZXMpLHU9Wy4uLnJdLmZpbHRlcihmPT4hZC5oYXMoZikpO2lmKHUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke3Uuam9pbigiLCAiKX1gKTtsZXQgcD1uZXcgTWFwKGEuaHBhcmFtcyk7cmV0dXJuIHAuc2V0KGksey4uLmwsdHlwZTpnbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOm8scG9zc2libGVWYWx1ZXM6Wy4uLmRdLGZpbHRlclZhbHVlczpyfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFtzXTp7Li4uYSxocGFyYW1zOnB9fX19KSx5ZShFRiwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDpzfT10LGE9ZmYoZSksbD1uLmZpbHRlcnNbYV0/P3ttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09Z24uSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArZ25bYy50eXBlXSk7bGV0IGQ9aHYoZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFkKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2lmKGQudHlwZSE9PWduLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7bGV0IHU9bmV3IE1hcChsLmhwYXJhbXMpO3JldHVybiB1LnNldChpLHsuLi5jLHR5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOmQubWluVmFsdWUsbWF4VmFsdWU6ZC5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxocGFyYW1zOnV9fX19KSx5ZShURiwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1mZihlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9UFMoZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBtZXRyaWMsICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtsZXQgZD1sLm1ldHJpY3MuZ2V0KGkpLHU9bmV3IE1hcChsLm1ldHJpY3MpO3JldHVybiB1LnNldChpLHsuLi5kLHR5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOmMubWluVmFsdWUsbWF4VmFsdWU6Yy5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxtZXRyaWNzOnV9fX19KSx5ZSh5dSwobix0KT0+e2lmKDA9PT1PYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnNwZWNzfSxpPW5ldyBNYXAscj1uZXcgU2V0O2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldCBzPW5ldyBNYXAsYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAse3J1bnM6ZCxtZXRhZGF0YTp1fT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtvXTtmb3IobGV0IHAgb2YgZCl7bGV0IGY9dS5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW3AuaWRdO2lmKGYpZm9yKGxldCBtIG9mIGYubWV0cmljcyl7bGV0IGI9aS5nZXQobS50YWcpO2kuc2V0KG0udGFnLHttaW46Yj9NYXRoLm1pbihiLm1pbixtLnZhbHVlKTptLnZhbHVlLG1heDpiP01hdGgubWF4KGIubWF4LG0udmFsdWUpOm0udmFsdWV9KX19Zm9yKGxldHtuYW1lOnAsZG9tYWluOmZ9b2YgdS5ocGFyYW1TcGVjcylpZihmLnR5cGU9PT1nbi5ESVNDUkVURSl7bGV0IG09bC5nZXQocCl8fG5ldyBTZXQ7Zm9yKGxldCBiIG9mIGYudmFsdWVzKW0uYWRkKGIpO2wuc2V0KHAsbSl9ZWxzZXtsZXQgbT1jLmdldChwKTtjLnNldChwLHttaW5WYWx1ZTptP01hdGgubWluKGYubWluVmFsdWUsbS5taW5WYWx1ZSk6Zi5taW5WYWx1ZSxtYXhWYWx1ZTptP01hdGgubWF4KGYubWF4VmFsdWUsbS5tYXhWYWx1ZSk6Zi5tYXhWYWx1ZX0pfWZvcihsZXQgcCBvZiB1Lm1ldHJpY1NwZWNzKXIuYWRkKHAudGFnKTtmb3IobGV0W3AsZl1vZiBsKXMuc2V0KHAse3R5cGU6Z24uRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpbLi4uZl0sZmlsdGVyVmFsdWVzOlsuLi5mXX0pO2ZvcihsZXRbcCx7bWluVmFsdWU6ZixtYXhWYWx1ZTptfV1vZiBjKXMuc2V0KHAse3R5cGU6Z24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpmLG1heFZhbHVlOm0sZmlsdGVyTG93ZXJWYWx1ZTpmLGZpbHRlclVwcGVyVmFsdWU6bX0pO2ZvcihsZXQgcCBvZiByKXtsZXQgZj1pLmdldChwKSxtPWY/Lm1pbj8/MCxiPWY/Lm1heD8/MDthLnNldChwLHt0eXBlOmduLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6bSxtYXhWYWx1ZTpiLGZpbHRlckxvd2VyVmFsdWU6bSxmaWx0ZXJVcHBlclZhbHVlOmJ9KX1lW29dPXtocGFyYW06ey4uLmVbb10/LmhwYXJhbSxzcGVjczp1LmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOnN9LG1ldHJpYzp7Li4uZVtvXT8ubWV0cmljLHNwZWNzOnUubWV0cmljU3BlY3MsZGVmYXVsdEZpbHRlcnM6YX19fXJldHVybnsuLi5uLHNwZWNzOmV9fSkseWUocHYsKG4sdCk9Pih7Li4ubixkYXNoYm9hcmRTcGVjczp0LmhwYXJhbXNBbmRNZXRyaWNzU3BlY3MsZGFzaGJvYXJkU2Vzc2lvbkdyb3Vwczp0LnNlc3Npb25Hcm91cHN9KSkseWUoREYsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uZGFzaGJvYXJkRmlsdGVycy5ocGFyYW1zKTtyZXR1cm4gZS5zZXQodC5uYW1lLHQuZmlsdGVyKSx7Li4ubixkYXNoYm9hcmRGaWx0ZXJzOnsuLi5uLmRhc2hib2FyZEZpbHRlcnMsaHBhcmFtczplfX19KSx5ZShJRiwobix0KT0+e2xldCBlPW5ldyBNYXAobi5kYXNoYm9hcmRGaWx0ZXJzLm1ldHJpY3MpO3JldHVybiBlLnNldCh0Lm5hbWUsdC5maWx0ZXIpLHsuLi5uLGRhc2hib2FyZEZpbHRlcnM6ey4uLm4uZGFzaGJvYXJkRmlsdGVycyxtZXRyaWNzOmV9fX0pLHllKGZ2LChuLHQpPT57bGV0IGU9bmV3IE1hcChuLmRhc2hib2FyZEZpbHRlcnMuaHBhcmFtcyk7cmV0dXJuIGUuZGVsZXRlKHQubmFtZSksey4uLm4sZGFzaGJvYXJkRmlsdGVyczp7Li4ubi5kYXNoYm9hcmRGaWx0ZXJzLGhwYXJhbXM6ZX19fSkseWUobXYsKG4sdCk9PntsZXQgZT1uZXcgTWFwKG4uZGFzaGJvYXJkRmlsdGVycy5tZXRyaWNzKTtyZXR1cm4gZS5kZWxldGUodC5uYW1lKSx7Li4ubixkYXNoYm9hcmRGaWx0ZXJzOnsuLi5uLmRhc2hib2FyZEZpbHRlcnMsbWV0cmljczplfX19KSk7ZnVuY3Rpb24gTjYobix0KXtyZXR1cm4gcGdlKG4sdCl9dmFyIE9TPSJocGFyYW1zIixMNj0iZGF0YS9wbHVnaW4vaHBhcmFtcyI7ZnVuY3Rpb24gaGdlKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihuLmRvbWFpbkRpc2NyZXRlKX0obik/e3R5cGU6Z24uRElTQ1JFVEUsdmFsdWVzOm4uZG9tYWluRGlzY3JldGV9OmZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKG4uZG9tYWluSW50ZXJ2YWwpfShuKT97Li4ubi5kb21haW5JbnRlcnZhbCx0eXBlOmduLklOVEVSVkFMfTp7dmFsdWVzOltdLHR5cGU6Z24uRElTQ1JFVEV9fXZhciBrUz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lfWdldFByZWZpeChlKXtyZXR1cm4gZS5sZW5ndGg+MT8iY29tcGFyZSI6ImV4cGVyaW1lbnQifWZvcm1hdEV4cGVyaW1lbnRJZHMoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aD9lWzBdOmUubWFwKChpLHIpPT5gJHtyfToke2l9YCkuam9pbigiLCIpfWZldGNoRXhwZXJpbWVudEluZm8oZSl7bGV0IGk9dGhpcy5mb3JtYXRFeHBlcmltZW50SWRzKGUpO3JldHVybiB0aGlzLmh0dHAucG9zdChgLyR7dGhpcy5nZXRQcmVmaXgoZSl9LyR7aX0vJHtMNn0vZXhwZXJpbWVudGAse2V4cGVyaW1lbnROYW1lOml9LHt9LCJyZXF1ZXN0IikucGlwZShOKHI9Pih7aHBhcmFtczpyLmhwYXJhbUluZm9zLm1hcChvPT57bGV0IHM9ey4uLm8sZG9tYWluOmhnZShvKX07cmV0dXJuIGRlbGV0ZSBzLmRvbWFpbkludGVydmFsLGRlbGV0ZSBzLmRvbWFpbkRpc2NyZXRlLHN9KSxtZXRyaWNzOnIubWV0cmljSW5mb3MubWFwKG89Pih7Li4ubyx0YWc6by5uYW1lLnRhZ30pKX0pKSl9ZmV0Y2hTZXNzaW9uR3JvdXBzKGUsaSl7bGV0IHI9dGhpcy5mb3JtYXRFeHBlcmltZW50SWRzKGUpLG89W107Zm9yKGxldCBhIG9mIGkuaHBhcmFtcylvLnB1c2goe2hwYXJhbTphLm5hbWV9KTtmb3IobGV0IGEgb2YgaS5tZXRyaWNzKW8ucHVzaCh7bWV0cmljOmEubmFtZX0pO2xldCBzPXtleHBlcmltZW50TmFtZTpyLGFsbG93ZWRTdGF0dXNlczpbTnMuU1RBVFVTX0ZBSUxVUkUsTnMuU1RBVFVTX1JVTk5JTkcsTnMuU1RBVFVTX1NVQ0NFU1MsTnMuU1RBVFVTX1VOS05PV05dLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6MCxzbGljZVNpemU6MWU2fTtyZXR1cm4gdGhpcy5odHRwLnBvc3QoYC8ke3RoaXMuZ2V0UHJlZml4KGUpfS8ke3J9LyR7TDZ9L3Nlc3Npb25fZ3JvdXBzYCxzLHt9LCJyZXF1ZXN0IikucGlwZShOKGE9PmEuc2Vzc2lvbkdyb3Vwcy5tYXAobD0+KGwuc2Vzc2lvbnM9bC5zZXNzaW9ucy5tYXAoYz0+e2lmKGUubGVuZ3RoPjEpe2xldFssLi4uZF09Yy5uYW1lLnNwbGl0KCIgIiksW3UsLi4ucF09ZC5qb2luKCIgIikuc3BsaXQoIi8iKTtjLm5hbWU9W2VbcGFyc2VJbnQodSldLC4uLnBdLmpvaW4oIi8iKX1lbHNlIGMubmFtZT1bZVswXSxjLm5hbWVdLmpvaW4oIi8iKTtyZXR1cm4gY30pLGwpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFVhKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQjY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLnJ1blRhYmxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShlaShWaCksTigoe2V4cGVyaW1lbnRJZHM6b30pPT5vKSxZbigobyxzKT0+by5qb2luKCIiKT09PXMuam9pbigiIikpKSx0aGlzLm5hdmlnYXRlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFBzKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikpLGtlKChbLG9dKT0+Qm9vbGVhbihvKSksTigoWyxvXSk9Pm8pLFluKChvLHMpPT5vLmpvaW4oIiIpPT09cy5qb2luKCIiKSkpLHRoaXMubG9hZEhwYXJhbXNPblJlbG9hZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKGNzLEZzKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikpLGtlKChbLG9dKT0+Qm9vbGVhbihvKSksTigoWyxvXSk9Pm8pKSx0aGlzLmxvYWRIcGFyYW1zRGF0YSQ9YXIoKCk9PnRuKHRoaXMubmF2aWdhdGVkJCx0aGlzLnJ1blRhYmxlU2hvd24kLHRoaXMubG9hZEhwYXJhbXNPblJlbG9hZCQpLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QobWQpLHRoaXMuc3RvcmUuc2VsZWN0KE5vKSksa2UoKFssb10pPT5vKSxrZSgoWywsb10pPT5vPy5yb3V0ZUtpbmQ9PT13bi5FWFBFUklNRU5UfHxvPy5yb3V0ZUtpbmQ9PT13bi5DT01QQVJFX0VYUEVSSU1FTlQpLGFjKDEwKSxKbigoW29dKT0+dGhpcy5sb2FkSHBhcmFtc0ZvckV4cGVyaW1lbnRzKG8pKSxOKG89PnB2KG8pKSkpfWxvYWRIcGFyYW1zRm9yRXhwZXJpbWVudHMoZSl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4cGVyaW1lbnRJbmZvKGUpLnBpcGUoSm4oaT0+dGhpcy5kYXRhU291cmNlLmZldGNoU2Vzc2lvbkdyb3VwcyhlLGkpLnBpcGUoenIocj0+ciBpbnN0YW5jZW9mIEFsJiY0MDA9PT1yLnN0YXR1cz9IdChbXSk6ZWEoKCk9PnIpKSxOKHI9Pih7aHBhcmFtc0FuZE1ldHJpY3NTcGVjczppLHNlc3Npb25Hcm91cHM6cn0pKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh4byksayhBZSksayhrUykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFY2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2tTXSxpbXBvcnRzOltUci5mb3JGZWF0dXJlKE9TLE42KSx0by5mb3JGZWF0dXJlKFtCNl0pXX0pLG59KSgpLEZTPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltWNl19KSxufSkoKSxINj0iZGF0YS9wbHVnaW4vaHBhcmFtcyI7ZnVuY3Rpb24gX2dlKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gYmdlKG4pe2xldCB0O3JldHVybiB0PWZ1bmN0aW9uKG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpfShuKT97dHlwZTpnbi5ESVNDUkVURSx2YWx1ZXM6bi5kb21haW5EaXNjcmV0ZX06ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkludGVydmFsIil9KG4pP3suLi5uLmRvbWFpbkludGVydmFsLHR5cGU6Z24uSU5URVJWQUx9Ont0eXBlOmduLklOVEVSVkFMLG1pblZhbHVlOi0xLzAsbWF4VmFsdWU6MS8wfSx7ZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixkaXNwbGF5TmFtZTpuLmRpc3BsYXlOYW1lLG5hbWU6bi5uYW1lLHR5cGU6bi50eXBlLGRvbWFpbjp0fX1mdW5jdGlvbiB2Z2Uobil7cmV0dXJuey4uLm4sdGFnOm4ubmFtZS50YWd9fXZhciB6Nj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lfWZldGNoUnVucyhlKXtyZXR1cm4gdGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtlfS9kYXRhL3J1bnNgKS5waXBlKE4oaT0+aS5tYXAocj0+KHtpZDpfZ2UocixlKSxuYW1lOnIsc3RhcnRUaW1lOjB9KSkpKX1mZXRjaEhwYXJhbXNNZXRhZGF0YShlKXtyZXR1cm4gdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHtINn0vZXhwZXJpbWVudGAse2V4cGVyaW1lbnROYW1lOmV9LHt9LCJyZXF1ZXN0IikucGlwZShOKHI9PntsZXQgbz1bXTtmb3IobGV0IGEgb2Ygci5ocGFyYW1JbmZvcylvLnB1c2goe2hwYXJhbTphLm5hbWV9KTtmb3IobGV0IGEgb2Ygci5tZXRyaWNJbmZvcylvLnB1c2goe21ldHJpYzphLm5hbWV9KTtyZXR1cm57ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsbGlzdFNlc3Npb25SZXF1ZXN0UGFyYW1zOntleHBlcmltZW50TmFtZTplLGFsbG93ZWRTdGF0dXNlczpbTnMuU1RBVFVTX0ZBSUxVUkUsTnMuU1RBVFVTX1JVTk5JTkcsTnMuU1RBVFVTX1NVQ0NFU1MsTnMuU1RBVFVTX1VOS05PV05dLGNvbFBhcmFtczpvLHN0YXJ0SW5kZXg6MCxzbGljZVNpemU6MWU2fX19KSxobigoe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLGxpc3RTZXNzaW9uUmVxdWVzdFBhcmFtczpvfSk9PnRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2V9LyR7SDZ9L3Nlc3Npb25fZ3JvdXBzYCxvLHt9LCJyZXF1ZXN0IikucGlwZShOKHM9Pih7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsc2Vzc2lvbkdyb3Vwc0xpc3Q6c30pKSkpLE4oKHtleHBlcmltZW50SHBhcmFtc0luZm86cixzZXNzaW9uR3JvdXBzTGlzdDpvfSk9PntsZXQgcz17fTtmb3IobGV0IGEgb2Ygby5zZXNzaW9uR3JvdXBzKXtsZXQgbD1PYmplY3QuZW50cmllcyhhLmhwYXJhbXMpLm1hcChjPT57bGV0W2QsdV09YztyZXR1cm57bmFtZTpkLHZhbHVlOnV9fSk7Zm9yKGxldCBjIG9mIGEuc2Vzc2lvbnMpZm9yKGxldCBkIG9mIGMubWV0cmljVmFsdWVzKXtsZXQgcD1gJHtlfS8ke2QubmFtZS5ncm91cD9gJHtjLm5hbWV9LyR7ZC5uYW1lLmdyb3VwfWA6Yy5uYW1lfWAsZj1zW3BdfHx7bWV0cmljczpbXSxocGFyYW1zOmx9O2YubWV0cmljcy5wdXNoKHt0YWc6ZC5uYW1lLnRhZyx0cmFpbmluZ1N0ZXA6ZC50cmFpbmluZ1N0ZXAsdmFsdWU6ZC52YWx1ZX0pLHNbcF09Zn19cmV0dXJue2hwYXJhbVNwZWNzOnIuaHBhcmFtSW5mb3MubWFwKGJnZSksbWV0cmljU3BlY3M6ci5tZXRyaWNJbmZvcy5tYXAodmdlKSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnN9fSksenIocj0+ciBpbnN0YW5jZW9mIEFsJiY0MDA9PT1yLnN0YXR1cz9IdCh7aHBhcmFtU3BlY3M6W10sbWV0cmljU3BlY3M6W10scnVuVG9IcGFyYW1zQW5kTWV0cmljczp7fX0pOmVhKHIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVWEpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVNj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpSUyx1c2VDbGFzczp6Nn1dfSksbn0pKCksajY9cShFcigiYWxlcnRzIiksbj0+bi5sYXRlc3RBbGVydCksTFM9ImV4cGVyaW1lbnRzIixHNj1xKEVyKExTKSxuPT5uLmRhdGEpLEJTPXEoRzYsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkOmV9PXQ7cmV0dXJuIG4uZXhwZXJpbWVudE1hcFtlXXx8bnVsbH0pLFc2PXEoRzYsbHIsKG4sdCk9Pih0Pz9bXSkubWFwKGU9Pm4uZXhwZXJpbWVudE1hcFtlXSkuZmlsdGVyKEJvb2xlYW4pLnJlZHVjZSgoZSxpKT0+KGVbaS5pZF09aS5uYW1lLGUpLHt9KSk7ZnVuY3Rpb24gVlMobix0LGUpe3JldHVybiBuPHQ/dDpuPmU/ZTpufWZ1bmN0aW9uIFVoKG4sdCxlKXtsZXQgaT1WUyhuLnN0YXJ0LnN0ZXAsdCxlKSxyPW4uZW5kP1ZTKG4uZW5kLnN0ZXAsdCxlKTpudWxsO3JldHVybntzdGFydFN0ZXA6aSxlbmRTdGVwOnIsY2xpcHBlZDppIT09bi5zdGFydC5zdGVwfHxyIT09KG4uZW5kPy5zdGVwPz9udWxsKX19ZnVuY3Rpb24gSFMobix0KXtsZXQgZT10W24uaWRdO3JldHVybiBlJiZlLnZpc2libGUmJiFCb29sZWFuKGUuYXV4KX1mdW5jdGlvbiBBRihuLHQpe3JldHVybiB0P246e3N0YXJ0Om4uc3RhcnQsZW5kOm51bGx9fWZ1bmN0aW9uIFJGKG4sdCxlKXtyZXR1cm4gQUYoZnVuY3Rpb24obix7bWluU3RlcDp0LG1heFN0ZXA6ZX0pe3JldHVybntzdGFydDp7c3RlcDpWUyhuLnN0YXJ0LnN0ZXAsdCxlKX0sZW5kOm4uZW5kP3tzdGVwOlZTKG4uZW5kLnN0ZXAsdCxlKX06bnVsbH19KG4sdCksZSl9dmFyIHpuPSgoKT0+e3JldHVybihuPXpufHwoem49e30pKS5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMiLHpuO3ZhciBufSkoKSxQaT0oKCk9PntyZXR1cm4obj1QaXx8KFBpPXt9KSkuU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSIsUGk7dmFyIG59KSgpLGd2PSJ0aW1lc2VyaWVzIjtmdW5jdGlvbiBaNihuKXtyZXR1cm4gbj09PXpuLlNDQUxBUlN8fG49PT16bi5ISVNUT0dSQU1TfHxuPT09em4uSU1BR0VTfXZhciB3Z2U9W3puLklNQUdFU107ZnVuY3Rpb24gdWEobil7cmV0dXJuIHdnZS5pbmNsdWRlcyhuKX12YXIgU2dlPVt6bi5ISVNUT0dSQU1TLHpuLklNQUdFU107ZnVuY3Rpb24gcGEobil7cmV0dXJuIFNnZS5pbmNsdWRlcyhuKX1mdW5jdGlvbiBQRihuKXtyZXR1cm4gcGEobi5wbHVnaW4pfXZhciBUYz1jbGFzc3t9O2Z1bmN0aW9uIFVTKG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJlcnJvciIpfXZhciBPRj0iZGF0YS9wbHVnaW4vdGltZXNlcmllcyI7ZnVuY3Rpb24gSzYobil7bGV0IHQ9bi5pbmRleE9mKCIvIik7cmV0dXJue3J1bjpuLnN1YnN0cmluZyh0KzEpLGV4cGVyaW1lbnRJZDpuLnN1YnN0cmluZygwLHQpfX1mdW5jdGlvbiAkNihuLHQpe3JldHVybmAke3R9LyR7bn1gfWZ1bmN0aW9uIEo2KG4sdCl7bGV0e3J1blRvU2VyaWVzOmUscnVuOmksLi4ucn09bixvPXsuLi5yfTtyZXR1cm4gZSYmKG8ucnVuVG9TZXJpZXM9a0YoZSx0KSksaSYmKG8ucnVuSWQ9JDYoaSx0KSksb31mdW5jdGlvbiBrRihuLHQpe2xldCBlPXt9O2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJihlWyQ2KGksdCldPW5baV0pO3JldHVybiBlfXZhciBlVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5odHRwPWUsdGhpcy5zdG9yZT1pfWZldGNoVGFnTWV0YWRhdGEoZSl7bGV0IGk9ZS5tYXAobz0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtvfS8ke09GfS90YWdzYCkucGlwZShOKGE9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcj1pO2lmKHVhKHIpKXtsZXR7dGFnUnVuU2FtcGxlZEluZm86bywuLi5zfT1uW3JdLGE9e307Zm9yKGxldCBsIGluIG8pby5oYXNPd25Qcm9wZXJ0eShsKSYmKGFbbF09a0Yob1tsXSx0KSk7ZVtyXT17Li4ucyx0YWdSdW5TYW1wbGVkSW5mbzphfX1lbHNle2xldHtydW5UYWdJbmZvOm8sLi4uc309bltyXTtlW3JdPXsuLi5zLHJ1blRhZ0luZm86a0Yobyx0KX19fXJldHVybiBlfShhLG8pKSkpLHI9dGhpcy5zdG9yZS5zZWxlY3QodnUpLnBpcGUoa2UoQm9vbGVhbiksWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoY1MpKSxOKChbLG9dKT0+bykpO3JldHVybiBjbyhpKS5waXBlKEJ0KHIpLE4oKFtvLHNdKT0+e2xldCBhPWZ1bmN0aW9uKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuKWZvcihsZXQgaSBvZiBPYmplY3QudmFsdWVzKHpuKSlpZih1YShpKSl7dFtpXT10W2ldfHx7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIsdGFnUnVuU2FtcGxlZEluZm86b309ZVtpXTt0W2ldLnRhZ0Rlc2NyaXB0aW9ucz17Li4udFtpXS50YWdEZXNjcmlwdGlvbnMsLi4ucn07bGV0IHM9dFtpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMobykpe3NbYV09c1thXXx8e307Zm9yKGxldCBsIG9mIE9iamVjdC5rZXlzKG9bYV0pKXNbYV1bbF09b1thXVtsXX19ZWxzZXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30scnVuVGFnSW5mbzp7fX07bGV0e3RhZ0Rlc2NyaXB0aW9uczpyLHJ1blRhZ0luZm86b309ZVtpXTt0W2ldLnRhZ0Rlc2NyaXB0aW9ucz17Li4udFtpXS50YWdEZXNjcmlwdGlvbnMsLi4ucn0sdFtpXS5ydW5UYWdJbmZvPXsuLi50W2ldLnJ1blRhZ0luZm8sLi4ub319cmV0dXJuIHR9KG8pO3JldHVybiBzfHwoYVt6bi5JTUFHRVNdPXt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319KSxhfSkpfWZldGNoVGltZVNlcmllcyhlKXtsZXQgaT1lLm1hcChyPT57aWYocGEoci5wbHVnaW4pKXtsZXR7cnVuSWQ6bCwuLi5jfT1yLHtydW46ZCxleHBlcmltZW50SWQ6dX09SzYobCkscD17Li4uYyxydW46ZH07cmV0dXJuIHRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocCx1KS5waXBlKE4oKHtyZXNwb25zZTpmLGV4cGVyaW1lbnRJZDptfSk9Pko2KGYsbSkpKX1sZXR7ZXhwZXJpbWVudElkczpvLC4uLnN9PXI7cmV0dXJuIGNvKG8ubWFwKGw9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QocyxsKSkpLnBpcGUoTihsPT57bGV0e3J1blRvU2VyaWVzOmMsZXJyb3I6ZCwuLi51fT1sWzBdLnJlc3BvbnNlLHA9dTtmb3IobGV0e3Jlc3BvbnNlOmYsZXhwZXJpbWVudElkOm19b2YgbCl7bGV0IGI9SjYoZixtKTtpZihwLmVycm9yKWNvbnRpbnVlO2xldHtydW5Ub1NlcmllczpNLGVycm9yOnl9PWI7aWYoeSlwLmVycm9yPXkscC5ydW5Ub1Nlcmllcz12b2lkIDA7ZWxzZXtwLnJ1blRvU2VyaWVzPXAucnVuVG9TZXJpZXN8fHt9O2ZvcihsZXQgeCBvZiBPYmplY3Qua2V5cyhNKSlwLnJ1blRvU2VyaWVzW3hdPU1beF19fXJldHVybiBwfSkpfSk7cmV0dXJuIGNvKGkpfWZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KGUsaSl7bGV0IHI9bmV3IEZvcm1EYXRhO3JldHVybiByLmFwcGVuZCgicmVxdWVzdHMiLEpTT04uc3RyaW5naWZ5KFtlXSkpLHRoaXMuaHR0cC5wb3N0KGAvZXhwZXJpbWVudC8ke2l9LyR7T0Z9L3RpbWVTZXJpZXNgLHIpLnBpcGUoTihvPT4oe3Jlc3BvbnNlOm9bMF0sZXhwZXJpbWVudElkOml9KSkpfWltYWdlVXJsKGUpe3JldHVybmAke09GfS9pbWFnZURhdGE/aW1hZ2VJZD0ke2V9YH1kb3dubG9hZFVybChlLGkscixvKXtsZXQgbCx7cnVuOnMsZXhwZXJpbWVudElkOmF9PUs2KHIpO2lmKGUhPT16bi5TQ0FMQVJTKXRocm93IG5ldyBFcnJvcihgTm90IGltcGxlbWVudGVkOiBkb3dubG9hZFVybCBmb3IgJHtlfSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0YCk7aWYobD0ic2NhbGFycy9zY2FsYXJzIiwhYSl0aHJvdyBuZXcgRXJyb3IoImV4cGVyaW1lbnRJZCBpcyBlbXB0eTsgaXQgaXMgcmVxdWlyZWQgdG8gZm9ybSBkb3dubG9hZFVybC4iKTtyZXR1cm5gL2V4cGVyaW1lbnQvJHthfS9kYXRhL3BsdWdpbi9zY2FsYXJzL3NjYWxhcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6aSxydW46cyxmb3JtYXQ6b30pfWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoVWEpLGsoQWUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJZ2U9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxqUz0oKCk9PntjbGFzcyBue2dldFBhcmFtcygpe3JldHVybiBJZ2V9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF92PSJ0Yl9mZWF0dXJlX2ZsYWdfc3RvcmFnZV9rZXkiLEZGPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5xdWVyeVBhcmFtcz1lfWdldEZlYXR1cmVzKGUsaSl7bGV0IHI9ZT90aGlzLmdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCk6e30sbz1mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGUsW2kscl0pPT57bGV0IG89ZnVuY3Rpb24obix0KXtsZXQgZT1uLnF1ZXJ5UGFyYW1PdmVycmlkZTtpZighZXx8IXQuaGFzKGUpKXJldHVybiBudWxsO2xldCBpPXQuZ2V0KGUpO3JldHVybiBudWxsPT1pP251bGw6bi5wYXJzZVZhbHVlKGkpfShyLHQpO3JldHVybiBudWxsIT09byYmKGVbaV09byksZX0se30pfShpLHRoaXMucXVlcnlQYXJhbXMuZ2V0UGFyYW1zKCkpO3JldHVybnsuLi5yLC4uLk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSkuZmlsdGVyKChbYV0pPT5pW2FdKSksLi4ub319cGVyc2lzdEZlYXR1cmVGbGFncyhlKXtsZXQgcj17Li4udGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCksLi4uZX07d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKF92LEpTT04uc3RyaW5naWZ5KHIpKX1yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKGUpe2xldCBpPXRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpO2lmKG51bGwhPWlbZV0pe2lmKGRlbGV0ZSBpW2VdLDA9PT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpcmV0dXJuIHZvaWQgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKF92KTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oX3YsSlNPTi5zdHJpbmdpZnkoaSkpfX1yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpe3dpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShfdil9Z2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShfdik7cmV0dXJuIG51bGw9PWU/e306SlNPTi5wYXJzZShlKX1nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpe2xldCBlPXt9O3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMmJihlLmRlZmF1bHRFbmFibGVEYXJrTW9kZT0hMCksZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhqUykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEdTPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGlXPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0ZGLGpTLHtwcm92aWRlOkdTLHVzZUNsYXNzOkZGfV19KSxufSkoKSxidj1fZSgiW0ZFQVRVUkUgRkxBR10gUGFydGlhbCBGZWF0dXJlIEZsYWdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFdTPV9lKCJbRkVBVFVSRSBGTEFHXSBFbmFibGUgRGFyayBNb2RlIE92ZXJyaWRlIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtZj1fZSgiW0ZFQVRVUkUgRkxBR10gU3RvcmUgdGhlIGZlYXR1cmUgZmxhZ3MgaW4gcGVyc2lzdGVudCBsb2NhbFN0b3JhZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx4dT1fZSgiW0ZFQVRVUkUgRkxBR10gUmVzZXQgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGpoPV9lKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBhbGwgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIpLHJXPV9lKCJbRkVBVFVSRSBGTEFHXSBFZmZlY3RzIEluaXQiKSxvVz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMudGZGZWF0dXJlRmxhZ3M9e3JlZjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1mZWF0dXJlLWZsYWdzIikudGZfZmVhdHVyZV9mbGFnc30sdGhpcy5nZXRGZWF0dXJlRmxhZ3MkPWFyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoZWkoclcpLExpKHRoaXMuc3RvcmUuc2VsZWN0KGg2KSx0aGlzLnN0b3JlLnNlbGVjdChjZikpLE4oKFssbyxzXSk9PntsZXQgYT10aGlzLmRhdGFTb3VyY2UuZ2V0RmVhdHVyZXMobyxzKTtyZXR1cm4gYnYoe2ZlYXR1cmVzOmF9KX0pKSksdGhpcy51cGRhdGVQb2x5bWVyRmVhdHVyZUZsYWdzJD1hcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGVpKGJ2KSxCdCh0aGlzLnN0b3JlLnNlbGVjdChrcyksdGhpcy5zdG9yZS5zZWxlY3QoUGgpKSxOdCgoWyxvLHNdKT0+e3RoaXMudGZGZWF0dXJlRmxhZ3MucmVmLnNldEZlYXR1cmVGbGFncyhvLHMpfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuc3RvcmVGZWF0dXJlRmxhZyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShlaShtZiksTnQoKHtmbGFnczpvfSk9Pnt0aGlzLmRhdGFTb3VyY2UucGVyc2lzdEZlYXR1cmVGbGFncyhvKX0pKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLnJlc2V0RmVhdHVyZUZsYWdPdmVycmlkZXMkPWFyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoZWkoeHUpLE50KCh7ZmxhZ3M6b30pPT57by5mb3JFYWNoKHM9Pnt0aGlzLmRhdGFTb3VyY2UucmVzZXRQZXJzaXN0ZWRGZWF0dXJlRmxhZyhzKX0pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRBbGxGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShlaShqaCksTnQoKCk9Pnt0aGlzLmRhdGFTb3VyY2UucmVzZXRBbGxQZXJzaXN0ZWRGZWF0dXJlRmxhZ3MoKX0pKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiByVygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKEdTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbFc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9aW50ZXJjZXB0KGUsaSl7cmV0dXJuIHRoaXMuc3RvcmUucGlwZSh1bihQaCksZnVuY3Rpb24obix0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBpPT5pLnBpcGUobj9rZSgocixvKT0+bihyLG8saSkpOmlzLFl0KDEpLGU/ZnVuY3Rpb24obil7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoVnQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT57aXx8ZS5uZXh0KG4pLGUuY29tcGxldGUoKX0pKX0pfSh0KTpLNCgoKT0+bmV3IE9tKSl9KCksSm4ocj0+KGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KCJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiLEpTT04uc3RyaW5naWZ5KHIpKX0pLGkuaGFuZGxlKGUpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEFlKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gR2gobil7cmV0dXJuImZhbHNlIiE9PW59dmFyIG4sTkY9e3NjYWxhcnNCYXRjaFNpemU6e2RlZmF1bHRWYWx1ZTp2b2lkIDAscXVlcnlQYXJhbU92ZXJyaWRlOiJzY2FsYXJzQmF0Y2hTaXplIixwYXJzZVZhbHVlOnBhcnNlSW50fSxlbmFibGVkRXhwZXJpbWVudGFsUGx1Z2luczp7ZGVmYXVsdFZhbHVlOltdLHF1ZXJ5UGFyYW1PdmVycmlkZToiZXhwZXJpbWVudGFsUGx1Z2luIixwYXJzZVZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiBuP24uc3BsaXQoIiwiKTpbXX19LGZvcmNlU3ZnOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJmb3JjZVNWRyIscGFyc2VWYWx1ZTpHaH0sZW5hYmxlRGFya01vZGVPdmVycmlkZTp7ZGVmYXVsdFZhbHVlOm51bGwscXVlcnlQYXJhbU92ZXJyaWRlOm51bGx9LGRlZmF1bHRFbmFibGVEYXJrTW9kZTp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZGFya01vZGUiLHBhcnNlVmFsdWU6R2h9LGlzQXV0b0RhcmtNb2RlQWxsb3dlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxpbkNvbGFiOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJ0ZW5zb3Jib2FyZENvbGFiIixwYXJzZVZhbHVlOkdofSxtZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxzaG93RmxhZ3M6e2RlZmF1bHRWYWx1ZTp2b2lkIDAscXVlcnlQYXJhbU92ZXJyaWRlOiJzaG93RmxhZ3MiLHBhcnNlVmFsdWU6bj0+bn0sZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiIscGFyc2VWYWx1ZTpHaH0sZW5hYmxlSHBhcmFtc0luVGltZVNlcmllczp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlSHBhcmFtc0luVGltZVNlcmllcyIscGFyc2VWYWx1ZTpHaH0sZW5hYmxlU3VnZ2VzdGVkQ2FyZHM6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVN1Z2dlc3RlZENhcmRzIixwYXJzZVZhbHVlOkdofX0sTEY9e2lzRmVhdHVyZUZsYWdzTG9hZGVkOiExLGRlZmF1bHRGbGFnczoobj1ORixPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHQsW2UsaV0pPT4odFtlXT1pLmRlZmF1bHRWYWx1ZSx0KSx7fSkpLG1ldGFkYXRhOk5GLGZsYWdPdmVycmlkZXM6e319LEJGPW5ldyBpZSgiW0ZlYXR1cmUgRmxhZ10gU3RvcmUgQ29uZmlnIik7ZnVuY3Rpb24gZFcoKXtyZXR1cm57aW5pdGlhbFN0YXRlOkxGfX12YXIgTmdlPWJyKExGLHllKGJ2LChuLHtmZWF0dXJlczp0fSk9Pih7Li4ubixpc0ZlYXR1cmVGbGFnc0xvYWRlZDohMCxmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsLi4udH19KSkseWUoV1MsKG4se2VuYWJsZURhcmtNb2RlOnR9KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOnR9fSkpLHllKG1mLChuLHQpPT4oey4uLm4sZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnQuZmxhZ3N9fSkpLHllKHh1LChuLHQpPT57aWYoIXR8fCF0LmZsYWdzfHwhdC5mbGFncy5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uZmxhZ092ZXJyaWRlc307cmV0dXJuIHQuZmxhZ3MuZm9yRWFjaChpPT57ZGVsZXRlIGVbaV19KSx7Li4ubixmbGFnT3ZlcnJpZGVzOmV9fSkseWUoamgsbj0+KHsuLi5uLGZsYWdPdmVycmlkZXM6e319KSkseWUoSWwsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntpZighdC50aGVtZU92ZXJyaWRlKXJldHVybiBuO2xldCBlO3N3aXRjaCh0LnRoZW1lT3ZlcnJpZGUpe2Nhc2UgT3MuQlJPV1NFUl9ERUZBVUxUOmU9bnVsbDticmVhaztjYXNlIE9zLkRBUks6ZT0hMDticmVhaztjYXNlIE9zLkxJR0hUOmU9ITF9cmV0dXJuey4uLm4sZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6ZX19fSkpO2Z1bmN0aW9uIHVXKG4sdCl7cmV0dXJuIE5nZShuLHQpfWZ1bmN0aW9uIExnZSgpe3JldHVybiBxKGxTLG49Pm51bGw9PT1uP3t0aGVtZU92ZXJyaWRlOk9zLkJST1dTRVJfREVGQVVMVH06e3RoZW1lT3ZlcnJpZGU6bj9Pcy5EQVJLOk9zLkxJR0hUfSl9dmFyIFdoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOkJGLHVzZUZhY3Rvcnk6ZFd9LHtwcm92aWRlOmJGLHVzZUNsYXNzOmxXLG11bHRpOiEwfV0saW1wb3J0czpbaVcsVHIuZm9yRmVhdHVyZShhUyx1VyxCRiksdG8uZm9yRmVhdHVyZShbb1ddKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKExnZSldfSksbn0pKCkscVM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VGMsdXNlQ2xhc3M6ZVd9XSxpbXBvcnRzOltXaCxPaF19KSxufSkoKSxvbz0oKCk9PihmdW5jdGlvbihuKXtuLkRFRkFVTFQ9ImRlZmF1bHQiLG4uQUxQSEFCRVRJQ0FMPSJhbHBoYWJldGljYWwiLG4uQVNDRU5ESU5HPSJhc2NlbmRpbmciLG4uREVTQ0VORElORz0iZGVzY2VuZGluZyIsbi5ORUFSRVNUPSJuZWFyZXN0IixuLk5FQVJFU1RfWT0ibmVhcmVzdF9ZIn0ob298fChvbz17fSkpLG9vKSkoKSxZUz0ibWV0cmljcyIsTHM9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5PVkVSUklERV9BU19FTkFCTEVEPTFdPSJPVkVSUklERV9BU19FTkFCTEVEIixuW24uT1ZFUlJJREVfQVNfRElTQUJMRUQ9Ml09Ik9WRVJSSURFX0FTX0RJU0FCTEVEIn0oTHN8fChMcz17fSkpLExzKSkoKSxYUz17Y2FyZE1pbldpZHRoOm51bGwsdG9vbHRpcFNvcnQ6b28uQUxQSEFCRVRJQ0FMLGlnbm9yZU91dGxpZXJzOiEwLHhBeGlzVHlwZTpQaS5TVEVQLGhpZGVFbXB0eUNhcmRzOiEwLHNjYWxhclNtb290aGluZzouNixzY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYOiExLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6MWUzLGltYWdlQ29udHJhc3RJbk1pbGxpOjFlMyxpbWFnZVNob3dBY3R1YWxTaXplOiExLGhpc3RvZ3JhbU1vZGU6RHIuT0ZGU0VUfSxCZ2U9LjE7ZnVuY3Rpb24gZ2Qobix0LGUsaSl7cmV0dXJuIG5bdF0uaGFzT3duUHJvcGVydHkoZSk/dWEodCk/blt0XVtlXS5oYXNPd25Qcm9wZXJ0eShpKT9uW3RdW2VdW2ldOm51bGw6blt0XVtlXTpudWxsfWZ1bmN0aW9uIFFTKG4sdCxlLGkpe2lmKHVhKHQpKXtsZXQgcz17Li4ublt0XX0sYT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5oYXNPd25Qcm9wZXJ0eSh0KT97Li4ublt0XX06e30sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn0ocyxlLGkpO3JldHVybiBzW2VdPWEsc31sZXQgcj17Li4ublt0XX0sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn1mdW5jdGlvbiBWRihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9ZnVuY3Rpb24gWlMobix0LGUpe2xldCBpPXsuLi5lfTtmb3IobGV0IHIgb2YgdClpW3JdPW47cmV0dXJuIGl9ZnVuY3Rpb24gcWgobix0LGUsaSl7aWYodWEodCkpe2xldCBvPW5bdF0udGFnUnVuU2FtcGxlZEluZm87cmV0dXJuIG8uaGFzT3duUHJvcGVydHkoZSk/T2JqZWN0LmtleXMob1tlXSkuZmlsdGVyKGE9Pmk8b1tlXVthXS5tYXhTYW1wbGVzUGVyU3RlcCk6W119bGV0IHI9blt0XS50YWdUb1J1bnM7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkoZSk/cltlXTpbXX1mdW5jdGlvbiB6Z2Uobix0KXtyZXR1cm4gbi5wbHVnaW49PT10LnBsdWdpbiYmbi50YWc9PT10LnRhZyYmbi5zYW1wbGU9PT10LnNhbXBsZSYmKG4ucnVuSWQ9PT10LnJ1bklkfHwhbi5ydW5JZCYmIXQucnVuSWQpfWZ1bmN0aW9uIEhGKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9bmV3IFNldChuKSxjPVtdO2ZvcihsZXQgdSBvZiBuKWZvcihsZXQgcCBvZiB0KWlmKHpnZShlW3BdLHUpKXtjLnB1c2gocCksbC5kZWxldGUodSk7YnJlYWt9aWYoIWMubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkU3RhdGVNYXA6YX07bGV0IGQ9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkU3RhdGVNYXA6YX07Zm9yKGxldCB1IG9mIGMpZD16Rih1LGQuY2FyZFRvUGlubmVkQ29weSxkLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxkLnBpbm5lZENhcmRUb09yaWdpbmFsLGQuY2FyZFN0ZXBJbmRleCxkLmNhcmRNZXRhZGF0YU1hcCxhKTtyZXR1cm57Li4uZCx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbLi4ubF19fWZ1bmN0aW9uIHpGKG4sdCxlLGkscixvLHMpe2lmKHQuaGFzKG4pKXJldHVybntjYXJkVG9QaW5uZWRDb3B5OnQsY2FyZFRvUGlubmVkQ29weUNhY2hlOmUscGlubmVkQ2FyZFRvT3JpZ2luYWw6aSxjYXJkU3RlcEluZGV4OnIsY2FyZE1ldGFkYXRhTWFwOm8sY2FyZFN0YXRlTWFwOnN9O2xldCBhPW5ldyBNYXAodCksbD1uZXcgTWFwKGUpLGM9bmV3IE1hcChpKSxkPXsuLi5yfSx1PXsuLi5vfSxwPXsuLi5zfSxmPWZ1bmN0aW9uKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7YmFzZUNhcmRJZDpufSl9KG4pO2Euc2V0KG4sZiksbC5zZXQobixmKSxjLnNldChmLG4pLHIuaGFzT3duUHJvcGVydHkobikmJihkW2ZdPXJbbl0pO2xldCBtPW9bbl07aWYoIW0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIHVbZl09bSxwW25dJiYocFtmXT1wW25dKSx7Y2FyZFRvUGlubmVkQ29weTphLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpsLHBpbm5lZENhcmRUb09yaWdpbmFsOmMsY2FyZFN0ZXBJbmRleDpkLGNhcmRNZXRhZGF0YU1hcDp1LGNhcmRTdGF0ZU1hcDpwfX12YXIgVWdlPXtNQVhfUElOX0NPVU5UOjEwfTtmdW5jdGlvbiBLUyhuKXtyZXR1cm4gbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK24udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPFVnZS5NQVhfUElOX0NPVU5UfWZ1bmN0aW9uIFVGKG4sdCxlLGkpe2xldCByPXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57aWYoIW8uaW5jbHVkZXMoJyJwbHVnaW4iOiJpbWFnZXMiJykpcmV0dXJuO2xldCBzPWpGKG8sdCxlKSxhPW51bGw7aWYobnVsbD09PWkuZW5kKWE9ZnVuY3Rpb24obix0KXtsZXQgZT10LmluZGV4T2Yobik7aWYoLTEhPT1lKXJldHVybntpbmRleDplLGlzQ2xvc2VzdDohMX07Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dFtpXSxvPXRbaSsxXSxzPShvLXIpKkJnZTtpZihuPHIpcmV0dXJuIG51bGw7aWYoIShuPm8pKXtpZihuLXI8PXMpcmV0dXJue2luZGV4OmksaXNDbG9zZXN0OiEwfTtpZihvLW48PXMpcmV0dXJue2luZGV4OmkrMSxpc0Nsb3Nlc3Q6ITB9fX1yZXR1cm4gbnVsbH0oaS5zdGFydC5zdGVwLHMpO2Vsc2V7bGV0IGM9c1tuW29dLmluZGV4XSxkPWZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuW107aWYobnVsbD09PW4uZW5kKXJldHVybi0xIT09dC5pbmRleE9mKG4uc3RhcnQuc3RlcCk/W24uc3RhcnQuc3RlcF06W107bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpaT49bi5zdGFydC5zdGVwJiZpPD1uLmVuZC5zdGVwJiZlLnB1c2goaSk7cmV0dXJuIGV9KGkscyk7YT1mdW5jdGlvbihuLHQsZSl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO2xldCBpPW5bMF0scj1uW24ubGVuZ3RoLTFdO3JldHVybiBlPnI/e2luZGV4OnQuaW5kZXhPZihyKSxpc0Nsb3Nlc3Q6ITF9OmU8aT97aW5kZXg6dC5pbmRleE9mKGkpLGlzQ2xvc2VzdDohMX06bnVsbH0oZCxzLGMpfW51bGwhPT1hJiYocltvXT1hKX0pLHJ9ZnVuY3Rpb24gakYobix0LGUpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybltdO2xldHtwbHVnaW46aSx0YWc6cixzYW1wbGU6byxydW5JZDpzfT10W25dO2lmKG51bGw9PT1zKXJldHVybltdO2xldCBhPWdkKGUsaSxyLG8pO3JldHVybiBudWxsIT09YSYmYS5ydW5Ub1Nlcmllcy5oYXNPd25Qcm9wZXJ0eShzKT9hLnJ1blRvU2VyaWVzW3NdLm1hcChsPT5sLnN0ZXApOltdfWZ1bmN0aW9uIEdGKG4pe2xldHtkYXRhTWluTWF4OnQsdXNlclZpZXdCb3g6ZX09bixpPWU/Lng7aWYoIWkpcmV0dXJuIHQ7bGV0IHI9aVswXTxpWzFdP2lbMF06aVsxXSxvPXI9PT1pWzBdP2lbMV06aVswXTtyZXR1cm57bWluU3RlcDpNYXRoLmNlaWwociksbWF4U3RlcDpNYXRoLmZsb29yKG8pfX1mdW5jdGlvbiBKUyhuLHQpe3N3aXRjaChuKXtjYXNlIExzLk9WRVJSSURFX0FTX0VOQUJMRUQ6cmV0dXJuITA7Y2FzZSBMcy5PVkVSUklERV9BU19ESVNBQkxFRDpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiAkUyhuLHQsZSxpKXtyZXR1cm4gZT90OkpTKG5baV0/LnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsdCl9ZnVuY3Rpb24gWWgobil7bGV0IHQ9bmV3IE1hcDtyZXR1cm4oLi4uZSk9PntsZXQgaT1KU09OLnN0cmluZ2lmeShlKTtpZih0LmhhcyhpKSlyZXR1cm4gdC5nZXQoaSk7e2xldCByPW4oLi4uZSk7cmV0dXJuIHQuc2V0KGkscikscn19fXZhciBIaT1FcihZUyksdnY9cShIaSxuPT5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlKSxfVz1xKEhpLG49Pm4udGFnTWV0YWRhdGEpLFlnZT1xKEhpLG49Pm4uY2FyZExpc3QpLF9kPXEoSGksKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIFRlLk5PVF9MT0FERUQ7bGV0e3BsdWdpbjplLHRhZzppLHJ1bklkOnIsc2FtcGxlOm99PW4uY2FyZE1ldGFkYXRhTWFwW3RdLHM9Z2Qobi50aW1lU2VyaWVzRGF0YSxlLGksbyk7aWYoIXMpcmV0dXJuIFRlLk5PVF9MT0FERUQ7bGV0IGE9cy5ydW5Ub0xvYWRTdGF0ZTtpZihyKXJldHVybiBhLmhhc093blByb3BlcnR5KHIpP2Fbcl06VGUuTk9UX0xPQURFRDtsZXQgbD1xaChuLnRhZ01ldGFkYXRhLGUsaSxvKTtpZighbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCBhIGNhcmQgd2hvc2UgdGFnIGhhcyBubyBydW5zIik7cmV0dXJuIGwuZXZlcnkoYz0+YVtjXT09PVRlLkxPQURFRCk/VGUuTE9BREVEOmwuc29tZShjPT5hW2NdPT09VGUuTE9BRElORyk/VGUuTE9BRElORzpUZS5OT1RfTE9BREVEfSksWGdlPVloKG49PnEodD0+dCx0PT57bGV0e3BsdWdpbjplLHRhZzppLHNhbXBsZTpyfT1uLG89Z2QodC50aW1lU2VyaWVzRGF0YSxlLGkscik7cmV0dXJuIG8/by5ydW5Ub1NlcmllczpudWxsfSkpLEN1PXEoSGksKG4sdCk9Pm4uY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KHQpP1hnZShuLmNhcmRNZXRhZGF0YU1hcFt0XSkobik6bnVsbCksV0Y9cShIaSxuPT5uLmNhcmRNZXRhZGF0YU1hcCksV2E9cShXRiwobix0KT0+bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdOm51bGwpLHFhPXEoSGksbj0+bi5jYXJkU3RhdGVNYXApLFFnZT1xKEhpLG49Pm4udmlzaWJsZUNhcmRNYXApLGJXPXEoUWdlLG49Pm5ldyBTZXQobi52YWx1ZXMoKSkpLGUxPXEoWWdlLFdGLChuLHQpPT5uLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxxRj1xKEhpLChuLHQpPT5uLmNhcmRTdGVwSW5kZXguaGFzT3duUHJvcGVydHkodCk/bi5jYXJkU3RlcEluZGV4W3RdOm51bGwpLHZXPXEoSGksKG4sdCk9PmpGKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLHlXPXEoSGksbj0+bi5jYXJkVG9QaW5uZWRDb3B5KSxaZ2U9cShIaSxuPT5uLnBpbm5lZENhcmRUb09yaWdpbmFsKSx5dj1xKHlXLFdGLChuLHQpPT5bLi4ubi52YWx1ZXMoKV0uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLE11PXEoeVcsWmdlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSkseFc9cShIaSxuPT5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzKSxDVz1xKEhpLG49PktTKG4pKSxQbD1xKEhpLG49Pih7Li4ubi5zZXR0aW5ncywuLi5uLnNldHRpbmdPdmVycmlkZXN9KSksTVc9cShIaSxuPT5uLnNldHRpbmdPdmVycmlkZXMpLFhoPXEoUGwsbj0+bi5jYXJkTWluV2lkdGgpLGhmPXEoUGwsbj0+bi50b29sdGlwU29ydCksZ2Y9cShQbCxuPT5uLmlnbm9yZU91dGxpZXJzKSxPbD1xKFBsLG49Pm4ueEF4aXNUeXBlKSx0MT1xKFBsLG49Pm4uaGlzdG9ncmFtTW9kZSksd1c9cShQbCxuPT5uLmhpZGVFbXB0eUNhcmRzKSxiZD1xKFBsLG49Pm4uc2NhbGFyU21vb3RoaW5nKSxuMT1xKFBsLG49Pm4uc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCksaTE9cShQbCxuPT5uLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpLHIxPXEoUGwsbj0+bi5pbWFnZUNvbnRyYXN0SW5NaWxsaSksbzE9cShQbCxuPT5uLmltYWdlU2hvd0FjdHVhbFNpemUpLGtsPXEoSGksbj0+bi50YWdGaWx0ZXIpLHMxPXEoSGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLHd1PXEoSGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCkseHY9cShIaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLFN1PXEoSGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLFlGPXEoSGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLFhGPXEoSGksWUYsKG4sdCk9Pm4ubGlua2VkVGltZVNlbGVjdGlvbj9uLmxpbmtlZFRpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOnQubWF4fSxlbmQ6bnVsbH0pLEV1PXEoSGksWEYsKG4sdCk9Pm4ubGlua2VkVGltZUVuYWJsZWQ/dDpudWxsKSxEYz1xKEhpLG49Pm4uZmlsdGVyZWRQbHVnaW5UeXBlcyksYTE9cShIaSxuPT5uLmlzU2V0dGluZ3NQYW5lT3BlbiksbDE9cShIaSxuPT5uLmlzU2xpZGVvdXRNZW51T3BlbiksU1c9cShIaSxuPT5uLnRhYmxlRWRpdG9yU2VsZWN0ZWRUYWIpLGMxPVloKG49PnEocWEsU3Usd3UsKHQsZSxpKT0+JFModCxlLGksbikpKSxFVz1xKHFhLChuLHQpPT57aWYoblt0XSlyZXR1cm4gR0Yoblt0XSl9KSxUVz1xKHFhLChuLHQpPT5uW3RdPy5kYXRhTWluTWF4KSxRRj1xKHFhLChuLHQpPT5uW3RdPy51c2VyVmlld0JveD8/bnVsbCksRFc9cShxYSx4dixTdSx3dSxFdSwobix0LGUsaSxyLG8pPT57bGV0IHM9bltvXTtpZighcylyZXR1cm47bGV0IGE9R0Yocyk7aWYoIWEpcmV0dXJuO2lmKGkmJnIpcmV0dXJuIFJGKHIsYSxlKTtpZighSlMocy5zdGVwU2VsZWN0aW9uT3ZlcnJpZGUsdCkpcmV0dXJuO2xldCBsPUpTKHMucmFuZ2VTZWxlY3Rpb25PdmVycmlkZSxlKSxjPXMudGltZVNlbGVjdGlvbjtyZXR1cm4gY3x8KGM9e3N0YXJ0OntzdGVwOmEubWluU3RlcH0sZW5kOntzdGVwOmEubWF4U3RlcH19KSxsP2MuZW5kfHwoYz17c3RhcnQ6e3N0ZXA6YS5taW5TdGVwfSxlbmQ6Yy5zdGFydH0pOmM9e3N0YXJ0OmMuZW5kPz9jLnN0YXJ0LGVuZDpudWxsfSxSRihjLGEsbCl9KSxDdj1xKEhpLG49Pm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksTXY9cShIaSxuPT5uLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksZDE9WWgobj0+cShjMShuKSxDdixNdiwodCxlLGkpPT50P2k6ZSkpLEFXPUVyKCJub3RpZmljYXRpb24iKSxJYz0ocShBVyxuPT5uLm5vdGlmaWNhdGlvbnMpLHEoQVcsbj0+bi5sYXN0UmVhZFRpbWVzdGFtcEluTXM/Py0xKSwoKCk9PihmdW5jdGlvbihuKXtuW24uRVhQRVJJTUVOVF9OQU1FPTBdPSJFWFBFUklNRU5UX05BTUUiLG5bbi5IUEFSQU09MV09IkhQQVJBTSIsbltuLk1FVFJJQz0yXT0iTUVUUklDIixuW24uUlVOX05BTUU9M109IlJVTl9OQU1FIn0oSWN8fChJYz17fSkpLEljKSkoKSksWWk9KCgpPT4oZnVuY3Rpb24obil7bltuLlJVTj0wXT0iUlVOIixuW24uRVhQRVJJTUVOVD0xXT0iRVhQRVJJTUVOVCIsbltuLlJFR0VYPTJdPSJSRUdFWCJ9KFlpfHwoWWk9e30pKSxZaSkpKCk7ZnVuY3Rpb24gU3Yobix0LGUpe2xldCBpPXt9LHI9W10sbz17bWF0Y2hlczppLG5vbk1hdGNoZXM6cn07c3dpdGNoKG4ua2V5KXtjYXNlIFlpLlJVTjpmb3IobGV0IGEgb2YgdClpW2EuaWRdPVthXTticmVhaztjYXNlIFlpLkVYUEVSSU1FTlQ6Zm9yKGxldCBhIG9mIHQpe2xldCBsPWVbYS5pZF0sYz1pW2xdfHxbXTtjLnB1c2goYSksaVtsXT1jfWJyZWFrO2Nhc2UgWWkuUkVHRVg6aWYoIW4ucmVnZXhTdHJpbmcpYnJlYWs7bGV0IHM7dHJ5e3M9bmV3IFJlZ0V4cChuLnJlZ2V4U3RyaW5nKX1jYXRjaHticmVha31mb3IobGV0IGEgb2YgdCl7bGV0IGw9YS5uYW1lLm1hdGNoKHMpO2lmKGwpe2xldCBkPWwubGVuZ3RoPjE/SlNPTi5zdHJpbmdpZnkobC5zbGljZSgxKSk6InBzZXVkb19ncm91cCIsdT1pW2RdfHxbXTt1LnB1c2goYSksaVtkXT11fWVsc2Ugci5wdXNoKGEpfX1yZXR1cm4gb31mdW5jdGlvbiBwMShuLHQpe3JldHVybiBuPT09WWkuUkVHRVg/e2tleTpuLHJlZ2V4U3RyaW5nOnQ/PyIifTp7a2V5Om59fXZhciBUdT17fTtGQShUdSx7Z2V0RGFzaGJvYXJkRGVmYXVsdEhwYXJhbUZpbHRlcnM6KCk9PktGLGdldERhc2hib2FyZEhwYXJhbUZpbHRlck1hcDooKT0+bTEsZ2V0RGFzaGJvYXJkSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+ZjEsZ2V0RGFzaGJvYXJkTWV0cmljc0ZpbHRlck1hcDooKT0+aDEsZ2V0RGFzaGJvYXJkU2Vzc2lvbkdyb3VwczooKT0+WkYsZ2V0RXhwZXJpbWVudHNIcGFyYW1zQW5kTWV0cmljc1NwZWNzOigpPT5vMGUsZ2V0SHBhcmFtRmlsdGVyTWFwOigpPT4kZ2UsZ2V0SHBhcmFtRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PmUwZSxnZXRNZXRyaWNGaWx0ZXJNYXA6KCk9PmkwZSxnZXRNZXRyaWNGaWx0ZXJNYXBGcm9tRXhwZXJpbWVudElkczooKT0+cjBlfSk7dmFyIGZhPUVyKE9TKTtmdW5jdGlvbiBQVyhuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpO3JldHVybiBodihlKX12YXIgS2dlPXEoZmEsUFcpO2Z1bmN0aW9uIE9XKG4sdCxlKXtsZXQgaT1mZihlKTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5uLmZpbHRlcnNbaV0/LmhwYXJhbXM/P1tdXSl9dmFyICRnZT1xKGZhLEtnZSxPVyk7ZnVuY3Rpb24gZTBlKG4sdCl7cmV0dXJuIHEoZmEsZnVuY3Rpb24obil7cmV0dXJuIHEoZmEsdD0+UFcodCxuKSl9KG4pLChlLGkpPT5PVyhlLHQ/aTpuZXcgTWFwLG4pKX1mdW5jdGlvbiBrVyhuLHQpe2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBQUyhlKX12YXIgdDBlPXEoZmEsa1cpO2Z1bmN0aW9uIEZXKG4sdCxlKXtsZXQgaT1mZihlKTtyZXR1cm4gbmV3IE1hcChbLi4udCwuLi5uLmZpbHRlcnNbaV0/Lm1ldHJpY3M/P1tdXSl9dmFyIGkwZT1xKGZhLHQwZSxGVyk7ZnVuY3Rpb24gcjBlKG4sdCl7cmV0dXJuIHEoZmEsZnVuY3Rpb24obil7cmV0dXJuIHEoZmEsdD0+a1codCxuKSl9KG4pLChlLGkpPT5GVyhlLHQ/aTpuZXcgTWFwLG4pKX12YXIgbzBlPXEoZmEsKG4sdCk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PW5ldyBNYXAsZT1uZXcgTWFwLGk9bmV3IE1hcCxyPW5ldyBNYXAsbz1bXTtmb3IobGV0IHMgb2Ygbil7Zm9yKGxldCBhIG9mIHMuaHBhcmFtcylpZihlLmhhcyhhLm5hbWUpfHxlLnNldChhLm5hbWUsbmV3IFNldCksZS5nZXQoYS5uYW1lKS5hZGQoYS5kaXNwbGF5TmFtZSksdC5oYXMoYS5uYW1lKSl7bGV0IGw9dC5nZXQoYS5uYW1lKSxjPWE7aWYobC50eXBlIT09Yy50eXBlJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCB0eXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC50eXBlfSB2cy4gJHtjLnR5cGV9YCksbC5kb21haW4udHlwZT09PWduLklOVEVSVkFMJiZjLmRvbWFpbi50eXBlPT09Z24uSU5URVJWQUwpKGwuZG9tYWluLm1pblZhbHVlIT09Yy5kb21haW4ubWluVmFsdWV8fGwuZG9tYWluLm1heFZhbHVlIT09Yy5kb21haW4ubWF4VmFsdWUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCk7ZWxzZSBpZihsLmRvbWFpbi50eXBlPT09Z24uRElTQ1JFVEUmJmMuZG9tYWluLnR5cGU9PT1nbi5ESVNDUkVURSl7bGV0IGQ9bmV3IFNldChbLi4ubC5kb21haW4udmFsdWVzLC4uLmMuZG9tYWluLnZhbHVlc10pOyhsLmRvbWFpbi52YWx1ZXMubGVuZ3RoIT09Yy5kb21haW4udmFsdWVzLmxlbmd0aHx8bC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWQuc2l6ZSkmJm8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIG8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIHQuc2V0KGEubmFtZSx7Li4uYX0pO2ZvcihsZXQgYSBvZiBzLm1ldHJpY3MpaWYoci5oYXMoYS50YWcpfHxyLnNldChhLnRhZyxuZXcgU2V0KSxyLmdldChhLnRhZykuYWRkKGEuZGlzcGxheU5hbWUpLGkuaGFzKGEudGFnKSl7bGV0IGw9aS5nZXQoYS50YWcpO2wuZGF0YXNldFR5cGUhPT1hLmRhdGFzZXRUeXBlJiZvLnB1c2goYE1ldHJpYywgJHthLnRhZ30sIGRhdGFzZXRUeXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kYXRhc2V0VHlwZX0gdnMuICR7YS5kYXRhc2V0VHlwZX1gKX1lbHNlIGkuc2V0KGEudGFnLHsuLi5hfSl9aWYoby5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBWYWxpZGF0aW9uIGVycm9yOlxuJHtvLmpvaW4oIlxuIil9YCk7cmV0dXJue2hwYXJhbXM6Wy4uLnRdLm1hcCgoW3MsYV0pPT4oey4uLmEsZGlzcGxheU5hbWU6Wy4uLmUuZ2V0KHMpXS5qb2luKCIgb3IgIil9KSksbWV0cmljczpbLi4uaV0ubWFwKChbcyxhXSk9Pih7Li4uYSxkaXNwbGF5TmFtZTpbLi4uci5nZXQocyldLmpvaW4oIiBvciAiKX0pKX19KC4uLnQuZXhwZXJpbWVudElkcy5tYXAoZT0+e2xldCBpPW4uc3BlY3NbZV07cmV0dXJuIGk/e2hwYXJhbXM6aS5ocGFyYW0uc3BlY3MsbWV0cmljczppLm1ldHJpYy5zcGVjc306bnVsbH0pLmZpbHRlcihCb29sZWFuKSkpLGYxPXEoZmEsbj0+bi5kYXNoYm9hcmRTcGVjcyksWkY9cShmYSxuPT5uLmRhc2hib2FyZFNlc3Npb25Hcm91cHMpLEtGPXEoZjEsbj0+bmV3IE1hcChuLmhwYXJhbXMubWFwKGU9PltlLm5hbWUsRjYoZSldKSkpLG0xPXEoZmEsbj0+bi5kYXNoYm9hcmRGaWx0ZXJzLmhwYXJhbXMpLGgxPXEoZmEsbj0+bi5kYXNoYm9hcmRGaWx0ZXJzLm1ldHJpY3MpLE5XPUVyKCJydW5zIiksZHM9cShOVyxuPT5uLmRhdGEpLExXPXEoZHMsbj0+bi5ydW5JZFRvRXhwSWQpLGcxPXEoZHMsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxfMT1xKGRzLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSxEdT1xKGRzLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSksczBlPXEoWkYsbHIsZHMsKG4sdCxlKT0+e2lmKCF0KXJldHVybnt9O2xldCBpPVtdO2ZvcihsZXQgYSBvZiB0KWkucHVzaCguLi5lLnJ1bklkc1thXXx8W10pO2xldCByPXt9O2ZvcihsZXQgYSBvZiBuKXtsZXQgbD1PYmplY3QuZW50cmllcyhhLmhwYXJhbXMpLm1hcChjPT57bGV0W2QsdV09YztyZXR1cm57bmFtZTpkLHZhbHVlOnV9fSk7Zm9yKGxldCBjIG9mIGEuc2Vzc2lvbnMpcltjLm5hbWVdPWx9bGV0IG89T2JqZWN0LmtleXMocikuc29ydCgoYSxsKT0+bC5sZW5ndGgtYS5sZW5ndGgpLHM9e307Zm9yKGxldCBhIG9mIGkpZm9yKGxldCBsIG9mIG8paWYoYS5zdGFydHNXaXRoKGwpKXtzW2FdPXtocGFyYW1zOnJbbF0sbWV0cmljczpbXX07YnJlYWt9cmV0dXJuIHN9KSxiMT1xKGRzLGxyLHMwZSwobix0LGUpPT50P3QubWFwKGk9PihuLnJ1bklkc1tpXXx8W10pLmZpbHRlcihyPT5Cb29sZWFuKG4ucnVuTWV0YWRhdGFbcl0pKS5tYXAocj0+e2xldCBvPXsuLi5uLnJ1bk1ldGFkYXRhW3JdLGV4cGVyaW1lbnRJZDppfTtyZXR1cm4gby5ocGFyYW1zPWVbcl0/LmhwYXJhbXM/P251bGwsby5tZXRyaWNzPWVbcl0/Lm1ldHJpY3M/P251bGwsb30pKS5mbGF0KCk6W10pLEJXPXEoZHMsKG4sdCk9Pm4ucnVuSWRzW3QuZXhwZXJpbWVudElkXT8/W10pLFZXPXEoZHMsbj0+bmV3IE1hcChPYmplY3QuZW50cmllcyhuLnJ1bk1ldGFkYXRhKSkpLEV2PXEoZHMsKG4sdCk9Pm4ucnVuc0xvYWRTdGF0ZVt0LmV4cGVyaW1lbnRJZF18fHtsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpUZS5OT1RfTE9BREVEfSksSkY9cShkcyxuPT5udWxsIT09bi51c2VyU2V0R3JvdXBCeUtleT9wMShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKTpudWxsKSxIVz1xKEpGLGRzLChuLHQpPT5uPz90LmluaXRpYWxHcm91cEJ5KSx2ZD1xKGRzLG49Pm4ucmVnZXhGaWx0ZXIpLFR2PXEoTlcsbj0+bi51aSksJEY9cShUdixuPT5uLnBhZ2luYXRpb25PcHRpb24pLGUyPXEoVHYsbj0+bi5zb3J0KSx6Vz1xKFR2LG49Pm4uc2VsZWN0aW9uU3RhdGUpLFVXPXEoZHMsbj0+bi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSksalc9cShkcyxuPT5uLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSksdjE9cShkcyxuPT5uLmNvbG9yR3JvdXBSZWdleFN0cmluZyksR1c9cShUdixuPT5uLnJ1bnNUYWJsZUhlYWRlcnMpLFdXPXEoVHYsbj0+bi5zb3J0aW5nSW5mbykseTE9X2UoIltTZXR0aW5nc10gUmVsb2FkIEVuYWJsZSBUb2dnbGVkIikseDE9X2UoIltTZXR0aW5nc10gUmVsb2FkIFBlcmlvZCBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDMT1fZSgiW1NldHRpbmdzXSBQYWdlIFNpemUgQ2hhbmdlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQnM9e307RkEoQnMse2dldENvbG9yUGFsZXR0ZTooKT0+YTBlLGdldFBhZ2VTaXplOigpPT5fZixnZXRSZWxvYWRFbmFibGVkOigpPT5JdixnZXRSZWxvYWRQZXJpb2RJbk1zOigpPT5BdixnZXRTZXR0aW5nc0xvYWRTdGF0ZTooKT0+dDJ9KTt2YXIgTTE9InNldHRpbmdzIixYVz17c3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHNldHRpbmdzOntyZWxvYWRQZXJpb2RJbk1zOjNlNCxyZWxvYWRFbmFibGVkOiExLHBhZ2VTaXplOjEyLGNvbG9yUGFsZXR0ZTp7aWQ6ImRlZmF1bHQiLG5hbWU6IkRlZmFsdCIsY29sb3JzOlt7bmFtZToiU2xhdGUiLGxpZ2h0SGV4OiIjNDI1MDY2IixkYXJrSGV4OiIjOGU5OGEzIn0se25hbWU6IkN5YW4iLGxpZ2h0SGV4OiIjMTJiNWNiIixkYXJrSGV4OiIjMTJiNWNiIn0se25hbWU6IlBpbmsiLGxpZ2h0SGV4OiIjZTUyNTkyIixkYXJrSGV4OiIjZTUyNTkyIn0se25hbWU6IlllbGxvdyIsbGlnaHRIZXg6IiNmOWFiMDAiLGRhcmtIZXg6IiNmOWFiMDAifSx7bmFtZToiUHVycGxlIixsaWdodEhleDoiIzkzMzRlNiIsZGFya0hleDoiIzkzMzRlNiJ9LHtuYW1lOiJMaWdodCBHcmVlbiIsbGlnaHRIZXg6IiM3Y2IzNDIiLGRhcmtIZXg6IiM3Y2IzNDIifSx7bmFtZToiT3JhbmdlIixsaWdodEhleDoiI2U4NzEwYSIsZGFya0hleDoiI2U4NzEwYSJ9XSxpbmFjdGl2ZTp7bmFtZToiR3JheSIsbGlnaHRIZXg6IiNlMGUwZTAiLGRhcmtIZXg6IiMzYjNiM2IifX19fSxEdj1FcihNMSksdDI9cShEdixuPT5uLnN0YXRlKSxJdj1xKER2LG49Pm4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZCksQXY9cShEdixuPT5uLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXMpLF9mPXEoRHYsbj0+bi5zZXR0aW5ncy5wYWdlU2l6ZSksYTBlPXEoRHYsbj0+bi5zZXR0aW5ncy5jb2xvclBhbGV0dGUpO2Z1bmN0aW9uIFFoKG4sdCxlKXtpZighdClyZXR1cm4hMDtsZXQgaTt0cnl7aT1uZXcgUmVnRXhwKHQsImkiKX1jYXRjaHtyZXR1cm4hMX1sZXQgcj1bbi5ydW5OYW1lXTtyZXR1cm4gZSYmci5wdXNoKG4uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dCxgJHtuLmV4cGVyaW1lbnRBbGlhcy5hbGlhc1RleHR9LyR7bi5ydW5OYW1lfWApLHIuc29tZShvPT5pLnRlc3QobykpfXZhciBsMGU9cShscix6VyxMVywobix0LGUpPT57aWYoIW4pcmV0dXJuIG5ldyBNYXA7bGV0IGk9bmV3IE1hcDtmb3IobGV0W3Isb11vZiB0LmVudHJpZXMoKSl7bGV0IHM9ZVtyXTtzJiZuLmluZGV4T2Yocyk+PTAmJmkuc2V0KHIsbyl9cmV0dXJuIGl9KSxjMGU9cSh6YSxiMSwobix0KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZS5zZXQoaS5pZCx7cnVuTmFtZTppLm5hbWUsZXhwZXJpbWVudEFsaWFzOm5baS5leHBlcmltZW50SWRdfSk7cmV0dXJuIGV9KSxJdT1xKGxyLGwwZSx2ZCxjMGUsSGEsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09d24uQ09NUEFSRV9FWFBFUklNRU5ULHM9bmV3IE1hcDtmb3IobGV0W2EsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQoYSk7cy5zZXQoYSxRaChjLGUsbykmJmwpfXJldHVybiBzfSksQXU9cShCcy5nZXRDb2xvclBhbGV0dGUsalcsVVcsUmwsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxzKT0+e2xldCBhPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMocykpYT1lLmdldChzKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTthPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9cltzXT1hfSkscn0pLFFXPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPWFyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoZWkoVmgpLGhuKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YT09PVRlLkZBSUxFRHx8YT09PVRlLk5PVF9MT0FERUQpLnBpcGUoa2UoYT0+ISFhLmxlbmd0aCksaG4oYT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8sYSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFBzKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChObykpLFluKChbLG9dLFssc10pPT5GbyhvLHMpKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikpLGtlKChbLG9dKT0+ISFvKSxOKChbLG9dKT0+byksaG4obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zPT09VGUuRkFJTEVEfHxzPT09VGUuTk9UX0xPQURFRCkucGlwZShOKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShlaShjcyxGcyksQnQodGhpcy5zdG9yZS5zZWxlY3QobHIpKSxrZSgoWyxvXSk9PiEhbyksTigoWyxvXSk9Pm8pLGhuKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cyE9PVRlLkxPQURJTkcpLnBpcGUoTihzPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6c30pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPWFyKCgpPT50bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KE5vKSksa2UoKFssb10pPT5udWxsIT09byYmby5yb3V0ZUtpbmQhPT13bi5DQVJEKSxobigoW3tleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOnN9XSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLHMpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZW1vdmVIcGFyYW1GaWx0ZXJXaGVuQ29sdW1uSXNSZW1vdmVkJD1hcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGVpKHpoKSxOdCgoe2hlYWRlcjpvfSk9PntvLnR5cGUhPT1odC5IUEFSQU0/by50eXBlPT09aHQuTUVUUklDJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKG12KHtuYW1lOm8ubmFtZX0pKTp0aGlzLnN0b3JlLmRpc3BhdGNoKGZ2KHtuYW1lOm8ubmFtZX0pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZShlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoRXYse2V4cGVyaW1lbnRJZDplfSkucGlwZShZdCgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKGUsaSl7cmV0dXJuIGNvKGUubWFwKHI9PnRoaXMuZ2V0UnVuc0xpc3RMb2FkU3RhdGUocikpKS5waXBlKE4ocj0+ZS5maWx0ZXIoKG8scyk9PmkocltzXS5zdGF0ZSkpKSl9ZmV0Y2hBbGxSdW5zTGlzdChlLGkpe3JldHVybiBIdCh7ZXhwZXJpbWVudElkczplLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDppfSkucGlwZShOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goTVMoe2V4cGVyaW1lbnRJZHM6ZSxyZXF1ZXN0ZWRFeHBlcmltZW50SWRzOml9KSl9KSxobigoKT0+e2xldCByPW5ldyBTZXQoaSk7cmV0dXJuIGNvKGUubWFwKHM9PnIuaGFzKHMpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChzKTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHMpKSl9KSxOKHI9PntsZXQgbz17fSxzPVtdO2ZvcihsZXQgYSBvZiByKXMucHVzaCguLi5hLnJ1bnMpLGEuZnJvbVJlbW90ZSYmKG9bYS5leHBlcmltZW50SWRdPXtydW5zOmEucnVucyxtZXRhZGF0YTphLm1ldGFkYXRhfSk7cmV0dXJue25ld1J1bnNBbmRNZXRhZGF0YTpvLHJ1bnNGb3JBbGxFeHBlcmltZW50czpzfX0pLE50KCh7bmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeXUoe2V4cGVyaW1lbnRJZHM6ZSxuZXdSdW5zQW5kTWV0YWRhdGE6cixydW5zRm9yQWxsRXhwZXJpbWVudHM6b30pKX0pLHpyKHI9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKEJoKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpLEh0KG51bGwpKSksTigoKT0+bnVsbCkpfW1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChFdix7ZXhwZXJpbWVudElkOmV9KS5waXBlKGtlKGk9Pmkuc3RhdGUhPT1UZS5MT0FESU5HKSxZdCgxKSxobihpPT5pLnN0YXRlPT09VGUuRkFJTEVEP2VhKG5ldyBFcnJvcigiUGVuZGluZyByZXF1ZXN0IGZhaWxlZCIpKTpIdChpKSksQnQodGhpcy5zdG9yZS5zZWxlY3QoRHUse2V4cGVyaW1lbnRJZDplfSkpLE4oKFssaV0pPT4oe2Zyb21SZW1vdGU6ITEsZXhwZXJpbWVudElkOmUscnVuczppfSkpKX1mZXRjaFJ1bnNGb3JFeHBlcmltZW50KGUpe3JldHVybiBjbyhbdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaFJ1bnMoZSksdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaEhwYXJhbXNNZXRhZGF0YShlKV0pLnBpcGUoTigoW2kscl0pPT4oe2Zyb21SZW1vdGU6ITAsZXhwZXJpbWVudElkOmUscnVuczppLG1ldGFkYXRhOnJ9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKFJTKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWWE9KCgpPT4oZnVuY3Rpb24obil7bi5BU0M9ImFzYyIsbi5ERVNDPSJkZXNjIixuLlVOU0VUPSIifShZYXx8KFlhPXt9KSksWWEpKSgpLHtpbml0aWFsU3RhdGU6ZDBlLHJlZHVjZXJzOnUwZX09dWYoe3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXAsZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5Om5ldyBNYXAsZ3JvdXBLZXlUb0NvbG9ySWQ6bmV3IE1hcCxpbml0aWFsR3JvdXBCeTp7a2V5OllpLlJVTn0sdXNlclNldEdyb3VwQnlLZXk6bnVsbCxjb2xvckdyb3VwUmVnZXhTdHJpbmc6IiIscmVnZXhGaWx0ZXI6IiJ9LHtydW5JZHM6e30scnVuSWRUb0V4cElkOnt9LHJ1bk1ldGFkYXRhOnt9LHJ1bnNMb2FkU3RhdGU6e319LChuLHQsZSk9PkZvKHQsZSk/bjp7Li4ubixpbml0aWFsR3JvdXBCeTp7a2V5OmUucm91dGVLaW5kPT09d24uQ09NUEFSRV9FWFBFUklNRU5UP1lpLkVYUEVSSU1FTlQ6WWkuUlVOfX0pLHAwZT1icihkMGUseWUoRWgsKG4se3JvdXRlS2luZDp0LHBhcnRpYWxTdGF0ZTplfSk9PntpZih0IT09d24uQ09NUEFSRV9FWFBFUklNRU5UJiZ0IT09d24uRVhQRVJJTUVOVClyZXR1cm4gbjtsZXQgcj1lLnJ1bnMuZ3JvdXBCeSxvPWUucnVucy5yZWdleEZpbHRlcj8/IiI7aWYoIXImJiFvKXJldHVybiBuO2xldHtjb2xvckdyb3VwUmVnZXhTdHJpbmc6cyx1c2VyU2V0R3JvdXBCeUtleTphfT1uO3JldHVybiByJiYocz1yLmtleT09PVlpLlJFR0VYP3IucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcsYT1yLmtleT8/bnVsbCksey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOnMscmVnZXhGaWx0ZXI6byx1c2VyU2V0R3JvdXBCeUtleTphfX0pLHllKE1TLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6VGUuTE9BRElOR306e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOlRlLkxPQURJTkd9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSx5ZSh5dSwobix0KT0+e2xldCBlPXsuLi5uLnJ1bklkc30saT17Li4ubi5ydW5NZXRhZGF0YX0scj17Li4ubi5ydW5JZFRvRXhwSWR9LG89ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0e3J1bnM6YSxtZXRhZGF0YTpsfT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtzXTtlW3NdPWEubWFwKCh7aWQ6Y30pPT5jKSxvW3NdPXsuLi5vW3NdLGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOlRlLkxPQURFRH07Zm9yKGxldCBjIG9mIGEpe2xldCBkPWwucnVuVG9IcGFyYW1zQW5kTWV0cmljc1tjLmlkXTtpW2MuaWRdPXsuLi5jLGhwYXJhbXM6ZD9kLmhwYXJhbXM6bnVsbCxtZXRyaWNzOmQ/ZC5tZXRyaWNzOm51bGx9LHJbYy5pZF09c319cmV0dXJuey4uLm4scnVuSWRzOmUscnVuSWRUb0V4cElkOnIscnVuTWV0YWRhdGE6aSxydW5zTG9hZFN0YXRlOm99fSkseWUoQmgsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGkgb2YgdC5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKWVbaV09ZVtpXT97Li4uZVtpXSxzdGF0ZTpUZS5GQUlMRUR9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpUZS5GQUlMRUR9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSx5ZSh5dSwobix7cnVuc0ZvckFsbEV4cGVyaW1lbnRzOnR9KT0+e2xldCBlPW5ldyBNYXAobi5ncm91cEtleVRvQ29sb3JJZCksaT1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxyPW4uaW5pdGlhbEdyb3VwQnk7bnVsbCE9PW4udXNlclNldEdyb3VwQnlLZXkmJihyPXAxKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKTtsZXQgbz1TdihyLHQsbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKG8ubWF0Y2hlcykuZm9yRWFjaCgoW3MsYV0pPT57bGV0IGw9ZS5nZXQocyk/P2Uuc2l6ZTtlLnNldChzLGwpO2ZvcihsZXQgYyBvZiBhKWkuc2V0KGMuaWQsbCl9KTtmb3IobGV0IHMgb2Ygby5ub25NYXRjaGVzKWkuc2V0KHMuaWQsLTEpO3JldHVybnsuLi5uLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTppLGdyb3VwS2V5VG9Db2xvcklkOmV9fSkseWUoSGgsKG4se2V4cGVyaW1lbnRJZHM6dCxncm91cEJ5OmV9KT0+e2xldCBpPW5ldyBNYXAscj1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxzPVN2KGUsdC5mbGF0TWFwKGw9Pm4ucnVuSWRzW2xdKS5tYXAobD0+bi5ydW5NZXRhZGF0YVtsXSksbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKHMubWF0Y2hlcykuZm9yRWFjaCgoW2wsY10pPT57bGV0IGQ9aS5nZXQobCk/P2kuc2l6ZTtpLnNldChsLGQpO2ZvcihsZXQgdSBvZiBjKXIuc2V0KHUuaWQsZCl9KTtmb3IobGV0IGwgb2Ygcy5ub25NYXRjaGVzKXIuc2V0KGwuaWQsLTEpO2xldCBhPWUua2V5PT09WWkuUkVHRVg/ZS5yZWdleFN0cmluZzpuLmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm57Li4ubixjb2xvckdyb3VwUmVnZXhTdHJpbmc6YSx1c2VyU2V0R3JvdXBCeUtleTplLmtleSxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6cixncm91cEtleVRvQ29sb3JJZDppLHJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXB9fSkseWUoVFMsKG4se3J1bklkOnQsbmV3Q29sb3I6ZX0pPT57bGV0IGk9bmV3IE1hcChuLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KTtyZXR1cm4gaS5zZXQodCxlKSx7Li4ubixydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTppfX0pLHllKHV2LChuLHQpPT4oey4uLm4scmVnZXhGaWx0ZXI6dC5yZWdleFN0cmluZ30pKSksZjBlPXBmKHAwZSx1MGUpLG0wZT17a2V5Om51bGwsZGlyZWN0aW9uOllhLlVOU0VUfSx7aW5pdGlhbFN0YXRlOmgwZSxyZWR1Y2VyczpnMGV9PXVmKHtwYWdpbmF0aW9uT3B0aW9uOntwYWdlSW5kZXg6MCxwYWdlU2l6ZToxMH0sc29ydDptMGUsc2VsZWN0aW9uU3RhdGU6bmV3IE1hcCxydW5zVGFibGVIZWFkZXJzOlt7dHlwZTpodC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITAsZmlsdGVyYWJsZTohMX1dLHNvcnRpbmdJbmZvOntuYW1lOiJydW4iLG9yZGVyOmlvLkFTQ0VORElOR319LHt9LChuLHQsZSk9PntpZighRm8odCxlKSl7aWYoZS5yb3V0ZUtpbmQ9PT13bi5DT01QQVJFX0VYUEVSSU1FTlQmJiFuLnJ1bnNUYWJsZUhlYWRlcnMuZmluZChpPT4iZXhwZXJpbWVudEFsaWFzIj09PWkubmFtZSkpe2xldCBpPVsuLi5uLnJ1bnNUYWJsZUhlYWRlcnMse3R5cGU6aHQuQ1VTVE9NLG5hbWU6ImV4cGVyaW1lbnRBbGlhcyIsZGlzcGxheU5hbWU6IkV4cGVyaW1lbnQiLGVuYWJsZWQ6ITAsbW92YWJsZTohMCxzb3J0YWJsZTohMH1dO3JldHVybnsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6aX19aWYodD8ucm91dGVLaW5kPT09d24uQ09NUEFSRV9FWFBFUklNRU5UJiZlLnJvdXRlS2luZCE9PXduLkNPTVBBUkVfRVhQRVJJTUVOVCl7bGV0IGk9bi5ydW5zVGFibGVIZWFkZXJzLmZpbHRlcihyPT4iZXhwZXJpbWVudEFsaWFzIiE9PXIubmFtZSk7cmV0dXJuey4uLm4scnVuc1RhYmxlSGVhZGVyczppfX19cmV0dXJuIG59KSxfMGU9YnIoaDBlLHllKFNTLChuLHtwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfSk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfX0pKSx5ZSh1diwobix0KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246ey4uLm4ucGFnaW5hdGlvbk9wdGlvbixwYWdlSW5kZXg6MH19KSkseWUoRVMsKG4sdCk9Pih7Li4ubixzb3J0OntrZXk6dC5rZXksZGlyZWN0aW9uOnQuZGlyZWN0aW9ufX0pKSx5ZSh5dSwobix0KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT10LnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IobGV0IHIgb2YgdC5ydW5zRm9yQWxsRXhwZXJpbWVudHMpZS5oYXMoci5pZCl8fGUuc2V0KHIuaWQsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSx5ZShjdiwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKTtyZXR1cm4gZS5zZXQodCwhQm9vbGVhbihlLmdldCh0KSkpLHsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSkseWUod1MsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIG4uc2VsZWN0aW9uU3RhdGUua2V5cygpKWUuc2V0KGksdD09PWkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSkseWUoZHYsKG4se3J1bklkczp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9IXQuZXZlcnkocj0+Qm9vbGVhbihlLmdldChyKSkpO2ZvcihsZXQgciBvZiB0KWUuc2V0KHIsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSx5ZShEUywobix7aGVhZGVyOnQsaW5kZXg6ZX0pPT57bGV0IGk9Wy4uLm4ucnVuc1RhYmxlSGVhZGVyc107cmV0dXJuIHZvaWQgMD09PWU/aS5wdXNoKHQpOmkuc3BsaWNlKGUsMCx0KSx7Li4ubixydW5zVGFibGVIZWFkZXJzOml9fSkseWUoemgsKG4se2hlYWRlcjp0fSk9PntsZXQgZT1uLnJ1bnNUYWJsZUhlYWRlcnMuZmlsdGVyKCh7bmFtZTppfSk9PmkhPT10Lm5hbWUpO3JldHVybnsuLi5uLHJ1bnNUYWJsZUhlYWRlcnM6ZX19KSx5ZShJUywobix7bmV3SGVhZGVyT3JkZXI6dH0pPT4oey4uLm4scnVuc1RhYmxlSGVhZGVyczp0fSkpLHllKEFTLChuLHtzb3J0aW5nSW5mbzp0fSk9Pih7Li4ubixzb3J0aW5nSW5mbzp0fSkpKSxiMGU9cGYoXzBlLGcwZSk7ZnVuY3Rpb24gWlcobix0KXtyZXR1cm4gcmYoe2RhdGE6ZjBlLHVpOmIwZX0pKG4sdCl9ZnVuY3Rpb24gdjBlKCl7cmV0dXJuW3thY3Rpb25DcmVhdG9yOkJoLGFsZXJ0RnJvbUFjdGlvbjooKT0+KHtsb2NhbGl6ZWRNZXNzYWdlOiJGYWlsZWQgdG8gZmV0Y2ggcnVucyJ9KX1dfXZhciB3MT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVHIuZm9yRmVhdHVyZSgicnVucyIsWlcpLHRvLmZvckZlYXR1cmUoW1FXXSksVTYsU2MucmVnaXN0ZXJBbGVydEFjdGlvbnModjBlKSxGU119KSxufSkoKSx5ZD0oKCk9PihmdW5jdGlvbihuKXtuLlJVTlNfQ0hBTkdFRD0iZXhwZXJpbWVudGFsLlJ1bnNDaGFuZ2VkIixuLkdFVF9SVU5TPSJleHBlcmltZW50YWwuR2V0UnVucyIsbi5HRVRfVVJMX0RBVEE9ImV4cGVyaW1lbnRhbC5HZXRVUkxQbHVnaW5EYXRhIixuLkRBVEFfUkVMT0FERUQ9ImV4cGVyaW1lbnRhbC5EYXRhUmVsb2FkZWQifSh5ZHx8KHlkPXt9KSkseWQpKSgpLEpXPW5ldyBXZWFrTWFwLFpoPW5ldyBTZXQsbjI9bmV3IE1hcCxFMT1uZXcgTWFwO2Z1bmN0aW9uICRXKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1FMS5nZXQodCkscj1KVy5nZXQoaSl8fG51bGw7cmV0dXJuIG4ocixlKX19d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZigiZXhwZXJpbWVudGFsLmJvb3RzdHJhcCIhPT1uLmRhdGEpcmV0dXJuO2xldCB0PW4ucG9ydHNbMF07aWYoIXQpcmV0dXJuO2xldCBlPW4uc291cmNlP24uc291cmNlLmZyYW1lRWxlbWVudDpudWxsOyFlfHxmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvcnQ9dCx0aGlzLmlkPTAsdGhpcy5yZXNwb25zZVdhaXRzPW5ldyBNYXAsdGhpcy5saXN0ZW5lcnM9bmV3IE1hcCx0aGlzLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZT0+dGhpcy5vbk1lc3NhZ2UoZSkpfWxpc3Rlbih0LGUpe3RoaXMubGlzdGVuZXJzLnNldCh0LGUpfXVubGlzdGVuKHQpe3RoaXMubGlzdGVuZXJzLmRlbGV0ZSh0KX1hc3luYyBvbk1lc3NhZ2UodCl7bGV0IGU9SlNPTi5wYXJzZSh0LmRhdGEpLGk9ZS50eXBlLHI9ZS5pZCxvPWUucGF5bG9hZCxzPWUuZXJyb3I7aWYoZS5pc1JlcGx5KXtpZighdGhpcy5yZXNwb25zZVdhaXRzLmhhcyhyKSlyZXR1cm47bGV0e3Jlc29sdmU6dSxyZWplY3Q6cH09dGhpcy5yZXNwb25zZVdhaXRzLmdldChyKTtyZXR1cm4gdGhpcy5yZXNwb25zZVdhaXRzLmRlbGV0ZShyKSx2b2lkKHM/cChuZXcgRXJyb3IocykpOnUobykpfWxldCBsPW51bGwsYz1udWxsO2lmKHRoaXMubGlzdGVuZXJzLmhhcyhpKSl7bGV0IHU9dGhpcy5saXN0ZW5lcnMuZ2V0KGkpO3RyeXtsPWF3YWl0IHUobyl9Y2F0Y2gocCl7Yz1wfX10aGlzLnBvc3RNZXNzYWdlKHt0eXBlOmksaWQ6cixwYXlsb2FkOmwsZXJyb3I6Yyxpc1JlcGx5OiEwfSl9cG9zdE1lc3NhZ2UodCl7dGhpcy5wb3J0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHQpKX1zZW5kTWVzc2FnZSh0LGUpe2xldCBpPXRoaXMuaWQrKztyZXR1cm4gdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTp0LGlkOmkscGF5bG9hZDplLGVycm9yOm51bGwsaXNSZXBseTohMX0pLG5ldyBQcm9taXNlKChvLHMpPT57dGhpcy5yZXNwb25zZVdhaXRzLnNldChpLHtyZXNvbHZlOm8scmVqZWN0OnN9KX0pfX0obik7WmguYWRkKGUpLEUxLnNldChlLHQpLG4uc3RhcnQoKTtmb3IobGV0W2kscl1vZiBuMil7bGV0IG89JFcocixlKTtlLmxpc3RlbihpLG8pfX0odCxlKX0pO3ZhciByMixLaD0oKCk9PntjbGFzcyBue2Jyb2FkY2FzdChlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2ZvcihsZXQgaSBvZiBaaClFMS5nZXQoaSkuaXNDb25uZWN0ZWR8fChaaC5kZWxldGUoaSksRTEuZGVsZXRlKGkpKTtsZXQgZT1bLi4uWmhdLm1hcChpPT5pLnNlbmRNZXNzYWdlKG4sdCkpO3JldHVybiBQcm9taXNlLmFsbChlKX0oZSxpKX1saXN0ZW4oZSxpKXshZnVuY3Rpb24obix0KXtuMi5zZXQobix0KTtmb3IobGV0IGUgb2YgWmgpe2xldCBpPSRXKHQsZSk7ZS5saXN0ZW4obixpKX19KGUsaSl9dW5saXN0ZW4oZSl7IWZ1bmN0aW9uKG4pe24yLmRlbGV0ZShuKTtmb3IobGV0IHQgb2YgWmgpdC51bmxpc3RlbihuKX0oZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFQxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmlwYz1lLHRoaXMuc3RvcmU9aX1pbml0KCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtc3RvcmFnZSIpO3RoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfVVJMX0RBVEEsaT0+e2lmKCFpKXJldHVybjtsZXQgcj1gcC4ke2kucGx1Z2luTmFtZX0uYCxvPXt9LHM9ZS50Zl9zdG9yYWdlLmdldFVybEhhc2hEaWN0KCk7Zm9yKGxldCBhIGluIHMpYS5zdGFydHNXaXRoKHIpJiYob1thLnN1YnN0cmluZyhyLmxlbmd0aCldPXNbYV0pO3JldHVybiBvfSksdGhpcy5zdG9yZS5zZWxlY3QoRmgpLnBpcGUoa2UoaT0+bnVsbCE9PWkpLFluKCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuaXBjLmJyb2FkY2FzdCh5ZC5EQVRBX1JFTE9BREVELHZvaWQgMCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhLaCksayhBZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEQxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmlwYz1lLHRoaXMuc3RvcmU9aX1pbml0KCl7bGV0IGU9dGhpcy5zdG9yZS5zZWxlY3QobHIpLnBpcGUoaG4oaT0+aT9kbihpLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChEdSx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoTihvPT5vLmZsYXQoKSksWW4oKG8scyk9Pm8ubGVuZ3RoPT09cy5sZW5ndGgmJm8uZXZlcnkoKGEsbCk9PnNbbF0uaWQ9PT1hLmlkKSksTihvPT5vLm1hcCgoe25hbWU6c30pPT5zKSkpOkh0KFtdKSkpO2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuUlVOU19DSEFOR0VELGkpfSksdGhpcy5pcGMubGlzdGVuKHlkLkdFVF9SVU5TLCgpPT5lLnBpcGUoWXQoMSkpLnRvUHJvbWlzZSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhLaCksayhBZSkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEkxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXtpLmluaXQoKSxlLmluaXQoKX1yZWdpc3RlclBsdWdpbklmcmFtZShlLGkpeyFmdW5jdGlvbihuLHQpe0pXLnNldChuLHtwbHVnaW5OYW1lOnR9KX0oZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhEMSksayhUMSkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0toLFQxLEQxXSxpbXBvcnRzOltJaCxHYSx3MV19KSxufSkoKSxKaD1fZSgiW0FsZXJ0XSBBbGVydCBSZXBvcnRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG43PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5hbGVydEFjdGlvbk1vZHVsZT1yLHRoaXMucmVwb3J0UmVnaXN0ZXJlZEFjdGlvbkFsZXJ0cyQ9YXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShOdChvPT57bGV0IHM9dGhpcy5hbGVydEFjdGlvbk1vZHVsZS5nZXRBbGVydEZyb21BY3Rpb24obyk7cyYmdGhpcy5zdG9yZS5kaXNwYXRjaChKaChzKSl9KSkse2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeG8pLGsoQWUpLGsoU2MpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJMGU9YnIoe2xhdGVzdEFsZXJ0Om51bGx9LHllKEpoLChuLHtsb2NhbGl6ZWRNZXNzYWdlOnQsZm9sbG93dXBBY3Rpb246ZX0pPT57bGV0IGk9e2xvY2FsaXplZE1lc3NhZ2U6dCxjcmVhdGVkOkRhdGUubm93KCl9O3JldHVybiBlJiYoaS5mb2xsb3d1cEFjdGlvbj1lKSx7Li4ubixsYXRlc3RBbGVydDppfX0pKTtmdW5jdGlvbiBpNyhuLHQpe3JldHVybiBJMGUobix0KX10cnl7cjI9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtyMj0hMX12YXIgJGgsUHYsQTEsYmYsaTIsR249KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybUlkPWUsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9ndyh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFyMikmJnR5cGVvZiBDU1M8InUiJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNCcm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh2YykpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHI3PVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIG8yKCl7aWYoJGgpcmV0dXJuICRoO2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gJGg9bmV3IFNldChyNyk7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gJGg9bmV3IFNldChyNy5maWx0ZXIodD0+KG4uc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuLnR5cGU9PT10KSkpfWZ1bmN0aW9uIHFvKG4pe3JldHVybiBmdW5jdGlvbigpe2lmKG51bGw9PVB2JiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5Qdj0hMH0pKX1maW5hbGx5e1B2PVB2fHwhMX1yZXR1cm4gUHZ9KCk/bjohIW4uY2FwdHVyZX1mdW5jdGlvbiBSMSgpe2lmKG51bGw9PWJmKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gYmY9ITE7aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSliZj0hMDtlbHNle2xldCBuPUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvO2JmPSEhbiYmIS9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50ZXN0KG4udG9TdHJpbmcoKSl9fXJldHVybiBiZn1mdW5jdGlvbiBlZygpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4gMDtpZihudWxsPT1BMSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1uLnN0eWxlO24uZGlyPSJydGwiLHQud2lkdGg9IjFweCIsdC5vdmVyZmxvdz0iYXV0byIsdC52aXNpYmlsaXR5PSJoaWRkZW4iLHQucG9pbnRlckV2ZW50cz0ibm9uZSIsdC5wb3NpdGlvbj0iYWJzb2x1dGUiO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGk9ZS5zdHlsZTtpLndpZHRoPSIycHgiLGkuaGVpZ2h0PSIxcHgiLG4uYXBwZW5kQ2hpbGQoZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKSxBMT0wLDA9PT1uLnNjcm9sbExlZnQmJihuLnNjcm9sbExlZnQ9MSxBMT0wPT09bi5zY3JvbGxMZWZ0PzE6Miksbi5yZW1vdmUoKX1yZXR1cm4gQTF9ZnVuY3Rpb24gT3YoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gbWEobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24ga3YoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24gdnIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBSdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIF9pKG4sdD0wKXtyZXR1cm4gczIobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gczIobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiB0ZyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBZcihuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBIcyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIE1lP24ubmF0aXZlRWxlbWVudDpufXZhciBpZyxhNz0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFAwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9SHMoZSk7cmV0dXJuIG5ldyBLdChyPT57bGV0IHM9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57cy51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgSWUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGE3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUDE9KCgpPT57Y2xhc3MgbntnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuX3Vuc3Vic2NyaWJlKCk6dGhpcy5fc3Vic2NyaWJlKCl9Z2V0IGRlYm91bmNlKCl7cmV0dXJuIHRoaXMuX2RlYm91bmNlfXNldCBkZWJvdW5jZShlKXt0aGlzLl9kZWJvdW5jZT1faShlKSx0aGlzLl9zdWJzY3JpYmUoKX1jb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEYsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKHdyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFAwZSksQyhNZSksQyhhdCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksbmc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbYTddfSksbn0pKCksYzc9bmV3IFNldCxPMGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6RjBlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighYzcuaGFzKG4pKXRyeXtpZ3x8KChpZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaWcpKSxpZy5zaGVldCYmKGlnLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCksYzcuYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhHbikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIEYwZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBGdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgSWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIGQ3KHRnKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89ZG4oZDcodGcoZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1KZChvLnBpcGUoWXQoMSkpLG8ucGlwZShpYSgxKSx3cigwKSkpLG8ucGlwZShOKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IEt0KHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZShxbihpKSxOKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhPMGUpLGsoYXQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBkNyhuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIEYxKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIF83PSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsTzE9ImNkay1kZXNjcmliZWRieS1ob3N0IixjMj0wLEwxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrYzIrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPWFpKFlwKSsiLSIrYzIrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPWEyKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhwNyhpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89YTIoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7TzF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoTzEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3A3KHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KGEyKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9RjEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoXzcpKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPUYxKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKE8xLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9RjEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShPMSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPUYxKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSkscz1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhcyYmLTEhPXIuaW5kZXhPZihzKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEx0KSxrKEduKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gYTIobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gcDcobix0KXtuLmlkfHwobi5pZD1gJHtfN30tJHt0fS0ke2MyKyt9YCl9dmFyIE4xPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgSWUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9wYWdlVXBBbmREb3duPXtlbmFibGVkOiExLGRlbHRhOjEwfSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgSWUsdGhpcy5jaGFuZ2U9bmV3IEllLHQgaW5zdGFuY2VvZiBPYSYmKHRoaXMuX2l0ZW1DaGFuZ2VzU3Vic2NyaXB0aW9uPXQuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuX2FjdGl2ZUl0ZW0pe2xldCByPWUudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7cj4tMSYmciE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1yKX19KSl9c2tpcFByZWRpY2F0ZSh0KXtyZXR1cm4gdGhpcy5fc2tpcFByZWRpY2F0ZUZuPXQsdGhpc313aXRoV3JhcCh0PSEwKXtyZXR1cm4gdGhpcy5fd3JhcD10LHRoaXN9d2l0aFZlcnRpY2FsT3JpZW50YXRpb24odD0hMCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsPXQsdGhpc313aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc313aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyh0KXtyZXR1cm4gdGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cz10LHRoaXN9d2l0aFR5cGVBaGVhZCh0PTIwMCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj10aGlzLl9sZXR0ZXJLZXlTdHJlYW0ucGlwZShOdChlPT50aGlzLl9wcmVzc2VkTGV0dGVycy5wdXNoKGUpKSx3cih0KSxrZSgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjApLE4oKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmpvaW4oIiIpKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7Zm9yKGxldCByPTE7cjxpLmxlbmd0aCsxO3IrKyl7bGV0IG89KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCtyKSVpLmxlbmd0aCxzPWlbb107aWYoIXRoaXMuX3NraXBQcmVkaWNhdGVGbihzKSYmMD09PXMuZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKGUpKXt0aGlzLnNldEFjdGl2ZUl0ZW0obyk7YnJlYWt9fXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc31jYW5jZWxUeXBlYWhlYWQoKXtyZXR1cm4gdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpc313aXRoSG9tZUFuZEVuZCh0PSEwKXtyZXR1cm4gdGhpcy5faG9tZUFuZEVuZD10LHRoaXN9d2l0aFBhZ2VVcERvd24odD0hMCxlPTEwKXtyZXR1cm4gdGhpcy5fcGFnZVVwQW5kRG93bj17ZW5hYmxlZDp0LGRlbHRhOmV9LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9hY3RpdmVJdGVtO3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KSx0aGlzLl9hY3RpdmVJdGVtIT09ZSYmdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgpfW9uS2V5ZG93bih0KXtsZXQgZT10LmtleUNvZGUscj1bImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiXS5ldmVyeShvPT4hdFtvXXx8dGhpcy5fYWxsb3dlZE1vZGlmaWVyS2V5cy5pbmRleE9mKG8pPi0xKTtzd2l0Y2goZSl7Y2FzZSA5OnJldHVybiB2b2lkIHRoaXMudGFiT3V0Lm5leHQoKTtjYXNlIDQwOmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzg6aWYodGhpcy5fdmVydGljYWwmJnIpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzk6aWYodGhpcy5faG9yaXpvbnRhbCYmcil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk6dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM3OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldE5leHRJdGVtQWN0aXZlKCk6dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNjppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM1OmlmKHRoaXMuX2hvbWVBbmRFbmQmJnIpe3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzMzppZih0aGlzLl9wYWdlVXBBbmREb3duLmVuYWJsZWQmJnIpe2xldCBvPXRoaXMuX2FjdGl2ZUl0ZW1JbmRleC10aGlzLl9wYWdlVXBBbmREb3duLmRlbHRhO3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KG8+MD9vOjAsMSk7YnJlYWt9cmV0dXJuO2Nhc2UgMzQ6aWYodGhpcy5fcGFnZVVwQW5kRG93bi5lbmFibGVkJiZyKXtsZXQgbz10aGlzLl9hY3RpdmVJdGVtSW5kZXgrdGhpcy5fcGFnZVVwQW5kRG93bi5kZWx0YSxzPXRoaXMuX2dldEl0ZW1zQXJyYXkoKS5sZW5ndGg7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgobzxzP286cy0xLC0xKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCgocnx8dnIodCwic2hpZnRLZXkiKSkmJih0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTcpJiZ0aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX1nZXQgYWN0aXZlSXRlbUluZGV4KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW1JbmRleH1nZXQgYWN0aXZlSXRlbSgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfWlzVHlwaW5nKCl7cmV0dXJuIHRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wfXNldEZpcnN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9c2V0TGFzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9pdGVtcy5sZW5ndGgtMSwtMSl9c2V0TmV4dEl0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MD90aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKDEpfXNldFByZXZpb3VzSXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9dXBkYXRlQWN0aXZlSXRlbSh0KXtsZXQgZT10aGlzLl9nZXRJdGVtc0FycmF5KCksaT0ibnVtYmVyIj09dHlwZW9mIHQ/dDplLmluZGV4T2YodCk7dGhpcy5fYWN0aXZlSXRlbT1lW2ldPz9udWxsLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1pfWRlc3Ryb3koKXt0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9pdGVtQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW0uY29tcGxldGUoKSx0aGlzLnRhYk91dC5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fcHJlc3NlZExldHRlcnM9W119X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IGk9MTtpPD1lLmxlbmd0aDtpKyspe2xldCByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCppK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKGlbdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKGlbdF0pOylpZighaVt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIE9hP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319LG9nPWNsYXNzIGV4dGVuZHMgTjF7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fSxzZz1jbGFzcyBleHRlbmRzIE4xe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX0sYWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lfWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISEobi5vZmZzZXRXaWR0aHx8bi5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldENsaWVudFJlY3RzJiZuLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oZSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7bGV0IGk9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBuLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShlKSk7aWYoaSYmKC0xPT09ZjcoaSl8fCF0aGlzLmlzVmlzaWJsZShpKSkpcmV0dXJuITE7bGV0IHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89ZjcoZSk7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKT8tMSE9PW86ISgiaWZyYW1lIj09PXJ8fCJvYmplY3QiPT09cnx8dGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZT0iaW5wdXQiPT09dCYmbi50eXBlO3JldHVybiJ0ZXh0Ij09PWV8fCJwYXNzd29yZCI9PT1lfHwic2VsZWN0Ij09PXR8fCJ0ZXh0YXJlYSI9PT10fShlKSkmJigiYXVkaW8iPT09cj8hIWUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpJiYtMSE9PW86InZpZGVvIj09PXI/LTEhPT1vJiYobnVsbCE9PW98fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGUuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTplLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShlLGkpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJpbnB1dCI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJiJoaWRkZW4iPT1uLnR5cGV9KG4pJiYoZnVuY3Rpb24obil7bGV0IHQ9bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10fHwic2VsZWN0Ij09PXR8fCJidXR0b24iPT09dHx8InRleHRhcmVhIj09PXR9KG4pfHxmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImEiPT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KG4pJiZuLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShuKXx8bi5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxiNyhuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYoaT8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gYjcobil7aWYoIW4uaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx2b2lkIDA9PT1uLnRhYkluZGV4KXJldHVybiExO2xldCB0PW4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIXR8fGlzTmFOKHBhcnNlSW50KHQsMTApKSl9ZnVuY3Rpb24gZjcobil7aWYoIWI3KG4pKXJldHVybiBudWxsO2xldCB0PXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKHQpPy0xOnR9dmFyIE52PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kb2N1bWVudD1yfWNyZWF0ZShlLGk9ITEpe3JldHVybiBuZXcgY2xhc3N7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IodCxlLGkscixvPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsb3x8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucmVtb3ZlKCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihlKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSl7bGV0IGk9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZSk7cmV0dXJuIGk/LmZvY3VzKHQpLCEhaX1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW47Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPWVbaV0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2xldCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoWXQoMSkpLnN1YnNjcmliZSh0KX19KGUsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoYWcpLGsoYXQpLGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBMdihuKXtyZXR1cm4gMD09PW4uYnV0dG9uc3x8MD09PW4ub2Zmc2V0WCYmMD09PW4ub2Zmc2V0WX1mdW5jdGlvbiBCdihuKXtsZXQgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfW5ldyBpZSgiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpO3ZhciBpX2U9bmV3IGllKCJjZGstaW5wdXQtbW9kYWxpdHktZGV0ZWN0b3Itb3B0aW9ucyIpLHJfZT17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0scmc9cW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLG9fZT0oKCk9PntjbGFzcyBue2dldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IEFpKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXM9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKGE9PmE9PT1zLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW1hKHMpKX0sdGhpcy5fb25Nb3VzZWRvd249cz0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChMdihzKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9bWEocykpfSx0aGlzLl9vblRvdWNoc3RhcnQ9cz0+e0J2KHMpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW1hKHMpKX0sdGhpcy5fb3B0aW9ucz17Li4ucl9lLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKGlhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShZbigpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLHJnKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24scmcpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LHJnKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kYWxpdHkuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleWRvd24scmcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24scmcpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxyZykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSxrKGF0KSxrKEx0KSxrKGlfZSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksc19lPW5ldyBpZSgibGl2ZUFubm91bmNlckVsZW1lbnQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksbF9lPW5ldyBpZSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIiksY19lPTAsVnY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbGl2ZUVsZW1lbnQ9ZXx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZShlLC4uLmkpe2xldCBvLHMscj10aGlzLl9kZWZhdWx0T3B0aW9ucztyZXR1cm4gMT09PWkubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGlbMF0/cz1pWzBdOltvLHNdPWksdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPXImJnIucG9saXRlbmVzcz9yLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PXMmJnImJihzPXIuZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9saXZlRWxlbWVudC5pZCYmdGhpcy5fZXhwb3NlQW5ub3VuY2VyVG9Nb2RhbHModGhpcy5fbGl2ZUVsZW1lbnQuaWQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2UoYT0+dGhpcy5fY3VycmVudFJlc29sdmU9YSkpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIHMmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLHMpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksci5pZD0iY2RrLWxpdmUtYW5ub3VuY2VyLSIrY19lKyssdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfV9leHBvc2VBbm5vdW5jZXJUb01vZGFscyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdib2R5ID4gLmNkay1vdmVybGF5LWNvbnRhaW5lciBbYXJpYS1tb2RhbD0idHJ1ZSJdJyk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0scz1vLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIik7cz8tMT09PXMuaW5kZXhPZihlKSYmby5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIscysiICIrZSk6by5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHNfZSw4KSxrKGF0KSxrKEx0KSxrKGxfZSw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZF9lPW5ldyBpZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksazE9cW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLFhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgSWUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1hPT57Zm9yKGxldCBjPW1hKGEpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PWEudHlwZT90aGlzLl9vbkZvY3VzKGEsYyk6dGhpcy5fb25CbHVyKGEsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1zPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1IcyhlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4gSHQobnVsbCk7bGV0IG89ZnVuY3Rpb24obil7aWYoZnVuY3Rpb24oKXtpZihudWxsPT1pMil7bGV0IG49dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7aTI9ISghbnx8IW4uY3JlYXRlU2hhZG93Um9vdCYmIW4uYXR0YWNoU2hhZG93KX1yZXR1cm4gaTJ9KCkpe2xldCB0PW4uZ2V0Um9vdE5vZGU/bi5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZTaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gdH1yZXR1cm4gbnVsbH0ocil8fHRoaXMuX2dldERvY3VtZW50KCkscz10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYocylyZXR1cm4gaSYmKHMuY2hlY2tDaGlsZHJlbj0hMCkscy5zdWJqZWN0O2xldCBhPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgSWUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1IcyhlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89SHMoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFthLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChhLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPW1hKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGsxKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsazEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixrMSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGsxKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoYXQpLGsoR24pLGsob19lKSxrKEx0LDgpLGsoZF9lLDgpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx5Nz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgRn1nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhYcikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxtNz0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLGg3PSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsbDI9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIsXzI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPWFpKEZ2KS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShsMixtNyxoNyksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQobDIsbTcpOjI9PT1pJiZlLmFkZChsMixoNyl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSxrKEx0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbGc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKF8yKSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W25nXX0pLG59KSgpLHVfZT1uZXcgaWUoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBhaShMdCl9fSksZl9lPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLFhpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRixlJiYodGhpcy52YWx1ZT1mdW5jdGlvbihuKXtsZXQgdD1uPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT10JiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT9mX2UudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09dD8icnRsIjoibHRyIn0oKGUuYm9keT9lLmJvZHkuZGlyOm51bGwpfHwoZS5kb2N1bWVudEVsZW1lbnQ/ZS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh1X2UsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE91PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxoX2U9WyJ0ZXh0Il07ZnVuY3Rpb24gZ19lKG4sdCl7aWYoMSZuJiZQKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDYpLDImbil7bGV0IGU9dygpO18oInN0YXRlIixlLnNlbGVjdGVkPyJjaGVja2VkIjoidW5jaGVja2VkIikoImRpc2FibGVkIixlLmRpc2FibGVkKX19ZnVuY3Rpb24gX19lKG4sdCl7MSZuJiZQKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDcpLDImbiYmXygiZGlzYWJsZWQiLHcoKS5kaXNhYmxlZCl9ZnVuY3Rpb24gYl9lKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiKCIsZS5ncm91cC5sYWJlbCwiKSIpfX12YXIgdl9lPVtbWyJtYXQtaWNvbiJdXSwiKiJdLHlfZT1bIm1hdC1pY29uIiwiKiJdLEU3PShuZXcgeWwoIjE1LjIuOSIpLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlNUQU5EQVJEX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkiLG4uREVDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC4wLDAuMCwwLjIsMSkiLG4uQUNDRUxFUkFUSU9OX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwxLDEpIixuLlNIQVJQX0NVUlZFPSJjdWJpYy1iZXppZXIoMC40LDAuMCwwLjYsMSkiLG59KSgpKSxUNz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5DT01QTEVYPSIzNzVtcyIsbi5FTlRFUklORz0iMjI1bXMiLG4uRVhJVElORz0iMTk1bXMiLG59KSgpLENfZT1uZXcgaWUoIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGZuPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3Nhbml0eUNoZWNrcz1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMSxlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3N8fCh0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSEwKX1fY2hlY2tJc0VuYWJsZWQoZSl7cmV0dXJuIWt2KCkmJigiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLl9zYW5pdHlDaGVja3M/dGhpcy5fc2FuaXR5Q2hlY2tzOiEhdGhpcy5fc2FuaXR5Q2hlY2tzW2VdKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhfMiksayhDX2UsOCksayhMdCkpfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltPdSxPdV19KSxufSkoKTtmdW5jdGlvbiBzbyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQodCl7dGhpcy5fZGlzYWJsZWQ9UnQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9fX1mdW5jdGlvbiB6cyhuLHQpe3JldHVybiBjbGFzcyBleHRlbmRzIG57Z2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuX2NvbG9yfXNldCBjb2xvcihlKXtsZXQgaT1lfHx0aGlzLmRlZmF1bHRDb2xvcjtpIT09dGhpcy5fY29sb3ImJih0aGlzLl9jb2xvciYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYG1hdC0ke3RoaXMuX2NvbG9yfWApLGkmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGBtYXQtJHtpfWApLHRoaXMuX2NvbG9yPWkpfWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fX19ZnVuY3Rpb24gdXMobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntnZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9UnQodCl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX19fWZ1bmN0aW9uIGt1KG4sdD0wKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2dldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPy0xOnRoaXMuX3RhYkluZGV4fXNldCB0YWJJbmRleChlKXt0aGlzLl90YWJJbmRleD1udWxsIT1lP19pKGUpOnRoaXMuZGVmYXVsdFRhYkluZGV4fWNvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuX3RhYkluZGV4PXQsdGhpcy5kZWZhdWx0VGFiSW5kZXg9dH19fWZ1bmN0aW9uIEIxKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57dXBkYXRlRXJyb3JTdGF0ZSgpe2xldCB0PXRoaXMuZXJyb3JTdGF0ZSxvPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtvIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1vLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5lcnJvclN0YXRlPSExfX19ZnVuY3Rpb24gVjEobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1bXSx0aGlzLmluaXRpYWxpemVkPW5ldyBLdChlPT57dGhpcy5faXNJbml0aWFsaXplZD90aGlzLl9ub3RpZnlTdWJzY3JpYmVyKGUpOnRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5wdXNoKGUpfSl9X21hcmtJbml0aWFsaXplZCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLmZvckVhY2godGhpcy5fbm90aWZ5U3Vic2NyaWJlciksdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPW51bGx9X25vdGlmeVN1YnNjcmliZXIodCl7dC5uZXh0KCksdC5jb21wbGV0ZSgpfX19bmV3IGllKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGFpKGNkKX19KSxuZXcgaWUoIm1hdC1kYXRlLWZvcm1hdHMiKTt2YXIgSDE9KCgpPT57Y2xhc3Mgbntpc0Vycm9yU3RhdGUoZSxpKXtyZXR1cm4hIShlJiZlLmludmFsaWQmJihlLnRvdWNoZWR8fGkmJmkuc3VibWl0dGVkKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHg3PXFvKHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSxDNz17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sTTc9cW8oe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHc3PVsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLFM3PVsibW91c2V1cCIsIm1vdXNlbGVhdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIl0sdmY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fdGFyZ2V0PXQsdGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09cix0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1IcyhpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uQzcsLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgcz1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsciksYT10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLGQuc3R5bGUubGVmdD1hLXMrInB4IixkLnN0eWxlLnRvcD1sLXMrInB4IixkLnN0eWxlLmhlaWdodD0yKnMrInB4IixkLnN0eWxlLndpZHRoPTIqcysicHgiLG51bGwhPWkuY29sb3ImJihkLnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSxkLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGQpO2xldCB1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGQpLGY9dS50cmFuc2l0aW9uRHVyYXRpb24sbT0ibm9uZSI9PT11LnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWZ8fCIwcywgMHMiPT09Znx8MD09PXIud2lkdGgmJjA9PT1yLmhlaWdodCxiPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLGQsaSxtKTtkLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsYi5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9Yik7bGV0IE09bnVsbDtyZXR1cm4hbSYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHk9KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24oYikseD0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShiKTtkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHkpLGQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseCksTT17b25UcmFuc2l0aW9uRW5kOnksb25UcmFuc2l0aW9uQ2FuY2VsOnh9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQoYixNKSwobXx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKGIpLGJ9ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5DNywuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1Icyh0KTshdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwhZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdzcuZm9yRWFjaChpPT57dmYuX2V2ZW50TWFuYWdlci5hZGRIYW5kbGVyKHRoaXMuX25nWm9uZSxpLGUsdGhpcyl9KSl9aGFuZGxlRXZlbnQodCl7Im1vdXNlZG93biI9PT10LnR5cGU/dGhpcy5fb25Nb3VzZWRvd24odCk6InRvdWNoc3RhcnQiPT09dC50eXBlP3RoaXMuX29uVG91Y2hTdGFydCh0KTp0aGlzLl9vblBvaW50ZXJVcCgpLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntTNy5mb3JFYWNoKGU9Pnt0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsdGhpcyxNNyl9KX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQ9ITApfV9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKHQpezA9PT10LnN0YXRlP3RoaXMuX3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCk6Mj09PXQuc3RhdGUmJnRoaXMuX2Rlc3Ryb3lSaXBwbGUodCl9X3N0YXJ0RmFkZU91dFRyYW5zaXRpb24odCl7bGV0IGU9dD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUse3BlcnNpc3RlbnQ6aX09dC5jb25maWc7dC5zdGF0ZT0xLCFpJiYoIWV8fCF0aGlzLl9pc1BvaW50ZXJEb3duKSYmdC5mYWRlT3V0KCl9X2Rlc3Ryb3lSaXBwbGUodCl7bGV0IGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5nZXQodCk/P251bGw7dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSx0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdC5zdGF0ZT0zLG51bGwhPT1lJiYodC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGUub25UcmFuc2l0aW9uRW5kKSx0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIsZS5vblRyYW5zaXRpb25DYW5jZWwpKSx0LmVsZW1lbnQucmVtb3ZlKCl9X29uTW91c2Vkb3duKHQpe2xldCBlPUx2KHQpLGk9dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCYmRGF0ZS5ub3coKTx0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50KzgwMDshdGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkJiYhZSYmIWkmJih0aGlzLl9pc1BvaW50ZXJEb3duPSEwLHRoaXMuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfV9vblRvdWNoU3RhcnQodCl7aWYoIXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIUJ2KHQpKXt0aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksdGhpcy5faXNQb2ludGVyRG93bj0hMDtsZXQgZT10LmNoYW5nZWRUb3VjaGVzO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZmFkZUluUmlwcGxlKGVbaV0uY2xpZW50WCxlW2ldLmNsaWVudFksdGhpcy5fdGFyZ2V0LnJpcHBsZUNvbmZpZyl9fV9vblBvaW50ZXJVcCgpeyF0aGlzLl9pc1BvaW50ZXJEb3dufHwodGhpcy5faXNQb2ludGVyRG93bj0hMSx0aGlzLl9nZXRBY3RpdmVSaXBwbGVzKCkuZm9yRWFjaCh0PT57IXQuY29uZmlnLnBlcnNpc3RlbnQmJigxPT09dC5zdGF0ZXx8dC5jb25maWcudGVybWluYXRlT25Qb2ludGVyVXAmJjA9PT10LnN0YXRlKSYmdC5mYWRlT3V0KCl9KSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXtsZXQgdD10aGlzLl90cmlnZ2VyRWxlbWVudDt0JiYodzcuZm9yRWFjaChlPT52Zi5fZXZlbnRNYW5hZ2VyLnJlbW92ZUhhbmRsZXIoZSx0LHRoaXMpKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkJiZTNy5mb3JFYWNoKGU9PnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHRoaXMsTTcpKSl9fTt2Zi5fZXZlbnRNYW5hZ2VyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2V2ZW50cz1uZXcgTWFwLHRoaXMuX2RlbGVnYXRlRXZlbnRIYW5kbGVyPXQ9PntsZXQgZT1tYSh0KTtlJiZ0aGlzLl9ldmVudHMuZ2V0KHQudHlwZSk/LmZvckVhY2goKGkscik9Pnsocj09PWV8fHIuY29udGFpbnMoZSkpJiZpLmZvckVhY2gobz0+by5oYW5kbGVFdmVudCh0KSl9KX19YWRkSGFuZGxlcih0LGUsaSxyKXtsZXQgbz10aGlzLl9ldmVudHMuZ2V0KGUpO2lmKG8pe2xldCBzPW8uZ2V0KGkpO3M/cy5hZGQocik6by5zZXQoaSxuZXcgU2V0KFtyXSkpfWVsc2UgdGhpcy5fZXZlbnRzLnNldChlLG5ldyBNYXAoW1tpLG5ldyBTZXQoW3JdKV1dKSksdC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcix4Nyl9KX1yZW1vdmVIYW5kbGVyKHQsZSxpKXtsZXQgcj10aGlzLl9ldmVudHMuZ2V0KHQpO2lmKCFyKXJldHVybjtsZXQgbz1yLmdldChlKTshb3x8KG8uZGVsZXRlKGkpLDA9PT1vLnNpemUmJnIuZGVsZXRlKGUpLDA9PT1yLnNpemUmJih0aGlzLl9ldmVudHMuZGVsZXRlKHQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLl9kZWxlZ2F0ZUV2ZW50SGFuZGxlcix4NykpKX19O3ZhciB5Mj1uZXcgaWUoIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxtbz0oKCk9PntjbGFzcyBue2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1jb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9hbmltYXRpb25Nb2RlPXMsdGhpcy5yYWRpdXM9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuX2dsb2JhbE9wdGlvbnM9b3x8e30sdGhpcy5fcmlwcGxlUmVuZGVyZXI9bmV3IHZmKHRoaXMsaSxlLHIpfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9ZmFkZU91dEFsbCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl9Z2V0IHJpcHBsZUNvbmZpZygpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjp7Li4udGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sLi4uIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06e30sLi4udGhpcy5hbmltYXRpb259LHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXB9fWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhIXRoaXMuX2dsb2JhbE9wdGlvbnMuZGlzYWJsZWR9X3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpeyF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pc0luaXRpYWxpemVkJiZ0aGlzLl9yaXBwbGVSZW5kZXJlci5zZXR1cFRyaWdnZXJFdmVudHModGhpcy50cmlnZ2VyKX1sYXVuY2goZSxpPTAscil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZShlLGksey4uLnRoaXMucmlwcGxlQ29uZmlnLC4uLnJ9KTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5lfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoYXQpLEMoR24pLEMoeTIsOCksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1yaXBwbGUiLCIiXSxbIiIsIm1hdFJpcHBsZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1yaXBwbGUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixpLnVuYm91bmRlZCl9LGlucHV0czp7Y29sb3I6WyJtYXRSaXBwbGVDb2xvciIsImNvbG9yIl0sdW5ib3VuZGVkOlsibWF0UmlwcGxlVW5ib3VuZGVkIiwidW5ib3VuZGVkIl0sY2VudGVyZWQ6WyJtYXRSaXBwbGVDZW50ZXJlZCIsImNlbnRlcmVkIl0scmFkaXVzOlsibWF0UmlwcGxlUmFkaXVzIiwicmFkaXVzIl0sYW5pbWF0aW9uOlsibWF0UmlwcGxlQW5pbWF0aW9uIiwiYW5pbWF0aW9uIl0sZGlzYWJsZWQ6WyJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIl0sdHJpZ2dlcjpbIm1hdFJpcHBsZVRyaWdnZXIiLCJ0cmlnZ2VyIl19LGV4cG9ydEFzOlsibWF0UmlwcGxlIl19KSxufSkoKSxCbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sZm5dfSksbn0pKCksRV9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fYW5pbWF0aW9uTW9kZT1lLHRoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmFwcGVhcmFuY2U9ImZ1bGwifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGhpLDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsImluZGV0ZXJtaW5hdGUiPT09aS5zdGF0ZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCIsImNoZWNrZWQiPT09aS5zdGF0ZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwiLCJtaW5pbWFsIj09PWkuYXBwZWFyYW5jZSkoIm1hdC1wc2V1ZG8tY2hlY2tib3gtZnVsbCIsImZ1bGwiPT09aS5hcHBlYXJhbmNlKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLGJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7bGVmdDoxcHg7b3BhY2l0eToxO2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQ6OmFmdGVye2xlZnQ6MXB4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7Ym9yZGVyOjJweCBzb2xpZH0ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5tYXQtcHNldWRvLWNoZWNrYm94LW1pbmltYWwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt3aWR0aDoxNHB4O2hlaWdodDo2cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dG9wOi00LjI0MjY0MDY4NzFweDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDttYXJnaW46YXV0b30ubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjhweDt3aWR0aDoxNnB4fS5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGwubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt3aWR0aDoxMHB4O2hlaWdodDo0cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dG9wOi0yLjgyODQyNzEyNDdweDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDttYXJnaW46YXV0b30ubWF0LXBzZXVkby1jaGVja2JveC1mdWxsLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjZweDt3aWR0aDoxMnB4fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFRfZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm5dfSksbn0pKCksenY9bmV3IGllKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxVdj0oc28oY2xhc3N7fSksbmV3IGllKCJNYXRPcHRncm91cCIpKSxEX2U9MCxIdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX0sSV9lPSgoKT0+e2NsYXNzIG57Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGUpfWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IpfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3BhcmVudD1yLHRoaXMuZ3JvdXA9byx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT0iIix0aGlzLmlkPSJtYXQtb3B0aW9uLSIrRF9lKyssdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgRix0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IEllfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fdGV4dD8ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKGUsaSl7bGV0IHI9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2Ygci5mb2N1cyYmci5mb2N1cyhpKX1zZXRBY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfXNldEluYWN0aXZlU3R5bGVzKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIXZyKGUpJiYodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfV9zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdDaGVja2VkKCl7aWYodGhpcy5fc2VsZWN0ZWQpe2xldCBlPXRoaXMudmlld1ZhbHVlO2UhPT10aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlJiYodGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPWUpfX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfV9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoZT0hMSl7dGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBIdih0aGlzLGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShoX2UsNyksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fdGV4dD1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksVXM9KCgpPT57Y2xhc3MgbiBleHRlbmRzIElfZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQygkdCksQyh6diw4KSxDKFV2LDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1tZGMtb3B0aW9uIiwibWRjLWxpc3QtaXRlbSJdLGhvc3RWYXJzOjExLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJihqbygiaWQiLGkuaWQpLEJlKCJhcmlhLXNlbGVjdGVkIixpLnNlbGVjdGVkKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgibWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSIsaS5tdWx0aXBsZSkoIm1hdC1tZGMtb3B0aW9uLWFjdGl2ZSIsaS5hY3RpdmUpKCJtZGMtbGlzdC1pdGVtLS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxleHBvcnRBczpbIm1hdE9wdGlvbiJdLGZlYXR1cmVzOltLZV0sbmdDb250ZW50U2VsZWN0b3JzOnlfZSxkZWNsczo4LHZhcnM6NSxjb25zdHM6W1siY2xhc3MiLCJtYXQtbWRjLW9wdGlvbi1wc2V1ZG8tY2hlY2tib3giLDMsInN0YXRlIiwiZGlzYWJsZWQiLDQsIm5nSWYiXSxbMSwibWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0Il0sWyJ0ZXh0IiwiIl0sWyJjbGFzcyIsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsInN0YXRlIiwiY2hlY2tlZCIsImFwcGVhcmFuY2UiLCJtaW5pbWFsIiwzLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLW9wdGlvbi1yaXBwbGUiLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsic3RhdGUiLCJjaGVja2VkIiwiYXBwZWFyYW5jZSIsIm1pbmltYWwiLDEsIm1hdC1tZGMtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywiZGlzYWJsZWQiXSxbMSwiY2RrLXZpc3VhbGx5LWhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKHZfZSksUygwLGdfZSwxLDIsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDApLHp0KDEpLGgoMiwic3BhbiIsMSwyKSx6dCg0LDEpLGcoKSxTKDUsX19lLDEsMSwibWF0LXBzZXVkby1jaGVja2JveCIsMyksUyg2LGJfZSwyLDEsInNwYW4iLDQpLFAoNywiZGl2Iiw1KSksMiZlJiYoXygibmdJZiIsaS5tdWx0aXBsZSksdig1KSxfKCJuZ0lmIiwhaS5tdWx0aXBsZSYmaS5zZWxlY3RlZCYmIWkuaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciksdigxKSxfKCJuZ0lmIixpLmdyb3VwJiZpLmdyb3VwLl9pbmVydCksdigxKSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZWR8fGkuZGlzYWJsZVJpcHBsZSkpfSxkZXBlbmRlbmNpZXM6W21vLEZlLEVfZV0sc3R5bGVzOlsnLm1hdC1tZGMtb3B0aW9ue2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHg7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7bWluLWhlaWdodDo0OHB4fS5tYXQtbWRjLW9wdGlvbjpmb2N1c3tvdXRsaW5lOm5vbmV9W2Rpcj1ydGxdIC5tYXQtbWRjLW9wdGlvbiwubWF0LW1kYy1vcHRpb25bZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fS5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVte2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWR7b3BhY2l0eTouMzg7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtb3B0Z3JvdXAgLm1hdC1tZGMtb3B0aW9uOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDozMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1vcHRncm91cCAubWF0LW1kYy1vcHRpb246bm90KC5tYXQtbWRjLW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDozMnB4fS5tYXQtbWRjLW9wdGlvbiAubWF0LWljb24sLm1hdC1tZGMtb3B0aW9uIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7bWFyZ2luLXJpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtb3B0aW9uIC5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3B0aW9uIC5tYXQtcHNldWRvLWNoZWNrYm94LWZ1bGx7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTZweH0ubWF0LW1kYy1vcHRpb24gLm1hdC1wc2V1ZG8tY2hlY2tib3gtbWluaW1hbHttYXJnaW4tbGVmdDoxNnB4O2ZsZXgtc2hyaW5rOjB9W2Rpcj1ydGxdIC5tYXQtbWRjLW9wdGlvbiAubWF0LXBzZXVkby1jaGVja2JveC1taW5pbWFse21hcmdpbi1yaWdodDoxNnB4O21hcmdpbi1sZWZ0OjB9Lm1hdC1tZGMtb3B0aW9uIC5tYXQtbWRjLW9wdGlvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHt3aGl0ZS1zcGFjZTpub3JtYWw7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Zm9udC1mYW1pbHk6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LW1kYy1vcHRpb24gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDphdXRvfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkOm5vdCgubWF0LW1kYy1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntyaWdodDphdXRvO2xlZnQ6MTZweH0ubWF0LW1kYy1vcHRpb24tYWN0aXZlIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gejEobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IHM9MDtzPG4rMTtzKyspaVtzXS5ncm91cCYmaVtzXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBVMShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBjZz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbQmwsUGUsZm4sVF9lXX0pLG59KSgpLEQ3PVsibWF0LWJ1dHRvbiIsIiJdLHgyPVtbWyIiLDgsIm1hdGVyaWFsLWljb25zIiwzLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIm1hdC1pY29uIiwzLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIiIsIm1hdEJ1dHRvbkljb24iLCIiLDMsImljb25Qb3NpdGlvbkVuZCIsIiJdXSwiKiIsW1siIiwiaWNvblBvc2l0aW9uRW5kIiwiIiw4LCJtYXRlcmlhbC1pY29ucyJdLFsibWF0LWljb24iLCJpY29uUG9zaXRpb25FbmQiLCIiXSxbIiIsIm1hdEJ1dHRvbkljb24iLCIiLCJpY29uUG9zaXRpb25FbmQiLCIiXV1dLEMyPVsiLm1hdGVyaWFsLWljb25zOm5vdChbaWNvblBvc2l0aW9uRW5kXSksIG1hdC1pY29uOm5vdChbaWNvblBvc2l0aW9uRW5kXSksIFttYXRCdXR0b25JY29uXTpub3QoW2ljb25Qb3NpdGlvbkVuZF0pIiwiKiIsIi5tYXRlcmlhbC1pY29uc1tpY29uUG9zaXRpb25FbmRdLCBtYXQtaWNvbltpY29uUG9zaXRpb25FbmRdLCBbbWF0QnV0dG9uSWNvbl1baWNvblBvc2l0aW9uRW5kXSJdLE0yPSIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOm5vdCgubWRjLWJ1dHRvbi0tb3V0bGluZWQpLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWljb24tYnV0dG9ue291dGxpbmU6c29saWQgMXB4fSIsSTc9WyJtYXQtaWNvbi1idXR0b24iLCIiXSxSX2U9WyIqIl0sT19lPVt7c2VsZWN0b3I6Im1hdC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWF0LW1kYy1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtZmxhdC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWRjLWJ1dHRvbi0tdW5lbGV2YXRlZCIsIm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtcmFpc2VkLWJ1dHRvbiIsbWRjQ2xhc3NlczpbIm1kYy1idXR0b24iLCJtZGMtYnV0dG9uLS1yYWlzZWQiLCJtYXQtbWRjLXJhaXNlZC1idXR0b24iXX0se3NlbGVjdG9yOiJtYXQtc3Ryb2tlZC1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtYnV0dG9uIiwibWRjLWJ1dHRvbi0tb3V0bGluZWQiLCJtYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiJdfSx7c2VsZWN0b3I6Im1hdC1mYWIiLG1kY0NsYXNzZXM6WyJtZGMtZmFiIiwibWF0LW1kYy1mYWIiXX0se3NlbGVjdG9yOiJtYXQtbWluaS1mYWIiLG1kY0NsYXNzZXM6WyJtZGMtZmFiIiwibWRjLWZhYi0tbWluaSIsIm1hdC1tZGMtbWluaS1mYWIiXX0se3NlbGVjdG9yOiJtYXQtaWNvbi1idXR0b24iLG1kY0NsYXNzZXM6WyJtZGMtaWNvbi1idXR0b24iLCJtYXQtbWRjLWljb24tYnV0dG9uIl19XSxrX2U9enMoc28odXMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksdzI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtfZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl9mb2N1c01vbml0b3I9YWkoWHIpLHRoaXMuX2lzRmFiPSExO2xldCBzPWUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7Zm9yKGxldCBhIG9mIE9fZSl0aGlzLl9oYXNIb3N0QXR0cmlidXRlcyhhLnNlbGVjdG9yKSYmYS5tZGNDbGFzc2VzLmZvckVhY2gobD0+e3MuYWRkKGwpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9Zm9jdXMoZT0icHJvZ3JhbSIsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfV9oYXNIb3N0QXR0cmlidXRlcyguLi5lKXtyZXR1cm4gZS5zb21lKGk9PnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5oYXNBdHRyaWJ1dGUoaSkpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShtbyw1KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGZlYXR1cmVzOltLZV19KSxufSkoKSxBNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdzJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5faGFsdERpc2FibGVkRXZlbnRzPXM9Pnt0aGlzLmRpc2FibGVkJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX1uZ09uSW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX0pfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtJcygpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGZlYXR1cmVzOltLZV19KSxufSkoKSxKaT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdzJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoYXQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImJ1dHRvbiIsIm1hdC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKEJlKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC11bnRoZW1lZCIsIWkuY29sb3IpKCJtYXQtbWRjLWJ1dHRvbi1iYXNlIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRCdXR0b24iXSxmZWF0dXJlczpbS2VdLGF0dHJzOkQ3LG5nQ29udGVudFNlbGVjdG9yczpDMixkZWNsczo4LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtZGMtYnV0dG9uX19sYWJlbCJdLFsxLCJtYXQtbWRjLWZvY3VzLWluZGljYXRvciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtbWRjLWJ1dHRvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbih4MiksUCgwLCJzcGFuIiwwKSx6dCgxKSxoKDIsInNwYW4iLDEpLHp0KDMsMSksZygpLHp0KDQsMiksUCg1LCJzcGFuIiwyKSg2LCJzcGFuIiwzKSg3LCJzcGFuIiw0KSksMiZlJiYobnQoIm1kYy1idXR0b25fX3JpcHBsZSIsIWkuX2lzRmFiKSgibWRjLWZhYl9fcmlwcGxlIixpLl9pc0ZhYiksdig2KSxfKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSl9LGRlcGVuZGVuY2llczpbbW9dLHN0eWxlczpbJy5tZGMtdG91Y2gtdGFyZ2V0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmV9Lm1kYy1lbGV2YXRpb24tb3ZlcmxheXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOmluaGVyaXQ7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5OnZhcigtLW1kYy1lbGV2YXRpb24tb3ZlcmxheS1vcGFjaXR5LCAwKTt0cmFuc2l0aW9uOm9wYWNpdHkgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6NjRweDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7bGluZS1oZWlnaHQ6aW5oZXJpdDt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO292ZXJmbG93OnZpc2libGU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWRjLWJ1dHRvbiAubWRjLWVsZXZhdGlvbi1vdmVybGF5e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowfS5tZGMtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH0ubWRjLWJ1dHRvbjphY3RpdmV7b3V0bGluZTpub25lfS5tZGMtYnV0dG9uOmhvdmVye2N1cnNvcjpwb2ludGVyfS5tZGMtYnV0dG9uOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1kYy1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb24sLm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19wcm9ncmVzcy1pbmRpY2F0b3J7Zm9udC1zaXplOjA7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTt0b3A6NTAlO2xlZnQ6NTAlO2xpbmUtaGVpZ2h0OmluaXRpYWx9Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVse3Bvc2l0aW9uOnJlbGF0aXZlfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKFxuICAgICAgMTAwJSArIDRweFxuICAgICk7d2lkdGg6Y2FsYyhcbiAgICAgIDEwMCUgKyA0cHhcbiAgICApO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWJ1dHRvbi5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1idXR0b246bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3tkaXNwbGF5OmJsb2NrfX0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWRjLWJ1dHRvbl9fbGFiZWwrLm1kYy1idXR0b25fX2ljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWJ1dHRvbl9fbGFiZWwrLm1kYy1idXR0b25fX2ljb24sLm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH1zdmcubWRjLWJ1dHRvbl9faWNvbntmaWxsOmN1cnJlbnRDb2xvcn0ubWRjLWJ1dHRvbi0tdG91Y2h7bWFyZ2luLXRvcDo2cHg7bWFyZ2luLWJvdHRvbTo2cHh9Lm1kYy1idXR0b257cGFkZGluZzowIDhweCAwIDhweH0ubWRjLWJ1dHRvbi0tdW5lbGV2YXRlZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtwYWRkaW5nOjAgMTZweCAwIDE2cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWQubWRjLWJ1dHRvbi0taWNvbi10cmFpbGluZ3twYWRkaW5nOjAgMTJweCAwIDE2cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWQubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNnB4IDAgMTJweH0ubWRjLWJ1dHRvbi0tcmFpc2Vke3RyYW5zaXRpb246Ym94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO3BhZGRpbmc6MCAxNnB4IDAgMTZweH0ubWRjLWJ1dHRvbi0tcmFpc2VkLm1kYy1idXR0b24tLWljb24tdHJhaWxpbmd7cGFkZGluZzowIDEycHggMCAxNnB4fS5tZGMtYnV0dG9uLS1yYWlzZWQubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNnB4IDAgMTJweH0ubWRjLWJ1dHRvbi0tb3V0bGluZWR7Ym9yZGVyLXN0eWxlOnNvbGlkO3RyYW5zaXRpb246Ym9yZGVyIDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1idXR0b24tLW91dGxpbmVkIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtdGV4dC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtdGV4dC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXJhaXNlZC1idXR0b257aGVpZ2h0OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpO2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3Vze2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZm9jdXMtY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1ob3Zlci1jb250YWluZXItZWxldmF0aW9uLCAwcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpub3QoOmRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1wcmVzc2VkLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpkaXNhYmxlZHtib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQsIDM2cHgpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSk7cGFkZGluZzowIDE1cHggMCAxNXB4O2JvcmRlci13aWR0aDp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtd2lkdGgsIDFweCl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b246bm90KDpkaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOmRpc2FibGVke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5tZGMtYnV0dG9uLS1pY29uLXRyYWlsaW5ne3BhZGRpbmc6MCAxMXB4IDAgMTVweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWRjLWJ1dHRvbi0taWNvbi1sZWFkaW5ne3BhZGRpbmc6MCAxNXB4IDAgMTFweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXt0b3A6LTFweDtsZWZ0Oi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweDtib3JkZXItd2lkdGg6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fdG91Y2h7bGVmdDpjYWxjKC0xICogdmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpKTt3aWR0aDpjYWxjKDEwMCUgKyAyICogdmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpKX0ubWF0LW1kYy1idXR0b24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b257LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcmlwcGxlLWNvbG9yKX0ubWF0LW1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVse3otaW5kZXg6MX0ubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifS5tYXQtbWRjLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLXJhaXNlZC1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0LC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6MDtyaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5tYXQtbWRjLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWJ1dHRvbj4ubWF0LWljb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6MS4xMjVyZW07aGVpZ2h0OjEuMTI1cmVtO3dpZHRoOjEuMTI1cmVtfVtkaXI9cnRsXSAubWF0LW1kYy1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfS5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEuMTI1cmVtO2hlaWdodDoxLjEyNXJlbTt3aWR0aDoxLjEyNXJlbTttYXJnaW4tbGVmdDotNHB4O21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6LTRweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbiwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0Oi00cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF17bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tcmlnaHQ6OHB4fS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle3RvcDotMXB4O2xlZnQ6LTFweDtib3R0b206LTFweDtyaWdodDotMXB4O2JvcmRlci13aWR0aDotMXB4fS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDNweCkgKiAtMSl9JywiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpub3QoLm1kYy1idXR0b24tLW91dGxpbmVkKSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b246bm90KC5tZGMtYnV0dG9uLS1vdXRsaW5lZCksLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1pY29uLWJ1dHRvbntvdXRsaW5lOnNvbGlkIDFweH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQTd7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoYXQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LXJhaXNlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtZmxhdC1idXR0b24iLCIiXSxbImEiLCJtYXQtc3Ryb2tlZC1idXR0b24iLCIiXV0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W0tlXSxhdHRyczpENyxuZ0NvbnRlbnRTZWxlY3RvcnM6QzIsZGVjbHM6OCx2YXJzOjYsY29uc3RzOltbMSwibWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWRjLWJ1dHRvbl9fbGFiZWwiXSxbMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oeDIpLFAoMCwic3BhbiIsMCksenQoMSksaCgyLCJzcGFuIiwxKSx6dCgzLDEpLGcoKSx6dCg0LDIpLFAoNSwic3BhbiIsMikoNiwic3BhbiIsMykoNywic3BhbiIsNCkpLDImZSYmKG50KCJtZGMtYnV0dG9uX19yaXBwbGUiLCFpLl9pc0ZhYikoIm1kYy1mYWJfX3JpcHBsZSIsaS5faXNGYWIpLHYoNiksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfS5tZGMtZWxldmF0aW9uLW92ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTp2YXIoLS1tZGMtZWxldmF0aW9uLW92ZXJsYXktb3BhY2l0eSwgMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1kYy1idXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjY0cHg7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCl9Lm1kYy1idXR0b24gLm1kYy1lbGV2YXRpb24tb3ZlcmxheXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MH0ubWRjLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9Lm1kYy1idXR0b246YWN0aXZle291dGxpbmU6bm9uZX0ubWRjLWJ1dHRvbjpob3ZlcntjdXJzb3I6cG9pbnRlcn0ubWRjLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtYnV0dG9uW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29uLC5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcHJvZ3Jlc3MtaW5kaWNhdG9ye2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSk7dG9wOjUwJTtsZWZ0OjUwJTtsaW5lLWhlaWdodDppbml0aWFsfS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYyhcbiAgICAgIDEwMCUgKyA0cHhcbiAgICApO3dpZHRoOmNhbGMoXG4gICAgICAxMDAlICsgNHB4XG4gICAgKTtkaXNwbGF5Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX2ZvY3VzLXJpbmd7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntib3JkZXItY29sb3I6Q2FudmFzVGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtYnV0dG9uX19mb2N1cy1yaW5nLC5tZGMtYnV0dG9uOm5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1idXR0b24gLm1kYy1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDowO3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1idXR0b25fX2xhYmVsKy5tZGMtYnV0dG9uX19pY29uLC5tZGMtYnV0dG9uX19sYWJlbCsubWRjLWJ1dHRvbl9faWNvbltkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9c3ZnLm1kYy1idXR0b25fX2ljb257ZmlsbDpjdXJyZW50Q29sb3J9Lm1kYy1idXR0b24tLXRvdWNoe21hcmdpbi10b3A6NnB4O21hcmdpbi1ib3R0b206NnB4fS5tZGMtYnV0dG9ue3BhZGRpbmc6MCA4cHggMCA4cHh9Lm1kYy1idXR0b24tLXVuZWxldmF0ZWR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7cGFkZGluZzowIDE2cHggMCAxNnB4fS5tZGMtYnV0dG9uLS11bmVsZXZhdGVkLm1kYy1idXR0b24tLWljb24tdHJhaWxpbmd7cGFkZGluZzowIDEycHggMCAxNnB4fS5tZGMtYnV0dG9uLS11bmVsZXZhdGVkLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTZweCAwIDEycHh9Lm1kYy1idXR0b24tLXJhaXNlZHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtwYWRkaW5nOjAgMTZweCAwIDE2cHh9Lm1kYy1idXR0b24tLXJhaXNlZC5tZGMtYnV0dG9uLS1pY29uLXRyYWlsaW5ne3BhZGRpbmc6MCAxMnB4IDAgMTZweH0ubWRjLWJ1dHRvbi0tcmFpc2VkLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTZweCAwIDEycHh9Lm1kYy1idXR0b24tLW91dGxpbmVke2JvcmRlci1zdHlsZTpzb2xpZDt0cmFuc2l0aW9uOmJvcmRlciAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtYnV0dG9uLS1vdXRsaW5lZCAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1idXR0b257aGVpZ2h0OnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWhlaWdodCwgMzZweCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbjpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKTtib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3IsIHRyYW5zcGFyZW50KX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7Y29sb3I6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXJhaXNlZC1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLC5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1c3tib3gtc2hhZG93OnZhcigtLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWZvY3VzLWNvbnRhaW5lci1lbGV2YXRpb24sIDBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24taG92ZXItY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246bm90KDpkaXNhYmxlZCk6YWN0aXZle2JveC1zaGFkb3c6dmFyKC0tbWRjLXByb3RlY3RlZC1idXR0b24tcHJlc3NlZC1jb250YWluZXItZWxldmF0aW9uLCAwcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLXJhaXNlZC1idXR0b246ZGlzYWJsZWR7Ym94LXNoYWRvdzp2YXIoLS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1kaXNhYmxlZC1jb250YWluZXItZWxldmF0aW9uLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbntoZWlnaHQ6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItaGVpZ2h0LCAzNnB4KTtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpO3BhZGRpbmc6MCAxNXB4IDAgMTVweDtib3JkZXItd2lkdGg6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLXdpZHRoLCAxcHgpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4zOCkpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fcmlwcGxle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtb3V0bGluZWQtYnV0dG9uLW91dGxpbmUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpfS5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbjpkaXNhYmxlZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWRjLWJ1dHRvbi0taWNvbi10cmFpbGluZ3twYWRkaW5nOjAgMTFweCAwIDE1cHh9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uLm1kYy1idXR0b24tLWljb24tbGVhZGluZ3twYWRkaW5nOjAgMTVweCAwIDExcHh9Lm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19yaXBwbGV7dG9wOi0xcHg7bGVmdDotMXB4O2JvdHRvbTotMXB4O3JpZ2h0Oi0xcHg7Ym9yZGVyLXdpZHRoOnZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3RvdWNoe2xlZnQ6Y2FsYygtMSAqIHZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KSk7d2lkdGg6Y2FsYygxMDAlICsgMiAqIHZhcigtLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aCwgMXB4KSl9Lm1hdC1tZGMtYnV0dG9uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLC5tYXQtbWRjLXJhaXNlZC1idXR0b24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcmlwcGxlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGU6OmJlZm9yZXtjb250ZW50OiIiO29wYWNpdHk6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLWNvbG9yKX0ubWF0LW1kYy1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXJhaXNlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtYnV0dG9uLXJpcHBsZS1jb2xvcil9Lm1hdC1tZGMtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvciwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcnt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LW1kYy1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbjpmb2N1cyAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b246Zm9jdXMgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Y29udGVudDoiIn0ubWF0LW1kYy1idXR0b25bZGlzYWJsZWRdLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1tZGMtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldCwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXQsLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi10b3VjaC10YXJnZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0ubWF0LW1kYy1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGUsLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGUsLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LW1kYy1idXR0b24+Lm1hdC1pY29ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOjEuMTI1cmVtO2hlaWdodDoxLjEyNXJlbTt3aWR0aDoxLjEyNXJlbX1bZGlyPXJ0bF0gLm1hdC1tZGMtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1kYy1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZToxLjEyNXJlbTtoZWlnaHQ6MS4xMjVyZW07d2lkdGg6MS4xMjVyZW07bWFyZ2luLWxlZnQ6LTRweDttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLXJhaXNlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24+Lm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24+Lm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uPi5tYXQtaWNvbixbZGlyPXJ0bF0gLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbiwubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbj4ubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uPi5tYXQtaWNvbltkaXI9cnRsXXttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0Oi00cHh9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24gLm1kYy1idXR0b25fX2xhYmVsKy5tYXQtaWNvbiwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sLm1hdC1tZGMtb3V0bGluZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb257bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDotNHB4fVtkaXI9cnRsXSAubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLFtkaXI9cnRsXSAubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb24sW2Rpcj1ydGxdIC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uLC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbCsubWF0LWljb25bZGlyPXJ0bF0sLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxdLC5tYXQtbWRjLW91dGxpbmVkLWJ1dHRvbiAubWRjLWJ1dHRvbl9fbGFiZWwrLm1hdC1pY29uW2Rpcj1ydGxde21hcmdpbi1sZWZ0Oi00cHg7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXJpcHBsZSwubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1kYy1idXR0b25fX3JpcHBsZXt0b3A6LTFweDtsZWZ0Oi0xcHg7Ym90dG9tOi0xcHg7cmlnaHQ6LTFweDtib3JkZXItd2lkdGg6LTFweH0ubWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbiAubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LW1kYy1yYWlzZWQtYnV0dG9uIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAzcHgpICogLTEpfScsTTJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO25ldyBpZSgibWF0LW1kYy1mYWItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntjb2xvcjoiYWNjZW50In19fSk7dmFyICRpPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB3Mntjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhHbiksQyhhdCksQyhoaSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoQmUoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdEJ1dHRvbiJdLGZlYXR1cmVzOltLZV0sYXR0cnM6STcsbmdDb250ZW50U2VsZWN0b3JzOlJfZSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJtYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZSIsIm1kYy1pY29uLWJ1dHRvbl9fcmlwcGxlIl0sWzEsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZGMtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxQKDAsInNwYW4iLDApLHp0KDEpLFAoMiwic3BhbiIsMSkoMywic3BhbiIsMikoNCwic3BhbiIsMykpLDImZSYmKHYoMyksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZToyNHB4O3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1kYy1pY29uLWJ1dHRvbi5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWRjLWljb24tYnV0dG9uLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1pY29uLWJ1dHRvbiBzdmcsLm1kYy1pY29uLWJ1dHRvbiBpbWd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweH0ubWRjLWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2ZpbGw6Y3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTt6LWluZGV4OjA7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLWljb24tYnV0dG9uIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1pY29uLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtaWNvbi1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tZGlzcGxheS1mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2ljb24ubWRjLWljb24tYnV0dG9uX19pY29uLS1vbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbi5tZGMtaWNvbi1idXR0b25fX2ljb24tLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2xpbmt7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5tYXQtbWRjLWljb24tYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCk7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLCBpbmhlcml0KTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue2ZvbnQtc2l6ZTp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmcsLm1hdC1tZGMtaWNvbi1idXR0b24gaW1ne3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIDI0cHgpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLW9wYWNpdHksIDAuMzgpfS5tYXQtbWRjLWljb24tYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCAjMDAwKX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmd7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eToxfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWljb24tYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZXtib3JkZXItcmFkaXVzOjUwJX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtdW50aGVtZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1czo6YmVmb3JlLC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2Fybjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO29wYWNpdHk6MX0nLE0yXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxPNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQTd7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoYXQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtaWNvbi1idXR0b24iLCIiXV0saG9zdFZhcnM6OSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LXVudGhlbWVkIiwhaS5jb2xvcikoIm1hdC1tZGMtYnV0dG9uLWJhc2UiLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W0tlXSxhdHRyczpJNyxuZ0NvbnRlbnRTZWxlY3RvcnM6QzIsZGVjbHM6OCx2YXJzOjYsY29uc3RzOltbMSwibWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUiXSxbMSwibWRjLWJ1dHRvbl9fbGFiZWwiXSxbMSwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LW1kYy1idXR0b24tdG91Y2gtdGFyZ2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oeDIpLFAoMCwic3BhbiIsMCksenQoMSksaCgyLCJzcGFuIiwxKSx6dCgzLDEpLGcoKSx6dCg0LDIpLFAoNSwic3BhbiIsMikoNiwic3BhbiIsMykoNywic3BhbiIsNCkpLDImZSYmKG50KCJtZGMtYnV0dG9uX19yaXBwbGUiLCFpLl9pc0ZhYikoIm1kYy1mYWJfX3JpcHBsZSIsaS5faXNGYWIpLHYoNiksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpfSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLWljb24tYnV0dG9ue2ZvbnQtc2l6ZToyNHB4O3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzoxMnB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3ttYXgtaGVpZ2h0OjQ4cHg7bWF4LXdpZHRoOjQ4cHh9Lm1kYy1pY29uLWJ1dHRvbi5tZGMtaWNvbi1idXR0b24tLXJlZHVjZWQtc2l6ZSAubWRjLWljb24tYnV0dG9uX19yaXBwbGV7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjRweDttYXJnaW4tcmlnaHQ6NHB4O21hcmdpbi1sZWZ0OjRweH0ubWRjLWljb24tYnV0dG9uLm1kYy1pY29uLWJ1dHRvbi0tcmVkdWNlZC1zaXplIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7bWF4LWhlaWdodDo0MHB4O21heC13aWR0aDo0MHB4fS5tZGMtaWNvbi1idXR0b24gLm1kYy1pY29uLWJ1dHRvbl9fdG91Y2h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtoZWlnaHQ6NDhweDtsZWZ0OjUwJTt3aWR0aDo0OHB4O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTUwJSl9Lm1kYy1pY29uLWJ1dHRvbiBzdmcsLm1kYy1pY29uLWJ1dHRvbiBpbWd7d2lkdGg6MjRweDtoZWlnaHQ6MjRweH0ubWRjLWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2ZpbGw6Y3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dXNlci1zZWxlY3Q6bm9uZTt6LWluZGV4OjA7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLWljb24tYnV0dG9uIC5tZGMtaWNvbi1idXR0b25fX3RvdWNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7aGVpZ2h0OjQ4cHg7bGVmdDo1MCU7d2lkdGg6NDhweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b24ubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmcsLm1kYy1pY29uLWJ1dHRvbjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmd7ZGlzcGxheTpibG9ja319Lm1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtaWNvbi1idXR0b25baGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tZGlzcGxheS1mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy1pY29uLWJ1dHRvbl9fZm9jdXMtcmluZ3twb2ludGVyLWV2ZW50czpub25lO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKXsubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5ne2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19mb2N1cy1yaW5nOjphZnRlcntjb250ZW50OiIiO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtoZWlnaHQ6Y2FsYygxMDAlICsgNHB4KTt3aWR0aDpjYWxjKDEwMCUgKyA0cHgpfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtaWNvbi1idXR0b25fX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWljb24tYnV0dG9uX19pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2ljb24ubWRjLWljb24tYnV0dG9uX19pY29uLS1vbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbntkaXNwbGF5Om5vbmV9Lm1kYy1pY29uLWJ1dHRvbi0tb24gLm1kYy1pY29uLWJ1dHRvbl9faWNvbi5tZGMtaWNvbi1idXR0b25fX2ljb24tLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5tZGMtaWNvbi1idXR0b25fX2xpbmt7aGVpZ2h0OjEwMCU7bGVmdDowO291dGxpbmU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5tYXQtbWRjLWljb24tYnV0dG9ue2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCk7d2lkdGg6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yLCBpbmhlcml0KTtib3JkZXItcmFkaXVzOjUwJTtmbGV4LXNocmluazowO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19pY29ue2ZvbnQtc2l6ZTp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmcsLm1hdC1tZGMtaWNvbi1idXR0b24gaW1ne3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIDI0cHgpO2hlaWdodDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCAyNHB4KX0ubWF0LW1kYy1pY29uLWJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLW9wYWNpdHksIDAuMzgpfS5tYXQtbWRjLWljb24tYnV0dG9uOmRpc2FibGVke2NvbG9yOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1kaXNhYmxlZC1pY29uLWNvbG9yLCAjMDAwKX0ubWF0LW1kYy1pY29uLWJ1dHRvbiBzdmd7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Lm1hdC1tZGMtaWNvbi1idXR0b25bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eToxfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1yaXBwbGUsLm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7b3BhY2l0eTowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWF0LW1kYy1idXR0b24tcGVyc2lzdGVudC1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtbWRjLWJ1dHRvbi1yaXBwbGUtY29sb3IpfS5tYXQtbWRjLWljb24tYnV0dG9uIC5tZGMtYnV0dG9uX19sYWJlbHt6LWluZGV4OjF9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLWljb24tYnV0dG9uOmZvY3VzIC5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9Lm1hdC1tZGMtaWNvbi1idXR0b24gLm1hdC1tZGMtYnV0dG9uLXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWljb24tYnV0dG9uIC5tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZXtib3JkZXItcmFkaXVzOjUwJX0ubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtdW50aGVtZWQ6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1czo6YmVmb3JlLC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXM6OmJlZm9yZSwubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2Fybjpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO29wYWNpdHk6MX0nLE0yXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxjaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sQmwsZm5dfSksbn0pKCksanY9Y2xhc3N7YXR0YWNoKHQpe3JldHVybiB0aGlzLl9hdHRhY2hlZEhvc3Q9dCx0LmF0dGFjaCh0aGlzKX1kZXRhY2goKXtsZXQgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbCE9dCYmKHRoaXMuX2F0dGFjaGVkSG9zdD1udWxsLHQuZGV0YWNoKCkpfWdldCBpc0F0dGFjaGVkKCl7cmV0dXJuIG51bGwhPXRoaXMuX2F0dGFjaGVkSG9zdH1zZXRBdHRhY2hlZEhvc3QodCl7dGhpcy5fYXR0YWNoZWRIb3N0PXR9fSxWbD1jbGFzcyBleHRlbmRzIGp2e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudD10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMucHJvamVjdGFibGVOb2Rlcz1vfX0sWW89Y2xhc3MgZXh0ZW5kcyBqdntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMudGVtcGxhdGVSZWY9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbnRleHQ9aSx0aGlzLmluamVjdG9yPXJ9Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fSxTMj1jbGFzcyBleHRlbmRzIGp2e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50PXQgaW5zdGFuY2VvZiBNZT90Lm5hdGl2ZUVsZW1lbnQ6dH19LEZ1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLmF0dGFjaERvbVBvcnRhbD1udWxsfWhhc0F0dGFjaGVkKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH1hdHRhY2godCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBWbD8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIFlvPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgUzI/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQgMH1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fSxHdj1jbGFzcyBleHRlbmRzIEZ1e2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9aSx0aGlzLl9kZWZhdWx0SW5qZWN0b3I9cix0aGlzLmF0dGFjaERvbVBvcnRhbD1zPT57bGV0IGE9cy5lbGVtZW50LGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxhKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQoYSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9cyxzdXBlci5zZXREaXNwb3NlRm4oKCk9PntsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYSxsKX0pfSx0aGlzLl9kb2N1bWVudD1vfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtsZXQgcixpPSh0LmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8ocj10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IsdC5wcm9qZWN0YWJsZU5vZGVzfHx2b2lkIDApLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT5yLmRlc3Ryb3koKSkpOihyPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3Rvcnx8TWkuTlVMTCksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoci5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCk9Pnt0aGlzLl9hcHBSZWYudmlld0NvdW50PjAmJnRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHIuaG9zdFZpZXcpLHIuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShyKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxyfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixpPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0LHtpbmplY3Rvcjp0LmluamVjdG9yfSk7cmV0dXJuIGkucm9vdE5vZGVzLmZvckVhY2gocj0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHIpKSxpLmRldGVjdENoYW5nZXMoKSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e2xldCByPWUuaW5kZXhPZihpKTstMSE9PXImJmUucmVtb3ZlKHIpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxpfWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksdGhpcy5vdXRsZXRFbGVtZW50LnJlbW92ZSgpfV9nZXRDb21wb25lbnRSb290Tm9kZSh0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19fSxrNz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWW97Y29uc3RydWN0b3IoZSxpKXtzdXBlcihlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNpKSxDKHNpKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1BvcnRhbCIsIiJdXSxleHBvcnRBczpbImNka1BvcnRhbCJdLGZlYXR1cmVzOltLZV19KSxufSkoKSxwcz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1pLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5hdHRhY2hlZD1uZXcgRix0aGlzLmF0dGFjaERvbVBvcnRhbD1vPT57bGV0IHM9by5lbGVtZW50LGE9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO28uc2V0QXR0YWNoZWRIb3N0KHRoaXMpLHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxzKSx0aGlzLl9nZXRSb290Tm9kZSgpLmFwcGVuZENoaWxkKHMpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW8sc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT57YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHMsYSl9KX0sdGhpcy5fZG9jdW1lbnQ9cn1nZXQgcG9ydGFsKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUG9ydGFsfXNldCBwb3J0YWwoZSl7dGhpcy5oYXNBdHRhY2hlZCgpJiYhZSYmIXRoaXMuX2lzSW5pdGlhbGl6ZWR8fCh0aGlzLmhhc0F0dGFjaGVkKCkmJnN1cGVyLmRldGFjaCgpLGUmJnN1cGVyLmF0dGFjaChlKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lfHxudWxsKX1nZXQgYXR0YWNoZWRSZWYoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRSZWZ9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwfW5nT25EZXN0cm95KCl7c3VwZXIuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaGVkUmVmPXRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGx9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixvPShlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCkscz1pLmNyZWF0ZUNvbXBvbmVudChvLGkubGVuZ3RoLGUuaW5qZWN0b3J8fGkuaW5qZWN0b3IsZS5wcm9qZWN0YWJsZU5vZGVzfHx2b2lkIDApO3JldHVybiBpIT09dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChzLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSksc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT5zLmRlc3Ryb3koKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1zLHRoaXMuYXR0YWNoZWQuZW1pdChzKSxzfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0LHtpbmplY3RvcjplLmluamVjdG9yfSk7cmV0dXJuIHN1cGVyLnNldERpc3Bvc2VGbigoKT0+dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9X2dldFJvb3ROb2RlKCl7bGV0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIGUubm9kZVR5cGU9PT1lLkVMRU1FTlRfTk9ERT9lOmUucGFyZW50Tm9kZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbyksQyhzaSksQyhMdCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWxPdXRsZXQiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxPdXRsZXQiLCJwb3J0YWwiXX0sb3V0cHV0czp7YXR0YWNoZWQ6ImF0dGFjaGVkIn0sZXhwb3J0QXM6WyJjZGtQb3J0YWxPdXRsZXQiXSxmZWF0dXJlczpbS2VdfSksbn0pKCksSGw9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFd2PWNsYXNze30sRzE9Y2xhc3MgZXh0ZW5kcyBXdntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIERfKHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6SHQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LHF2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKHMsYSxsKT0+e2xldCBjLGQ7bnVsbD09cy5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkocyxhLGwpLGwsZSxyKHMpKSxkPWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoYSxlKSxkPTMpOihjPXRoaXMuX21vdmVWaWV3KGEsbCxlLHIocykpLGQ9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjpkLHJlY29yZDpzfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBzPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcocy50ZW1wbGF0ZVJlZixzLmNvbnRleHQscy5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxkZz1jbGFzc3tnZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfWNvbnN0cnVjdG9yKHQ9ITEsZSxpPSEwLHIpe3RoaXMuX211bHRpcGxlPXQsdGhpcy5fZW1pdENoYW5nZXM9aSx0aGlzLmNvbXBhcmVXaXRoPXIsdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLmNoYW5nZWQ9bmV3IEllLGUmJmUubGVuZ3RoJiYodD9lLmZvckVhY2gobz0+dGhpcy5fbWFya1NlbGVjdGVkKG8pKTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModGhpcy5fZ2V0Q29uY3JldGVWYWx1ZSh0KSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3Q9dGhpcy5fZ2V0Q29uY3JldGVWYWx1ZSh0KSx0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5pc1NlbGVjdGVkKHQpfHx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrU2VsZWN0ZWQodCl7dD10aGlzLl9nZXRDb25jcmV0ZVZhbHVlKHQpLHRoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9X3VubWFya0FsbCgpe3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaCh0PT50aGlzLl91bm1hcmtTZWxlY3RlZCh0KSl9X3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KXt9X2hhc1F1ZXVlZENoYW5nZXMoKXtyZXR1cm4hKCF0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCYmIXRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aCl9X2dldENvbmNyZXRlVmFsdWUodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKHQsZSkpcmV0dXJuIGU7cmV0dXJuIHR9cmV0dXJuIHR9fSxXMT1uZXcgaWUoIl9WaWV3UmVwZWF0ZXIiKSxOX2U9WyJjb250ZW50V3JhcHBlciJdLExfZT1bIioiXSxCNz1uZXcgaWUoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7ZnVuY3Rpb24gQl9lKG4pe3JldHVybiBuLl9zY3JvbGxTdHJhdGVneX12YXIgVjc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1TaXplPTIwLHRoaXMuX21pbkJ1ZmZlclB4PTEwMCx0aGlzLl9tYXhCdWZmZXJQeD0yMDAsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBJZSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKFluKCkpLHRoaXMuX3ZpZXdwb3J0PW51bGwsdGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWl9YXR0YWNoKHQpe3RoaXMuX3ZpZXdwb3J0PXQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0LGUsaSl7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWksdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXshdGhpcy5fdmlld3BvcnR8fHRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47bGV0IHQ9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGU9e3N0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kfSxpPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpLG89dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLHM9dGhpcy5faXRlbVNpemU+MD9vL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+cil7bGV0IGw9TWF0aC5jZWlsKGkvdGhpcy5faXRlbVNpemUpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihzLHItbCkpO3MhPWMmJihzPWMsbz1jKnRoaXMuX2l0ZW1TaXplLGUuc3RhcnQ9TWF0aC5mbG9vcihzKSksZS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGUuc3RhcnQrbCkpfWxldCBhPW8tZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihhPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtsZXQgbD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWEpL3RoaXMuX2l0ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC1sKSxlLmVuZD1NYXRoLm1pbihyLE1hdGguY2VpbChzKyhpK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7bGV0IGw9ZS5lbmQqdGhpcy5faXRlbVNpemUtKG8raSk7aWYobDx0aGlzLl9taW5CdWZmZXJQeCYmZS5lbmQhPXIpe2xldCBjPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtbCkvdGhpcy5faXRlbVNpemUpO2M+MCYmKGUuZW5kPU1hdGgubWluKHIsZS5lbmQrYyksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iocy10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IocykpfX0odGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9pdGVtU2l6ZX1zZXQgaXRlbVNpemUoZSl7dGhpcy5faXRlbVNpemU9X2koZSl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChlKXt0aGlzLl9taW5CdWZmZXJQeD1faShlKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGUpe3RoaXMuX21heEJ1ZmZlclB4PV9pKGUpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwiaXRlbVNpemUiLCIiXV0saW5wdXRzOntpdGVtU2l6ZToiaXRlbVNpemUiLG1pbkJ1ZmZlclB4OiJtaW5CdWZmZXJQeCIsbWF4QnVmZmVyUHg6Im1heEJ1ZmZlclB4In0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbUXQoW3twcm92aWRlOkI3LHVzZUZhY3Rvcnk6Ql9lLGRlcHM6WyRuKCgpPT5uKV19XSksR3RdfSksbn0pKCksTnU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9zY3JvbGxlZD1uZXcgSWUsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PXJ9cmVnaXN0ZXIoZSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhlKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChlLGUuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGUpKSl9ZGVyZWdpc3RlcihlKXtsZXQgaT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGUpO2kmJihpLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShlKSl9c2Nyb2xsZWQoZT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgS3QoaT0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtsZXQgcj1lPjA/dGhpcy5fc2Nyb2xsZWQucGlwZShzYyhlKSkuc3Vic2NyaWJlKGkpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShpKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57ci51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOkh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChlLGkpPT50aGlzLmRlcmVnaXN0ZXIoaSkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChlLGkpe2xldCByPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpO3JldHVybiB0aGlzLnNjcm9sbGVkKGkpLnBpcGUoa2Uobz0+IW98fHIuaW5kZXhPZihvKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhlKXtsZXQgaT1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKHIsbyk9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KG8sZSkmJmkucHVzaChvKX0pLGl9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGUsaSl7bGV0IHI9SHMoaSksbz1lLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKHI9PW8pcmV0dXJuITB9d2hpbGUocj1yLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm1pKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhhdCksayhHbiksayhMdCw4KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmVsZW1lbnRSZWY9ZSx0aGlzLnNjcm9sbERpc3BhdGNoZXI9aSx0aGlzLm5nWm9uZT1yLHRoaXMuZGlyPW8sdGhpcy5fZGVzdHJveWVkPW5ldyBJZSx0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IEt0KHM9PnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5taSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUocykpKX1uZ09uSW5pdCgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9ZWxlbWVudFNjcm9sbGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZH1nZXRFbGVtZW50UmVmKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZn1zY3JvbGxUbyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxyPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7bnVsbD09ZS5sZWZ0JiYoZS5sZWZ0PXI/ZS5lbmQ6ZS5zdGFydCksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9cj9lLnN0YXJ0OmUuZW5kKSxudWxsIT1lLmJvdHRvbSYmKGUudG9wPWkuc2Nyb2xsSGVpZ2h0LWkuY2xpZW50SGVpZ2h0LWUuYm90dG9tKSxyJiYwIT1lZygpPyhudWxsIT1lLmxlZnQmJihlLnJpZ2h0PWkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aC1lLmxlZnQpLDI9PWVnKCk/ZS5sZWZ0PWUucmlnaHQ6MT09ZWcoKSYmKGUubGVmdD1lLnJpZ2h0Py1lLnJpZ2h0OmUucmlnaHQpKTpudWxsIT1lLnJpZ2h0JiYoZS5sZWZ0PWkuc2Nyb2xsV2lkdGgtaS5jbGllbnRXaWR0aC1lLnJpZ2h0KSx0aGlzLl9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKX1fYXBwbHlTY3JvbGxUb09wdGlvbnMoZSl7bGV0IGk9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7UjEoKT9pLnNjcm9sbFRvKGUpOihudWxsIT1lLnRvcCYmKGkuc2Nyb2xsVG9wPWUudG9wKSxudWxsIT1lLmxlZnQmJihpLnNjcm9sbExlZnQ9ZS5sZWZ0KSl9bWVhc3VyZVNjcm9sbE9mZnNldChlKXtsZXQgaT0ibGVmdCIscj0icmlnaHQiLG89dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoInRvcCI9PWUpcmV0dXJuIG8uc2Nyb2xsVG9wO2lmKCJib3R0b20iPT1lKXJldHVybiBvLnNjcm9sbEhlaWdodC1vLmNsaWVudEhlaWdodC1vLnNjcm9sbFRvcDtsZXQgcz10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWU/ZT1zP3I6aToiZW5kIj09ZSYmKGU9cz9pOnIpLHMmJjI9PWVnKCk/ZT09aT9vLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgtby5zY3JvbGxMZWZ0Om8uc2Nyb2xsTGVmdDpzJiYxPT1lZygpP2U9PWk/by5zY3JvbGxMZWZ0K28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aDotby5zY3JvbGxMZWZ0OmU9PWk/by5zY3JvbGxMZWZ0Om8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoTnUpLEMoYXQpLEMoWGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstc2Nyb2xsYWJsZSIsIiJdLFsiIiwiY2RrU2Nyb2xsYWJsZSIsIiJdXSxzdGFuZGFsb25lOiEwfSksbn0pKCksanM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IEllLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZShzYyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoR24pLGsoYXQpLGsoTHQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE43PW5ldyBpZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksel9lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBDZHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhOdSksQyhhdCksQyhYaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sZmVhdHVyZXM6W0tlXX0pLG59KSgpLGpfZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9ZQTpBbSx1Zz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgel9le2dldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oZSl7dGhpcy5fb3JpZW50YXRpb24hPT1lJiYodGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWdldCBhcHBlbmRPbmx5KCl7cmV0dXJuIHRoaXMuX2FwcGVuZE9ubHl9c2V0IGFwcGVuZE9ubHkoZSl7dGhpcy5fYXBwZW5kT25seT1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUsYSxyLHMpLHRoaXMuZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLnNjcm9sbGFibGU9Yyx0aGlzLl9wbGF0Zm9ybT1haShHbiksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBJZSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgSWUsdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgS3QoZD0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUodT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT5kLm5leHQodSkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1Nbi5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHFuKG51bGwpLHNjKDAsal9lKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUob3QodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHM9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7c30oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7c30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixzPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP3M/bzpyOiJlbmQiPT1lP3M/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IGE9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1hfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKCR0KSxDKGF0KSxDKEI3LDgpLEMoWGksOCksQyhOdSksQyhqcyksQyhONyw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoTl9lLDcpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbUXQoW3twcm92aWRlOkNkLHVzZUZhY3Rvcnk6KHQsZSk9PnR8fGUsZGVwczpbW25ldyBUcyxuZXcgbmgoTjcpXSxuXX1dKSxLZSxJT10sbmdDb250ZW50U2VsZWN0b3JzOkxfZSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtc3BhY2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxoKDAsImRpdiIsMCwxKSx6dCgyKSxnKCksUCgzLCJkaXYiLDIpKSwyJmUmJih2KDMpLFR0KCJ3aWR0aCIsaS5fdG90YWxDb250ZW50V2lkdGgpKCJoZWlnaHQiLGkuX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZXtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjtjb250YWluOnN0cmljdDstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7aGVpZ2h0OjFweDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDtmbGV4OjAgMCBhdXRvfVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcnt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBMNyhuLHQsZSl7aWYoIWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2xldCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09bj8ic3RhcnQiPT09dD9yLmxlZnQ6ci5yaWdodDoic3RhcnQiPT09dD9yLnRvcDpyLmJvdHRvbX12YXIgSDc9KCgpPT57Y2xhc3MgbntnZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGUpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1lLGZ1bmN0aW9uKG4pe3JldHVybiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5jb25uZWN0JiYhKG4gaW5zdGFuY2VvZiB3Xyl9KGUpP3RoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQoZSk6dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChuZXcgRzEoRF8oZSk/ZTpBcnJheS5mcm9tKGV8fFtdKSkpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoZSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnk9ZT8oaSxyKT0+ZShpKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCkscik6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoZSl7ZSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWUpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShlKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1faShlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PXMsdGhpcy52aWV3Q2hhbmdlPW5ldyBJZSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgSWUsdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUocW4obnVsbCksRm0oKSxKbigoW2wsY10pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKGwsYykpLE1zKDEpKSx0aGlzLl9kaWZmZXI9bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IEllLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUobD0+e3RoaXMuX2RhdGE9bCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShsPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1sLHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZhLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShlLGkpe2lmKGUuc3RhcnQ+PWUuZW5kKXJldHVybiAwO2xldCBzLGEscj1lLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsbz1lLmVuZC1lLnN0YXJ0O2ZvcihsZXQgbD0wO2w8bztsKyspe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXtzPWE9Yy5yb290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgbD1vLTE7bD4tMTtsLS0pe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXthPWMucm9vdE5vZGVzW2Mucm9vdE5vZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIHMmJmE/TDcoaSwiZW5kIixhKS1MNyhpLCJzdGFydCIscyk6MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTtlP3RoaXMuX2FwcGx5Q2hhbmdlcyhlKTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7IXRoaXMuX3JlbmRlcmVkUmFuZ2V8fCh0aGlzLl9yZW5kZXJlZEl0ZW1zPXRoaXMuX2RhdGEuc2xpY2UodGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCx0aGlzLl9yZW5kZXJlZFJhbmdlLmVuZCksdGhpcy5fZGlmZmVyfHwodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0aGlzLl9yZW5kZXJlZEl0ZW1zKS5jcmVhdGUoKGUsaSk9PnRoaXMuY2RrVmlydHVhbEZvclRyYWNrQnk/dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeShlLGkpOmkpKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCl9X2NoYW5nZURhdGFTb3VyY2UoZSxpKXtyZXR1cm4gZSYmZS5kaXNjb25uZWN0KHRoaXMpLHRoaXMuX25lZWRzVXBkYXRlPSEwLGk/aS5jb25uZWN0KHRoaXMpOkh0KCl9X3VwZGF0ZUNvbnRleHQoKXtsZXQgZT10aGlzLl9kYXRhLmxlbmd0aCxpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7aS0tOyl7bGV0IHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoaSk7ci5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQraSxyLmNvbnRleHQuY291bnQ9ZSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKHIuY29udGV4dCksci5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5nZXMoZSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKG8scyxhKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhvLGEpLG89Pm8uaXRlbSksZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uobz0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KG8uY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1vLml0ZW19KTtsZXQgaT10aGlzLl9kYXRhLmxlbmd0aCxyPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zvcig7ci0tOyl7bGV0IG89dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQocik7by5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrcixvLmNvbnRleHQuY291bnQ9aSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKG8uY29udGV4dCl9fV91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGUpe2UuZmlyc3Q9MD09PWUuaW5kZXgsZS5sYXN0PWUuaW5kZXg9PT1lLmNvdW50LTEsZS5ldmVuPWUuaW5kZXglMj09MCxlLm9kZD0hZS5ldmVufV9nZXRFbWJlZGRlZFZpZXdBcmdzKGUsaSl7cmV0dXJue3RlbXBsYXRlUmVmOnRoaXMuX3RlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDplLml0ZW0sY2RrVmlydHVhbEZvck9mOnRoaXMuX2Nka1ZpcnR1YWxGb3JPZixpbmRleDotMSxjb3VudDotMSxmaXJzdDohMSxsYXN0OiExLG9kZDohMSxldmVuOiExfSxpbmRleDppfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhzaSksQyhTaSksQyh3bCksQyhXMSksQyh1Zyw0KSxDKGF0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka1ZpcnR1YWxGb3IiLCIiLCJjZGtWaXJ0dWFsRm9yT2YiLCIiXV0saW5wdXRzOntjZGtWaXJ0dWFsRm9yT2Y6ImNka1ZpcnR1YWxGb3JPZiIsY2RrVmlydHVhbEZvclRyYWNrQnk6ImNka1ZpcnR1YWxGb3JUcmFja0J5IixjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSIsY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6VzEsdXNlQ2xhc3M6cXZ9XSldfSksbn0pKCksUGM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLE1kPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltPdSxQYyx1ZyxPdSxQY119KSxufSkoKSx6Nz1SMSgpLHExPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIEkyKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gVTcobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgeGY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtJMihlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxHX2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IHExLHRoaXMuY2xvc2U9cz0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCkucGlwZShrZShlPT4hZXx8IXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoZS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCkpKTt0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQmJnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ+MT8odGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcCx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3A7TWF0aC5hYnMoZS10aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb24pPnRoaXMuX2NvbmZpZy50aHJlc2hvbGQ/dGhpcy5fZGV0YWNoKCk6dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpOnRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSh0aGlzLl9kZXRhY2gpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0odGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcix0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcixzKSx0aGlzLmJsb2NrPSgpPT5uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzPXt0b3A6IiIsbGVmdDoiIn0sdGhpcy5faXNFbmFibGVkPSExLHRoaXMuX2RvY3VtZW50PWV9YXR0YWNoKCl7fWVuYWJsZSgpe2lmKHRoaXMuX2NhbkJlRW5hYmxlZCgpKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdD10LnN0eWxlLmxlZnR8fCIiLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3A9dC5zdHlsZS50b3B8fCIiLHQuc3R5bGUubGVmdD1ZcigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0KSx0LnN0eWxlLnRvcD1ZcigtdGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi50b3ApLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLHRoaXMuX2lzRW5hYmxlZD0hMH19ZGlzYWJsZSgpe2lmKHRoaXMuX2lzRW5hYmxlZCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9dC5zdHlsZSxyPXRoaXMuX2RvY3VtZW50LmJvZHkuc3R5bGUsbz1pLnNjcm9sbEJlaGF2aW9yfHwiIixzPXIuc2Nyb2xsQmVoYXZpb3J8fCIiO3RoaXMuX2lzRW5hYmxlZD0hMSxpLmxlZnQ9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQsaS50b3A9dGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcCx0LmNsYXNzTGlzdC5yZW1vdmUoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx6NyYmKGkuc2Nyb2xsQmVoYXZpb3I9ci5zY3JvbGxCZWhhdmlvcj0iYXV0byIpLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx6NyYmKGkuc2Nyb2xsQmVoYXZpb3I9byxyLnNjcm9sbEJlaGF2aW9yPXMpfX1fY2FuQmVFbmFibGVkKCl7aWYodGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpfHx0aGlzLl9pc0VuYWJsZWQpcmV0dXJuITE7bGV0IGU9dGhpcy5fZG9jdW1lbnQuYm9keSxpPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJuIGUuc2Nyb2xsSGVpZ2h0PmkuaGVpZ2h0fHxlLnNjcm9sbFdpZHRoPmkud2lkdGh9fSh0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50KSx0aGlzLnJlcG9zaXRpb249cz0+bmV3IHhmKHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9uZ1pvbmUscyksdGhpcy5fZG9jdW1lbnQ9b319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhOdSksayhqcyksayhhdCksayhMdCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFFhPWNsYXNze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuc2Nyb2xsU3RyYXRlZ3k9bmV3IHExLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSExLHRoaXMuYmFja2Ryb3BDbGFzcz0iY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCIsdGhpcy5kaXNwb3NlT25OYXZpZ2F0aW9uPSExLHQpe2xldCBlPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgaSBvZiBlKXZvaWQgMCE9PXRbaV0mJih0aGlzW2ldPXRbaV0pfX19LFk3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fYXR0YWNoZWRPdmVybGF5cz1bXSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKX1hZGQoZSl7dGhpcy5yZW1vdmUoZSksdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5wdXNoKGUpfXJlbW92ZShlKXtsZXQgaT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmluZGV4T2YoZSk7aT4tMSYmdGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5sZW5ndGgmJnRoaXMuZGV0YWNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxXX2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFk3e2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSksdGhpcy5fbmdab25lPWksdGhpcy5fa2V5ZG93bkxpc3RlbmVyPXI9PntsZXQgbz10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgcz1vLmxlbmd0aC0xO3M+LTE7cy0tKWlmKG9bc10uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtsZXQgYT1vW3NdLl9rZXlkb3duRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5hLm5leHQocikpOmEubmV4dChyKTticmVha319fWFkZChlKXtzdXBlci5hZGQoZSksdGhpcy5faXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSk6dGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpLGsoYXQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHFfZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWTd7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUpLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fbmdab25lPXIsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSx0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyPW89Pnt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW1hKG8pfSx0aGlzLl9jbGlja0xpc3RlbmVyPW89PntsZXQgcz1tYShvKSxhPSJjbGljayI9PT1vLnR5cGUmJnRoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ/dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldDpzO3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ9bnVsbDtsZXQgbD10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNsaWNlKCk7Zm9yKGxldCBjPWwubGVuZ3RoLTE7Yz4tMTtjLS0pe2xldCBkPWxbY107aWYoZC5fb3V0c2lkZVBvaW50ZXJFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aDwxfHwhZC5oYXNBdHRhY2hlZCgpKWNvbnRpbnVlO2lmKGQub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocyl8fGQub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoYSkpYnJlYWs7bGV0IHU9ZC5fb3V0c2lkZVBvaW50ZXJFdmVudHM7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PnUubmV4dChvKSk6dS5uZXh0KG8pfX19YWRkKGUpe2lmKHN1cGVyLmFkZChlKSwhdGhpcy5faXNBdHRhY2hlZCl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuYm9keTt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9hZGRFdmVudExpc3RlbmVycyhpKSk6dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSksdGhpcy5fcGxhdGZvcm0uSU9TJiYhdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKHRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWU9aS5zdHlsZS5jdXJzb3IsaS5zdHlsZS5jdXJzb3I9InBvaW50ZXIiLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITApLHRoaXMuX2lzQXR0YWNoZWQ9ITB9fWRldGFjaCgpe2lmKHRoaXMuX2lzQXR0YWNoZWQpe2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhdXhjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksdGhpcy5fcGxhdGZvcm0uSU9TJiZ0aGlzLl9jdXJzb3JTdHlsZUlzU2V0JiYoZS5zdHlsZS5jdXJzb3I9dGhpcy5fY3Vyc29yT3JpZ2luYWxWYWx1ZSx0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSExKSx0aGlzLl9pc0F0dGFjaGVkPSExfX1fYWRkRXZlbnRMaXN0ZW5lcnMoZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJhdXhjbGljayIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCksZS5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fY2xpY2tMaXN0ZW5lciwhMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoTHQpLGsoR24pLGsoYXQsOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHBnPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jb250YWluZXJFbGVtZW50Py5yZW1vdmUoKX1nZXRDb250YWluZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lckVsZW1lbnR8fHRoaXMuX2NyZWF0ZUNvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnR9X2NyZWF0ZUNvbnRhaW5lcigpe2xldCBlPSJjZGstb3ZlcmxheS1jb250YWluZXIiO2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8a3YoKSl7bGV0IHI9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7ZX1bcGxhdGZvcm09InNlcnZlciJdLCAuJHtlfVtwbGF0Zm9ybT0idGVzdCJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspcltvXS5yZW1vdmUoKX1sZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLmNsYXNzTGlzdC5hZGQoZSksa3YoKT9pLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJ0ZXN0Iik6dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHxpLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJzZXJ2ZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9aX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhMdCksayhHbikpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLE9jPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLGQ9ITEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPW8sdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPXMsdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9sb2NhdGlvbj1sLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXI9Yyx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ZCx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyBJZSx0aGlzLl9hdHRhY2htZW50cz1uZXcgSWUsdGhpcy5fZGV0YWNobWVudHM9bmV3IEllLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz1Nbi5FTVBUWSx0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlcj11PT50aGlzLl9iYWNrZHJvcENsaWNrLm5leHQodSksdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcj11PT57dGhpcy5fZGlzcG9zZUJhY2tkcm9wKHUudGFyZ2V0KX0sdGhpcy5fa2V5ZG93bkV2ZW50cz1uZXcgSWUsdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHM9bmV3IEllLHIuc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9zY3JvbGxTdHJhdGVneT1yLnNjcm9sbFN0cmF0ZWd5LHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSksdGhpcy5fcG9zaXRpb25TdHJhdGVneT1yLnBvc2l0aW9uU3RyYXRlZ3l9Z2V0IG92ZXJsYXlFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BhbmV9Z2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2hvc3R9YXR0YWNoKHQpeyF0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudCYmdGhpcy5fcHJldmlvdXNIb3N0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpO2xldCBlPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2godCk7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoWXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy51cGRhdGVQb3NpdGlvbigpfSksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMCksdGhpcy5fY29uZmlnLmhhc0JhY2tkcm9wJiZ0aGlzLl9hdHRhY2hCYWNrZHJvcCgpLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MsITApLHRoaXMuX2F0dGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIuYWRkKHRoaXMpLHRoaXMuX2NvbmZpZy5kaXNwb3NlT25OYXZpZ2F0aW9uJiYodGhpcy5fbG9jYXRpb25DaGFuZ2VzPXRoaXMuX2xvY2F0aW9uLnN1YnNjcmliZSgoKT0+dGhpcy5kaXNwb3NlKCkpKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLmFkZCh0aGlzKSwiZnVuY3Rpb24iPT10eXBlb2YgZT8ub25EZXN0cm95JiZlLm9uRGVzdHJveSgoKT0+e3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLmRldGFjaCgpKSl9KSxlfWRldGFjaCgpe2lmKCF0aGlzLmhhc0F0dGFjaGVkKCkpcmV0dXJuO3RoaXMuZGV0YWNoQmFja2Ryb3AoKSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCExKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneSYmdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO2xldCB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKSx0aGlzLl9sb2NhdGlvbkNoYW5nZXMudW5zdWJzY3JpYmUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0fWRpc3Bvc2UoKXtsZXQgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCksdGhpcy5fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCksdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHRoaXMuX2JhY2tkcm9wRWxlbWVudCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9wb3J0YWxPdXRsZXQuZGlzcG9zZSgpLHRoaXMuX2F0dGFjaG1lbnRzLmNvbXBsZXRlKCksdGhpcy5fYmFja2Ryb3BDbGljay5jb21wbGV0ZSgpLHRoaXMuX2tleWRvd25FdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX291dHNpZGVDbGlja0Rpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2hvc3Q/LnJlbW92ZSgpLHRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudD10aGlzLl9wYW5lPXRoaXMuX2hvc3Q9bnVsbCx0JiZ0aGlzLl9kZXRhY2htZW50cy5uZXh0KCksdGhpcy5fZGV0YWNobWVudHMuY29tcGxldGUoKX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX1iYWNrZHJvcENsaWNrKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wQ2xpY2t9YXR0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fYXR0YWNobWVudHN9ZGV0YWNobWVudHMoKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHN9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9rZXlkb3duRXZlbnRzfW91dHNpZGVQb2ludGVyRXZlbnRzKCl7cmV0dXJuIHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzfWdldENvbmZpZygpe3JldHVybiB0aGlzLl9jb25maWd9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCl9dXBkYXRlUG9zaXRpb25TdHJhdGVneSh0KXt0IT09dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9dCx0aGlzLmhhc0F0dGFjaGVkKCkmJih0LmF0dGFjaCh0aGlzKSx0aGlzLnVwZGF0ZVBvc2l0aW9uKCkpKX11cGRhdGVTaXplKHQpe3RoaXMuX2NvbmZpZz17Li4udGhpcy5fY29uZmlnLC4uLnR9LHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9c2V0RGlyZWN0aW9uKHQpe3RoaXMuX2NvbmZpZz17Li4udGhpcy5fY29uZmlnLGRpcmVjdGlvbjp0fSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl9YWRkUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMCl9cmVtb3ZlUGFuZWxDbGFzcyh0KXt0aGlzLl9wYW5lJiZ0aGlzLl90b2dnbGVDbGFzc2VzKHRoaXMuX3BhbmUsdCwhMSl9Z2V0RGlyZWN0aW9uKCl7bGV0IHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifXVwZGF0ZVNjcm9sbFN0cmF0ZWd5KHQpe3QhPT10aGlzLl9zY3JvbGxTdHJhdGVneSYmKHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdC5lbmFibGUoKSkpfV91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCl7dGhpcy5faG9zdC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5nZXREaXJlY3Rpb24oKSl9X3VwZGF0ZUVsZW1lbnRTaXplKCl7aWYoIXRoaXMuX3BhbmUpcmV0dXJuO2xldCB0PXRoaXMuX3BhbmUuc3R5bGU7dC53aWR0aD1Zcih0aGlzLl9jb25maWcud2lkdGgpLHQuaGVpZ2h0PVlyKHRoaXMuX2NvbmZpZy5oZWlnaHQpLHQubWluV2lkdGg9WXIodGhpcy5fY29uZmlnLm1pbldpZHRoKSx0Lm1pbkhlaWdodD1Zcih0aGlzLl9jb25maWcubWluSGVpZ2h0KSx0Lm1heFdpZHRoPVlyKHRoaXMuX2NvbmZpZy5tYXhXaWR0aCksdC5tYXhIZWlnaHQ9WXIodGhpcy5fY29uZmlnLm1heEhlaWdodCl9X3RvZ2dsZVBvaW50ZXJFdmVudHModCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/IiI6Im5vbmUifV9hdHRhY2hCYWNrZHJvcCgpe2xldCB0PSJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIjt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktYmFja2Ryb3Atbm9vcC1hbmltYXRpb24iKSx0aGlzLl9jb25maWcuYmFja2Ryb3BDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9iYWNrZHJvcEVsZW1lbnQsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITApLHRoaXMuX2hvc3QucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2hvc3QpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXIpLCF0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQmJnR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX2JhY2tkcm9wRWxlbWVudCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQodCl9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfV91cGRhdGVTdGFja2luZ09yZGVyKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfWRldGFjaEJhY2tkcm9wKCl7bGV0IHQ9dGhpcy5fYmFja2Ryb3BFbGVtZW50O2lmKHQpe2lmKHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZClyZXR1cm4gdm9pZCB0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCk7dC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIiksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKX0pLHQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsdGhpcy5fYmFja2Ryb3BUaW1lb3V0PXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+c2V0VGltZW91dCgoKT0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0KX0sNTAwKSl9fV90b2dnbGVDbGFzc2VzKHQsZSxpKXtsZXQgcj10ZyhlfHxbXSkuZmlsdGVyKG89PiEhbyk7ci5sZW5ndGgmJihpP3QuY2xhc3NMaXN0LmFkZCguLi5yKTp0LmNsYXNzTGlzdC5yZW1vdmUoLi4ucikpfV9kZXRhY2hDb250ZW50V2hlblN0YWJsZSgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB0PXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKG90KHRuKHRoaXMuX2F0dGFjaG1lbnRzLHRoaXMuX2RldGFjaG1lbnRzKSkpLnN1YnNjcmliZSgoKT0+eyghdGhpcy5fcGFuZXx8IXRoaXMuX2hvc3R8fDA9PT10aGlzLl9wYW5lLmNoaWxkcmVuLmxlbmd0aCkmJih0aGlzLl9wYW5lJiZ0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCExKSx0aGlzLl9ob3N0JiZ0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5faG9zdC5wYXJlbnRFbGVtZW50LHRoaXMuX2hvc3QucmVtb3ZlKCkpLHQudW5zdWJzY3JpYmUoKSl9KX0pfV9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKXtsZXQgdD10aGlzLl9zY3JvbGxTdHJhdGVneTt0JiYodC5kaXNhYmxlKCksdC5kZXRhY2gmJnQuZGV0YWNoKCkpfV9kaXNwb3NlQmFja2Ryb3AodCl7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXIpLHQucmVtb3ZlKCksdGhpcy5fYmFja2Ryb3BFbGVtZW50PT09dCYmKHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsKSksdGhpcy5fYmFja2Ryb3BUaW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX2JhY2tkcm9wVGltZW91dCksdGhpcy5fYmFja2Ryb3BUaW1lb3V0PXZvaWQgMCl9fSxqNz0iY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveCIsWV9lPS8oW0EtWmEteiVdKykkLztmdW5jdGlvbiB5ZihuLHQpe2ZvcihsZXQgZSBpbiB0KXQuaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pO3JldHVybiBufWZ1bmN0aW9uIEc3KG4pe2lmKCJudW1iZXIiIT10eXBlb2YgbiYmbnVsbCE9bil7bGV0W3QsZV09bi5zcGxpdChZX2UpO3JldHVybiBlJiYicHgiIT09ZT9udWxsOnBhcnNlRmxvYXQodCl9cmV0dXJuIG58fG51bGx9ZnVuY3Rpb24gVzcobil7cmV0dXJue3RvcDpNYXRoLmZsb29yKG4udG9wKSxyaWdodDpNYXRoLmZsb29yKG4ucmlnaHQpLGJvdHRvbTpNYXRoLmZsb29yKG4uYm90dG9tKSxsZWZ0Ok1hdGguZmxvb3Iobi5sZWZ0KSx3aWR0aDpNYXRoLmZsb29yKG4ud2lkdGgpLGhlaWdodDpNYXRoLmZsb29yKG4uaGVpZ2h0KX19dmFyIHE3PSJjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlciIsWF9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW99Z2xvYmFsKCl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2Nzc1Bvc2l0aW9uPSJzdGF0aWMiLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fYWxpZ25JdGVtcz0iIix0aGlzLl94UG9zaXRpb249IiIsdGhpcy5feE9mZnNldD0iIix0aGlzLl93aWR0aD0iIix0aGlzLl9oZWlnaHQ9IiIsdGhpcy5faXNEaXNwb3NlZD0hMX1hdHRhY2godCl7bGV0IGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChxNyksdGhpcy5faXNEaXNwb3NlZD0hMX10b3AodD0iIil7cmV0dXJuIHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfWxlZnQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImxlZnQiLHRoaXN9Ym90dG9tKHQ9IiIpe3JldHVybiB0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9cmlnaHQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249InJpZ2h0Iix0aGlzfXN0YXJ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJzdGFydCIsdGhpc31lbmQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImVuZCIsdGhpc313aWR0aCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9aGVpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfWNlbnRlckhvcml6b250YWxseSh0PSIiKXtyZXR1cm4gdGhpcy5sZWZ0KHQpLHRoaXMuX3hQb3NpdGlvbj0iY2VudGVyIix0aGlzfWNlbnRlclZlcnRpY2FsbHkodD0iIil7cmV0dXJuIHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc31hcHBseSgpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOnIsaGVpZ2h0Om8sbWF4V2lkdGg6cyxtYXhIZWlnaHQ6YX09aSxsPSEoIjEwMCUiIT09ciYmIjEwMHZ3IiE9PXJ8fHMmJiIxMDAlIiE9PXMmJiIxMDB2dyIhPT1zKSxjPSEoIjEwMCUiIT09byYmIjEwMHZoIiE9PW98fGEmJiIxMDAlIiE9PWEmJiIxMDB2aCIhPT1hKSxkPXRoaXMuX3hQb3NpdGlvbix1PXRoaXMuX3hPZmZzZXQscD0icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uLGY9IiIsbT0iIixiPSIiO2w/Yj0iZmxleC1zdGFydCI6ImNlbnRlciI9PT1kPyhiPSJjZW50ZXIiLHA/bT11OmY9dSk6cD8ibGVmdCI9PT1kfHwiZW5kIj09PWQ/KGI9ImZsZXgtZW5kIixmPXUpOigicmlnaHQiPT09ZHx8InN0YXJ0Ij09PWQpJiYoYj0iZmxleC1zdGFydCIsbT11KToibGVmdCI9PT1kfHwic3RhcnQiPT09ZD8oYj0iZmxleC1zdGFydCIsZj11KTooInJpZ2h0Ij09PWR8fCJlbmQiPT09ZCkmJihiPSJmbGV4LWVuZCIsbT11KSx0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1sPyIwIjpmLHQubWFyZ2luVG9wPWM/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD1sPyIwIjptLGUuanVzdGlmeUNvbnRlbnQ9YixlLmFsaWduSXRlbXM9Yz8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2xldCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LGk9ZS5zdHlsZTtlLmNsYXNzTGlzdC5yZW1vdmUocTcpLGkuanVzdGlmeUNvbnRlbnQ9aS5hbGlnbkl0ZW1zPXQubWFyZ2luVG9wPXQubWFyZ2luQm90dG9tPXQubWFyZ2luTGVmdD10Lm1hcmdpblJpZ2h0PXQucG9zaXRpb249IiIsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITB9fX1mbGV4aWJsZUNvbm5lY3RlZFRvKGUpe3JldHVybiBuZXcgY2xhc3N7Z2V0IHBvc2l0aW9ucygpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnN9Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX292ZXJsYXlDb250YWluZXI9byx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplPXt3aWR0aDowLGhlaWdodDowfSx0aGlzLl9pc1B1c2hlZD0hMSx0aGlzLl9jYW5QdXNoPSEwLHRoaXMuX2dyb3dBZnRlck9wZW49ITEsdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPSEwLHRoaXMuX3Bvc2l0aW9uTG9ja2VkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTAsdGhpcy5fc2Nyb2xsYWJsZXM9W10sdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPVtdLHRoaXMuX3Bvc2l0aW9uQ2hhbmdlcz1uZXcgSWUsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcz1bXSx0aGlzLnBvc2l0aW9uQ2hhbmdlcz10aGlzLl9wb3NpdGlvbkNoYW5nZXMsdGhpcy5zZXRPcmlnaW4odCl9YXR0YWNoKHQpe3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGo3KSx0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fYm91bmRpbmdCb3g9dC5ob3N0RWxlbWVudCx0aGlzLl9wYW5lPXQub3ZlcmxheUVsZW1lbnQsdGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuYXBwbHkoKX0pfWFwcGx5KCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmdGhpcy5fcG9zaXRpb25Mb2NrZWQmJnRoaXMuX2xhc3RQb3NpdGlvbilyZXR1cm4gdm9pZCB0aGlzLnJlYXBwbHlMYXN0UG9zaXRpb24oKTt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzKCksdGhpcy5fdmlld3BvcnRSZWN0PXRoaXMuX2dldE5hcnJvd2VkVmlld3BvcnRSZWN0KCksdGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBzLHQ9dGhpcy5fb3JpZ2luUmVjdCxlPXRoaXMuX292ZXJsYXlSZWN0LGk9dGhpcy5fdmlld3BvcnRSZWN0LHI9dGhpcy5fY29udGFpbmVyUmVjdCxvPVtdO2ZvcihsZXQgYSBvZiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpe2xldCBsPXRoaXMuX2dldE9yaWdpblBvaW50KHQscixhKSxjPXRoaXMuX2dldE92ZXJsYXlQb2ludChsLGUsYSksZD10aGlzLl9nZXRPdmVybGF5Rml0KGMsZSxpLGEpO2lmKGQuaXNDb21wbGV0ZWx5V2l0aGluVmlld3BvcnQpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLGwpO3RoaXMuX2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnMoZCxjLGkpP28ucHVzaCh7cG9zaXRpb246YSxvcmlnaW46bCxvdmVybGF5UmVjdDplLGJvdW5kaW5nQm94UmVjdDp0aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QobCxhKX0pOighc3x8cy5vdmVybGF5Rml0LnZpc2libGVBcmVhPGQudmlzaWJsZUFyZWEpJiYocz17b3ZlcmxheUZpdDpkLG92ZXJsYXlQb2ludDpjLG9yaWdpblBvaW50OmwscG9zaXRpb246YSxvdmVybGF5UmVjdDplfSl9aWYoby5sZW5ndGgpe2xldCBhPW51bGwsbD0tMTtmb3IobGV0IGMgb2Ygbyl7bGV0IGQ9Yy5ib3VuZGluZ0JveFJlY3Qud2lkdGgqYy5ib3VuZGluZ0JveFJlY3QuaGVpZ2h0KihjLnBvc2l0aW9uLndlaWdodHx8MSk7ZD5sJiYobD1kLGE9Yyl9cmV0dXJuIHRoaXMuX2lzUHVzaGVkPSExLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihhLnBvc2l0aW9uLGEub3JpZ2luKX1pZih0aGlzLl9jYW5QdXNoKXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMCx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24ocy5wb3NpdGlvbixzLm9yaWdpblBvaW50KTt0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW5Qb2ludCl9ZGV0YWNoKCl7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9sYXN0UG9zaXRpb249bnVsbCx0aGlzLl9wcmV2aW91c1B1c2hBbW91bnQ9bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2JvdW5kaW5nQm94JiZ5Zih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIscmlnaHQ6IiIsYm90dG9tOiIiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSksdGhpcy5fcGFuZSYmdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShqNyksdGhpcy5kZXRhY2goKSx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMCl9cmVhcHBseUxhc3RQb3NpdGlvbigpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCB0PXRoaXMuX2xhc3RQb3NpdGlvbjtpZih0KXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0aGlzLl9jb250YWluZXJSZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX1lbHNlIHRoaXMuYXBwbHkoKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVzPXQsdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc313aXRoVmlld3BvcnRNYXJnaW4odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc313aXRoRmxleGlibGVEaW1lbnNpb25zKHQ9ITApe3JldHVybiB0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfXdpdGhHcm93QWZ0ZXJPcGVuKHQ9ITApe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc313aXRoUHVzaCh0PSEwKXtyZXR1cm4gdGhpcy5fY2FuUHVzaD10LHRoaXN9d2l0aExvY2tlZFBvc2l0aW9uKHQ9ITApe3JldHVybiB0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc313aXRoVHJhbnNmb3JtT3JpZ2luT24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc31fZ2V0T3JpZ2luUG9pbnQodCxlLGkpe2xldCByLG87aWYoImNlbnRlciI9PWkub3JpZ2luWClyPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtsZXQgcz10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LGE9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtyPSJzdGFydCI9PWkub3JpZ2luWD9zOmF9cmV0dXJuIGUubGVmdDwwJiYoci09ZS5sZWZ0KSxvPSJjZW50ZXIiPT1pLm9yaWdpblk/dC50b3ArdC5oZWlnaHQvMjoidG9wIj09aS5vcmlnaW5ZP3QudG9wOnQuYm90dG9tLGUudG9wPDAmJihvLT1lLnRvcCkse3g6cix5Om99fV9nZXRPdmVybGF5UG9pbnQodCxlLGkpe2xldCByLG87cmV0dXJuIHI9ImNlbnRlciI9PWkub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09aS5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLG89ImNlbnRlciI9PWkub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PWkub3ZlcmxheVk/MDotZS5oZWlnaHQse3g6dC54K3IseTp0Lnkrb319X2dldE92ZXJsYXlGaXQodCxlLGkscil7bGV0IG89VzcoZSkse3g6cyx5OmF9PXQsbD10aGlzLl9nZXRPZmZzZXQociwieCIpLGM9dGhpcy5fZ2V0T2Zmc2V0KHIsInkiKTtsJiYocys9bCksYyYmKGErPWMpO2xldCBwPTAtYSxmPWErby5oZWlnaHQtaS5oZWlnaHQsbT10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhvLndpZHRoLDAtcyxzK28ud2lkdGgtaS53aWR0aCksYj10aGlzLl9zdWJ0cmFjdE92ZXJmbG93cyhvLmhlaWdodCxwLGYpLE09bSpiO3JldHVybnt2aXNpYmxlQXJlYTpNLGlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0Om8ud2lkdGgqby5oZWlnaHQ9PT1NLGZpdHNJblZpZXdwb3J0VmVydGljYWxseTpiPT09by5oZWlnaHQsZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHk6bT09by53aWR0aH19X2NhbkZpdFdpdGhGbGV4aWJsZURpbWVuc2lvbnModCxlLGkpe2lmKHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucyl7bGV0IHI9aS5ib3R0b20tZS55LG89aS5yaWdodC1lLngscz1HNyh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbkhlaWdodCksYT1HNyh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKTtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPXMmJnM8PXIpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9YSYmYTw9byl9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj1XNyhlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSxkPTAsdT0wO3JldHVybiBkPXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsdT1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDpkLHk6dX0se3g6dC54K2QseTp0LnkrdX19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSxkLHUscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBmPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLG09dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmYscz10LnktZixvPm0mJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktbS8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGQ9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpdT10LngsZD1pLnJpZ2h0LXQueDtlbHNle2xldCBmPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLG09dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDtkPTIqZix1PXQueC1mLGQ+bSYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJih1PXQueC1tLzIpfXJldHVybnt0b3A6cyxsZWZ0OnUsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDpkLGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ZcihpLmhlaWdodCksci50b3A9WXIoaS50b3ApLHIuYm90dG9tPVlyKGkuYm90dG9tKSxyLndpZHRoPVlyKGkud2lkdGgpLHIubGVmdD1ZcihpLmxlZnQpLHIucmlnaHQ9WXIoaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1ZcihvKSkscyYmKHIubWF4V2lkdGg9WXIocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSx5Zih0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3lmKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXt5Zih0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCBkPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3lmKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsZCkpLHlmKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsZCkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PVlyKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPVlyKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSkseWYodGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPVlyKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9WXIoby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOlU3KHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzpJMih0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6VTcoZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzpJMihlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZ0Zyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgTWUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKGpzKSxrKEx0KSxrKEduKSxrKHBnKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUV9lPTAsemk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsZCx1LHAsZil7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT1kLHRoaXMuX2xvY2F0aW9uPXUsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWZ9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxzPW5ldyBRYShlKTtyZXR1cm4gcy5kaXJlY3Rpb249cy5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBPYyhvLGkscixzLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIrUV9lKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoeWMpKSxuZXcgR3YoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhHX2UpLGsocGcpLGsoZm8pLGsoWF9lKSxrKFdfZSksayhNaSksayhhdCksayhMdCksayhYaSksayh3YiksayhxX2UpLGsoaGksOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFpfZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sWDc9bmV3IGllKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iiksd2Q9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxCdT0oKCk9PntjbGFzcyBue2dldCBvZmZzZXRYKCl7cmV0dXJuIHRoaXMuX29mZnNldFh9c2V0IG9mZnNldFgoZSl7dGhpcy5fb2Zmc2V0WD1lLHRoaXMuX3Bvc2l0aW9uJiZ0aGlzLl91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuX3Bvc2l0aW9uKX1nZXQgb2Zmc2V0WSgpe3JldHVybiB0aGlzLl9vZmZzZXRZfXNldCBvZmZzZXRZKGUpe3RoaXMuX29mZnNldFk9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD1SdChlKX1nZXQgbG9ja1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2tQb3NpdGlvbn1zZXQgbG9ja1Bvc2l0aW9uKGUpe3RoaXMuX2xvY2tQb3NpdGlvbj1SdChlKX1nZXQgZmxleGlibGVEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9uc31zZXQgZmxleGlibGVEaW1lbnNpb25zKGUpe3RoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz1SdChlKX1nZXQgZ3Jvd0FmdGVyT3Blbigpe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVufXNldCBncm93QWZ0ZXJPcGVuKGUpe3RoaXMuX2dyb3dBZnRlck9wZW49UnQoZSl9Z2V0IHB1c2goKXtyZXR1cm4gdGhpcy5fcHVzaH1zZXQgcHVzaChlKXt0aGlzLl9wdXNoPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2Rpcj1zLHRoaXMuX2hhc0JhY2tkcm9wPSExLHRoaXMuX2xvY2tQb3NpdGlvbj0hMSx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2ZsZXhpYmxlRGltZW5zaW9ucz0hMSx0aGlzLl9wdXNoPSExLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249TW4uRU1QVFksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb249TW4uRU1QVFksdGhpcy52aWV3cG9ydE1hcmdpbj0wLHRoaXMub3Blbj0hMSx0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IEYsdGhpcy5wb3NpdGlvbkNoYW5nZT1uZXcgRix0aGlzLmF0dGFjaD1uZXcgRix0aGlzLmRldGFjaD1uZXcgRix0aGlzLm92ZXJsYXlLZXlkb3duPW5ldyBGLHRoaXMub3ZlcmxheU91dHNpZGVDbGljaz1uZXcgRix0aGlzLl90ZW1wbGF0ZVBvcnRhbD1uZXcgWW8oaSxyKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9byx0aGlzLnNjcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpfWdldCBvdmVybGF5UmVmKCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXI/dGhpcy5fZGlyLnZhbHVlOiJsdHIifW5nT25EZXN0cm95KCl7dGhpcy5fYXR0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX292ZXJsYXlSZWYmJnRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpfW5nT25DaGFuZ2VzKGUpe3RoaXMuX3Bvc2l0aW9uJiYodGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbiksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0aGlzLndpZHRoLG1pbldpZHRoOnRoaXMubWluV2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1pbkhlaWdodDp0aGlzLm1pbkhlaWdodH0pLGUub3JpZ2luJiZ0aGlzLm9wZW4mJnRoaXMuX3Bvc2l0aW9uLmFwcGx5KCkpLGUub3BlbiYmKHRoaXMub3Blbj90aGlzLl9hdHRhY2hPdmVybGF5KCk6dGhpcy5fZGV0YWNoT3ZlcmxheSgpKX1fY3JlYXRlT3ZlcmxheSgpeyghdGhpcy5wb3NpdGlvbnN8fCF0aGlzLnBvc2l0aW9ucy5sZW5ndGgpJiYodGhpcy5wb3NpdGlvbnM9Wl9lKTtsZXQgZT10aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2J1aWxkQ29uZmlnKCkpO3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbj1lLmF0dGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT50aGlzLmF0dGFjaC5lbWl0KCkpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbj1lLmRldGFjaG1lbnRzKCkuc3Vic2NyaWJlKCgpPT50aGlzLmRldGFjaC5lbWl0KCkpLGUua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShpPT57dGhpcy5vdmVybGF5S2V5ZG93bi5uZXh0KGkpLDI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiF2cihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLl9kZXRhY2hPdmVybGF5KCkpfSksdGhpcy5fb3ZlcmxheVJlZi5vdXRzaWRlUG9pbnRlckV2ZW50cygpLnN1YnNjcmliZShpPT57dGhpcy5vdmVybGF5T3V0c2lkZUNsaWNrLm5leHQoaSl9KX1fYnVpbGRDb25maWcoKXtsZXQgZT10aGlzLl9wb3NpdGlvbj10aGlzLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSxpPW5ldyBRYSh7ZGlyZWN0aW9uOnRoaXMuX2Rpcixwb3NpdGlvblN0cmF0ZWd5OmUsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5zY3JvbGxTdHJhdGVneSxoYXNCYWNrZHJvcDp0aGlzLmhhc0JhY2tkcm9wfSk7cmV0dXJuKHRoaXMud2lkdGh8fDA9PT10aGlzLndpZHRoKSYmKGkud2lkdGg9dGhpcy53aWR0aCksKHRoaXMuaGVpZ2h0fHwwPT09dGhpcy5oZWlnaHQpJiYoaS5oZWlnaHQ9dGhpcy5oZWlnaHQpLCh0aGlzLm1pbldpZHRofHwwPT09dGhpcy5taW5XaWR0aCkmJihpLm1pbldpZHRoPXRoaXMubWluV2lkdGgpLCh0aGlzLm1pbkhlaWdodHx8MD09PXRoaXMubWluSGVpZ2h0KSYmKGkubWluSGVpZ2h0PXRoaXMubWluSGVpZ2h0KSx0aGlzLmJhY2tkcm9wQ2xhc3MmJihpLmJhY2tkcm9wQ2xhc3M9dGhpcy5iYWNrZHJvcENsYXNzKSx0aGlzLnBhbmVsQ2xhc3MmJihpLnBhbmVsQ2xhc3M9dGhpcy5wYW5lbENsYXNzKSxpfV91cGRhdGVQb3NpdGlvblN0cmF0ZWd5KGUpe2xldCBpPXRoaXMucG9zaXRpb25zLm1hcChyPT4oe29yaWdpblg6ci5vcmlnaW5YLG9yaWdpblk6ci5vcmlnaW5ZLG92ZXJsYXlYOnIub3ZlcmxheVgsb3ZlcmxheVk6ci5vdmVybGF5WSxvZmZzZXRYOnIub2Zmc2V0WHx8dGhpcy5vZmZzZXRYLG9mZnNldFk6ci5vZmZzZXRZfHx0aGlzLm9mZnNldFkscGFuZWxDbGFzczpyLnBhbmVsQ2xhc3N8fHZvaWQgMH0pKTtyZXR1cm4gZS5zZXRPcmlnaW4odGhpcy5fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCkpLndpdGhQb3NpdGlvbnMoaSkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0aGlzLmZsZXhpYmxlRGltZW5zaW9ucykud2l0aFB1c2godGhpcy5wdXNoKS53aXRoR3Jvd0FmdGVyT3Blbih0aGlzLmdyb3dBZnRlck9wZW4pLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLnZpZXdwb3J0TWFyZ2luKS53aXRoTG9ja2VkUG9zaXRpb24odGhpcy5sb2NrUG9zaXRpb24pLndpdGhUcmFuc2Zvcm1PcmlnaW5Pbih0aGlzLnRyYW5zZm9ybU9yaWdpblNlbGVjdG9yKX1fY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpe2xldCBlPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKSxlfV9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKXtyZXR1cm4gdGhpcy5vcmlnaW4gaW5zdGFuY2VvZiB3ZD90aGlzLm9yaWdpbi5lbGVtZW50UmVmOnRoaXMub3JpZ2lufV9hdHRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmhhc0JhY2tkcm9wPXRoaXMuaGFzQmFja2Ryb3A6dGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKXx8dGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fdGVtcGxhdGVQb3J0YWwpLHRoaXMuaGFzQmFja2Ryb3A/dGhpcy5fYmFja2Ryb3BTdWJzY3JpcHRpb249dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKGU9Pnt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdChlKX0pOnRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCYmKHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXRoaXMuX3Bvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKEFfKCgpPT50aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGg+MCkpLnN1YnNjcmliZShlPT57dGhpcy5wb3NpdGlvbkNoYW5nZS5lbWl0KGUpLDA9PT10aGlzLnBvc2l0aW9uQ2hhbmdlLm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9KSl9X2RldGFjaE92ZXJsYXkoKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6aSksQyhTaSksQyhzaSksQyhYNyksQyhYaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1jb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNka0Nvbm5lY3RlZE92ZXJsYXkiLCIiXV0saW5wdXRzOntvcmlnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwib3JpZ2luIl0scG9zaXRpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsInBvc2l0aW9ucyJdLHBvc2l0aW9uU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25TdHJhdGVneSIsInBvc2l0aW9uU3RyYXRlZ3kiXSxvZmZzZXRYOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFgiLCJvZmZzZXRYIl0sb2Zmc2V0WTpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRZIiwib2Zmc2V0WSJdLHdpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoIiwid2lkdGgiXSxoZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGVpZ2h0IiwiaGVpZ2h0Il0sbWluV2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGgiLCJtaW5XaWR0aCJdLG1pbkhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5IZWlnaHQiLCJtaW5IZWlnaHQiXSxiYWNrZHJvcENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJiYWNrZHJvcENsYXNzIl0scGFuZWxDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwicGFuZWxDbGFzcyJdLHZpZXdwb3J0TWFyZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVZpZXdwb3J0TWFyZ2luIiwidmlld3BvcnRNYXJnaW4iXSxzY3JvbGxTdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsInNjcm9sbFN0cmF0ZWd5Il0sb3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwib3BlbiJdLGRpc2FibGVDbG9zZTpbImNka0Nvbm5lY3RlZE92ZXJsYXlEaXNhYmxlQ2xvc2UiLCJkaXNhYmxlQ2xvc2UiXSx0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvcjpbImNka0Nvbm5lY3RlZE92ZXJsYXlUcmFuc2Zvcm1PcmlnaW5PbiIsInRyYW5zZm9ybU9yaWdpblNlbGVjdG9yIl0saGFzQmFja2Ryb3A6WyJjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3AiLCJoYXNCYWNrZHJvcCJdLGxvY2tQb3NpdGlvbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJsb2NrUG9zaXRpb24iXSxmbGV4aWJsZURpbWVuc2lvbnM6WyJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiZmxleGlibGVEaW1lbnNpb25zIl0sZ3Jvd0FmdGVyT3BlbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwiZ3Jvd0FmdGVyT3BlbiJdLHB1c2g6WyJjZGtDb25uZWN0ZWRPdmVybGF5UHVzaCIsInB1c2giXX0sb3V0cHV0czp7YmFja2Ryb3BDbGljazoiYmFja2Ryb3BDbGljayIscG9zaXRpb25DaGFuZ2U6InBvc2l0aW9uQ2hhbmdlIixhdHRhY2g6ImF0dGFjaCIsZGV0YWNoOiJkZXRhY2giLG92ZXJsYXlLZXlkb3duOiJvdmVybGF5S2V5ZG93biIsb3ZlcmxheU91dHNpZGVDbGljazoib3ZlcmxheU91dHNpZGVDbGljayJ9LGV4cG9ydEFzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheSJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W0d0XX0pLG59KSgpLEpfZT17cHJvdmlkZTpYNyxkZXBzOlt6aV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LENvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3ppLEpfZV0saW1wb3J0czpbT3UsSGwsTWQsTWRdfSksbn0pKCk7ZnVuY3Rpb24gJF9lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyKSgxLCJidXR0b24iLDMpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmFjdGlvbigpKX0pLFQoMiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digyKSxIZSgiICIsZS5kYXRhLmFjdGlvbiwiICIpfX12YXIgZWJlPVsibGFiZWwiXTtmdW5jdGlvbiB0YmUobix0KXt9dmFyIG5iZT1NYXRoLnBvdygyLDMxKS0xLENmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBJZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgSWUsdGhpcy5fb25BY3Rpb249bmV3IEllLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpfWRpc21pc3MoKXt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9ZGlzbWlzc1dpdGhBY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLmRpc21pc3MoKSksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1jbG9zZVdpdGhBY3Rpb24oKXt0aGlzLmRpc21pc3NXaXRoQWN0aW9uKCl9X2Rpc21pc3NBZnRlcih0KXt0aGlzLl9kdXJhdGlvblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLmRpc21pc3MoKSxNYXRoLm1pbih0LG5iZSkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0sWTE9bmV3IGllKCJNYXRTbmFja0JhckRhdGEiKSxmZz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19LGliZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0U25hY2tCYXJMYWJlbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtc25hY2stYmFyLWxhYmVsIiwibWRjLXNuYWNrYmFyX19sYWJlbCJdfSksbn0pKCkscmJlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRTbmFja0JhckFjdGlvbnMiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLXNuYWNrLWJhci1hY3Rpb25zIiwibWRjLXNuYWNrYmFyX19hY3Rpb25zIl19KSxufSkoKSxvYmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNuYWNrQmFyQWN0aW9uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1zbmFjay1iYXItYWN0aW9uIiwibWRjLXNuYWNrYmFyX19hY3Rpb24iXX0pLG59KSgpLHNiZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zbmFja0JhclJlZj1lLHRoaXMuZGF0YT1pfWFjdGlvbigpe3RoaXMuc25hY2tCYXJSZWYuZGlzbWlzc1dpdGhBY3Rpb24oKX1nZXQgaGFzQWN0aW9uKCl7cmV0dXJuISF0aGlzLmRhdGEuYWN0aW9ufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKENmKSxDKFkxKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2ltcGxlLXNuYWNrLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtc2ltcGxlLXNuYWNrLWJhciJdLGV4cG9ydEFzOlsibWF0U25hY2tCYXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sibWF0U25hY2tCYXJMYWJlbCIsIiJdLFsibWF0U25hY2tCYXJBY3Rpb25zIiwiIiw0LCJuZ0lmIl0sWyJtYXRTbmFja0JhckFjdGlvbnMiLCIiXSxbIm1hdC1idXR0b24iLCIiLCJtYXRTbmFja0JhckFjdGlvbiIsIiIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksVCgxKSxnKCksUygyLCRfZSwzLDEsImRpdiIsMSkpLDImZSYmKHYoMSksSGUoIiAiLGkuZGF0YS5tZXNzYWdlLCJcbiIpLHYoMSksXygibmdJZiIsaS5oYXNBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltGZSxKaSxpYmUscmJlLG9iZV0sc3R5bGVzOlsiLm1hdC1tZGMtc2ltcGxlLXNuYWNrLWJhcntkaXNwbGF5OmZsZXh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYWJlPXtzbmFja0JhclN0YXRlOl9yKCJzdGF0ZSIsW3dpKCJ2b2lkLCBoaWRkZW4iLHJuKHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSx3aSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxnaSgiKiA9PiB2aXNpYmxlIixDaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksZ2koIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLENpKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LGxiZT0wLGNiZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnV7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nWm9uZT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1zLHRoaXMuX2RvY3VtZW50PWFpKEx0KSx0aGlzLl90cmFja2VkTW9kYWxzPW5ldyBTZXQsdGhpcy5fYW5ub3VuY2VEZWxheT0xNTAsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uQW5ub3VuY2U9bmV3IEllLHRoaXMuX29uRXhpdD1uZXcgSWUsdGhpcy5fb25FbnRlcj1uZXcgSWUsdGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2xpdmVFbGVtZW50SWQ9Im1hdC1zbmFjay1iYXItY29udGFpbmVyLWxpdmUtIitsYmUrKyx0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgbD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGEpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksbH0sdGhpcy5fbGl2ZT0iYXNzZXJ0aXZlIiE9PXMucG9saXRlbmVzc3x8cy5hbm5vdW5jZW1lbnRNZXNzYWdlPyJvZmYiPT09cy5wb2xpdGVuZXNzPyJvZmYiOiJwb2xpdGUiOiJhc3NlcnRpdmUiLHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gmJigicG9saXRlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJzdGF0dXMiKSwiYXNzZXJ0aXZlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJhbGVydCIpKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9b25BbmltYXRpb25FbmQoZSl7bGV0e2Zyb21TdGF0ZTppLHRvU3RhdGU6cn09ZTtpZigoInZvaWQiPT09ciYmInZvaWQiIT09aXx8ImhpZGRlbiI9PT1yKSYmdGhpcy5fY29tcGxldGVFeGl0KCksInZpc2libGUiPT09cil7bGV0IG89dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgpPT57by5uZXh0KCksby5jb21wbGV0ZSgpfSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25TdGF0ZT0iaGlkZGVuIix0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXQtZXhpdCIsIiIpLGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCl9KSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY2xlYXJGcm9tTW9kYWxzKCksdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoWXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSl9KX1fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztpJiYoQXJyYXkuaXNBcnJheShpKT9pLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKTplLmNsYXNzTGlzdC5hZGQoaSkpLHRoaXMuX2V4cG9zZVRvTW9kYWxzKCl9X2V4cG9zZVRvTW9kYWxzKCl7bGV0IGU9dGhpcy5fbGl2ZUVsZW1lbnRJZCxpPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2JvZHkgPiAuY2RrLW92ZXJsYXktY29udGFpbmVyIFthcmlhLW1vZGFsPSJ0cnVlIl0nKTtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXSxzPW8uZ2V0QXR0cmlidXRlKCJhcmlhLW93bnMiKTt0aGlzLl90cmFja2VkTW9kYWxzLmFkZChvKSxzPy0xPT09cy5pbmRleE9mKGUpJiZvLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixzKyIgIitlKTpvLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixlKX19X2NsZWFyRnJvbU1vZGFscygpe3RoaXMuX3RyYWNrZWRNb2RhbHMuZm9yRWFjaChlPT57bGV0IGk9ZS5nZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIpO2lmKGkpe2xldCByPWkucmVwbGFjZSh0aGlzLl9saXZlRWxlbWVudElkLCIiKS50cmltKCk7ci5sZW5ndGg+MD9lLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixyKTplLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1vd25zIil9fSksdGhpcy5fdHJhY2tlZE1vZGFscy5jbGVhcigpfV9hc3NlcnROb3RBdHRhY2hlZCgpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWhpZGRlbl0iKSxpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1saXZlXSIpO2lmKGUmJmkpe2xldCByPW51bGw7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihyPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGkuYXBwZW5kQ2hpbGQoZSkscj8uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSx0aGlzLl9hbm5vdW5jZURlbGF5KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKGF0KSxDKE1lKSxDKCR0KSxDKEduKSxDKGZnKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShwcyw3KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxmZWF0dXJlczpbS2VdfSksbn0pKCksZGJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjYmV7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpO2xldCBlPXRoaXMuX2xhYmVsLm5hdGl2ZUVsZW1lbnQsaT0ibWRjLXNuYWNrYmFyX19sYWJlbCI7ZS5jbGFzc0xpc3QudG9nZ2xlKGksIWUucXVlcnlTZWxlY3RvcihgLiR7aX1gKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKGViZSw3KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWRjLXNuYWNrYmFyIiwibWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIiwibWRjLXNuYWNrYmFyLS1vcGVuIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJnpNKCJAc3RhdGUuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25BbmltYXRpb25FbmQobyl9KSwyJmUmJkdNKCJAc3RhdGUiLGkuX2FuaW1hdGlvblN0YXRlKX0sZmVhdHVyZXM6W0tlXSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sxLCJtZGMtc25hY2tiYXJfX3N1cmZhY2UiXSxbMSwibWF0LW1kYy1zbmFjay1iYXItbGFiZWwiXSxbImxhYmVsIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiXSxbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEsMikoMywiZGl2IiwzKSxTKDQsdGJlLDAsMCwibmctdGVtcGxhdGUiLDQpLGcoKSxQKDUsImRpdiIpLGcoKSgpKSwyJmUmJih2KDUpLEJlKCJhcmlhLWxpdmUiLGkuX2xpdmUpKCJyb2xlIixpLl9yb2xlKSgiaWQiLGkuX2xpdmVFbGVtZW50SWQpKX0sZGVwZW5kZW5jaWVzOltwc10sc3R5bGVzOlsnLm1kYy1zbmFja2JhcntkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1kYy1zbmFja2Jhci0tb3BlbmluZywubWRjLXNuYWNrYmFyLS1vcGVuLC5tZGMtc25hY2tiYXItLWNsb3Npbmd7ZGlzcGxheTpmbGV4fS5tZGMtc25hY2tiYXItLW9wZW4gLm1kYy1zbmFja2Jhcl9fbGFiZWwsLm1kYy1zbmFja2Jhci0tb3BlbiAubWRjLXNuYWNrYmFyX19hY3Rpb25ze3Zpc2liaWxpdHk6dmlzaWJsZX0ubWRjLXNuYWNrYmFyX19zdXJmYWNle3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6OHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7Ym94LXNpemluZzpib3JkZXItYm94O3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLXNuYWNrYmFyX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtc25hY2tiYXJfX3N1cmZhY2U6OmJlZm9yZXtib3JkZXItY29sb3I6Q2FudmFzVGV4dH19W2Rpcj1ydGxdIC5tZGMtc25hY2tiYXJfX3N1cmZhY2UsLm1kYy1zbmFja2Jhcl9fc3VyZmFjZVtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXNuYWNrYmFyLS1vcGVuIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvfS5tZGMtc25hY2tiYXItLWNsb3NpbmcgLm1kYy1zbmFja2Jhcl9fc3VyZmFjZXt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1kYy1zbmFja2Jhcl9fbGFiZWx7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDo4cHg7d2lkdGg6MTAwJTtmbGV4LWdyb3c6MTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7dmlzaWJpbGl0eTpoaWRkZW47cGFkZGluZy10b3A6MTRweDtwYWRkaW5nLWJvdHRvbToxNHB4fVtkaXI9cnRsXSAubWRjLXNuYWNrYmFyX19sYWJlbCwubWRjLXNuYWNrYmFyX19sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6MTZweH0ubWRjLXNuYWNrYmFyX19sYWJlbDo6YmVmb3Jle2Rpc3BsYXk6aW5saW5lO2NvbnRlbnQ6YXR0cihkYXRhLW1kYy1zbmFja2Jhci1sYWJlbC10ZXh0KX0ubWRjLXNuYWNrYmFyX19hY3Rpb25ze2Rpc3BsYXk6ZmxleDtmbGV4LXNocmluazowO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7dmlzaWJpbGl0eTpoaWRkZW59Lm1kYy1zbmFja2Jhcl9fYWN0aW9uKy5tZGMtc25hY2tiYXJfX2Rpc21pc3N7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLXNuYWNrYmFyX19hY3Rpb24rLm1kYy1zbmFja2Jhcl9fZGlzbWlzcywubWRjLXNuYWNrYmFyX19hY3Rpb24rLm1kYy1zbmFja2Jhcl9fZGlzbWlzc1tkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lcnttYXJnaW46OHB4O3Bvc2l0aW9uOnN0YXRpY30ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7bWluLXdpZHRoOjM0NHB4fUBtZWRpYShtYXgtd2lkdGg6IDQ4MHB4KSwobWF4LXdpZHRoOiAzNDRweCl7Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle21pbi13aWR0aDoxMDAlfX1AbWVkaWEobWF4LXdpZHRoOiA0ODBweCksKG1heC13aWR0aDogMzQ0cHgpey5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXJ7d2lkdGg6MTAwdnd9fS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fc3VyZmFjZXttYXgtd2lkdGg6NjcycHh9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19zdXJmYWNle2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fZGlzbWlzcyAubWRjLWJ1dHRvbl9faWNvbntmb250LXNpemU6dmFyKC0tbWRjLWljb24tYnV0dG9uLWljb24tc2l6ZSwgdmFyKC0tbWRjLXNuYWNrYmFyLWljb24tc2l6ZSwgMjRweCkpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fZGlzbWlzcyBzdmcsLm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19kaXNtaXNzIGltZ3t3aWR0aDp2YXIoLS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplLCB2YXIoLS1tZGMtc25hY2tiYXItaWNvbi1zaXplLCAyNHB4KSk7aGVpZ2h0OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1pY29uLXNpemUsIHZhcigtLW1kYy1zbmFja2Jhci1pY29uLXNpemUsIDI0cHgpKX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtc25hY2tiYXItY29udGFpbmVyLWNvbG9yLCBpbmhlcml0KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc25hY2tiYXItY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1kYy1zbmFja2Jhcl9fbGFiZWx7Y29sb3I6dmFyKC0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19sYWJlbHtmb250LXNpemU6dmFyKC0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1zaXplLCBpbmhlcml0KTtmb250LWZhbWlseTp2YXIoLS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWZvbnQsIGluaGVyaXQpO2ZvbnQtd2VpZ2h0OnZhcigtLW1kYy1zbmFja2Jhci1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0LCBpbmhlcml0KTtsaW5lLWhlaWdodDp2YXIoLS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0LCBpbmhlcml0KX0ubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyIC5tYXQtbWRjLWJ1dHRvbi5tYXQtbWRjLXNuYWNrLWJhci1hY3Rpb246bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tbWF0LW1kYy1zbmFjay1iYXItYnV0dG9uLWNvbG9yLCB0cmFuc3BhcmVudCk7LS1tYXQtbWRjLWJ1dHRvbi1wZXJzaXN0ZW50LXJpcHBsZS1jb2xvcjogY3VycmVudENvbG9yfS5tYXQtbWRjLXNuYWNrLWJhci1jb250YWluZXIgLm1hdC1tZGMtYnV0dG9uLm1hdC1tZGMtc25hY2stYmFyLWFjdGlvbjpub3QoOmRpc2FibGVkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yO29wYWNpdHk6LjF9Lm1hdC1tZGMtc25hY2stYmFyLWNvbnRhaW5lciAubWRjLXNuYWNrYmFyX19sYWJlbDo6YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1zbmFjay1iYXItaGFuZHNldCwubWF0LW1kYy1zbmFjay1iYXItY29udGFpbmVyLC5tYXQtbWRjLXNuYWNrLWJhci1sYWJlbHtmbGV4OjEgMSBhdXRvfS5tYXQtbWRjLXNuYWNrLWJhci1oYW5kc2V0IC5tZGMtc25hY2tiYXJfX3N1cmZhY2V7d2lkdGg6MTAwJX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlthYmUuc25hY2tCYXJTdGF0ZV19fSksbn0pKCksTzI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0NvLEhsLFBlLGNpLGZuLGZuXX0pLG59KSgpLFE3PW5ldyBpZSgibWF0LXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmZ319KSxwYmU9KCgpPT57Y2xhc3MgbntnZXQgX29wZW5lZFNuYWNrQmFyUmVmKCl7bGV0IGU9dGhpcy5fcGFyZW50U25hY2tCYXI7cmV0dXJuIGU/ZS5fb3BlbmVkU25hY2tCYXJSZWY6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbH1zZXQgX29wZW5lZFNuYWNrQmFyUmVmKGUpe3RoaXMuX3BhcmVudFNuYWNrQmFyP3RoaXMuX3BhcmVudFNuYWNrQmFyLl9vcGVuZWRTbmFja0JhclJlZj1lOnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9ZX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2xpdmU9aSx0aGlzLl9pbmplY3Rvcj1yLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1vLHRoaXMuX3BhcmVudFNuYWNrQmFyPXMsdGhpcy5fZGVmYXVsdENvbmZpZz1hLHRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWw9bnVsbH1vcGVuRnJvbUNvbXBvbmVudChlLGkpe3JldHVybiB0aGlzLl9hdHRhY2goZSxpKX1vcGVuRnJvbVRlbXBsYXRlKGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW4oZSxpPSIiLHIpe2xldCBvPXsuLi50aGlzLl9kZWZhdWx0Q29uZmlnLC4uLnJ9O3JldHVybiBvLmRhdGE9e21lc3NhZ2U6ZSxhY3Rpb246aX0sby5hbm5vdW5jZW1lbnRNZXNzYWdlPT09ZSYmKG8uYW5ub3VuY2VtZW50TWVzc2FnZT12b2lkIDApLHRoaXMub3BlbkZyb21Db21wb25lbnQodGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudCxvKX1kaXNtaXNzKCl7dGhpcy5fb3BlbmVkU25hY2tCYXJSZWYmJnRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwmJnRoaXMuX3NuYWNrQmFyUmVmQXRUaGlzTGV2ZWwuZGlzbWlzcygpfV9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihlLGkpe2xldCBvPU1pLmNyZWF0ZSh7cGFyZW50OmkmJmkudmlld0NvbnRhaW5lclJlZiYmaS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6W3twcm92aWRlOmZnLHVzZVZhbHVlOml9XX0pLHM9bmV3IFZsKHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQsaS52aWV3Q29udGFpbmVyUmVmLG8pLGE9ZS5hdHRhY2gocyk7cmV0dXJuIGEuaW5zdGFuY2Uuc25hY2tCYXJDb25maWc9aSxhLmluc3RhbmNlfV9hdHRhY2goZSxpKXtsZXQgcj17Li4ubmV3IGZnLC4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4uaX0sbz10aGlzLl9jcmVhdGVPdmVybGF5KHIpLHM9dGhpcy5fYXR0YWNoU25hY2tCYXJDb250YWluZXIobyxyKSxhPW5ldyBDZihzLG8pO2lmKGUgaW5zdGFuY2VvZiBTaSl7bGV0IGw9bmV3IFlvKGUsbnVsbCx7JGltcGxpY2l0OnIuZGF0YSxzbmFja0JhclJlZjphfSk7YS5pbnN0YW5jZT1zLmF0dGFjaFRlbXBsYXRlUG9ydGFsKGwpfWVsc2V7bGV0IGw9dGhpcy5fY3JlYXRlSW5qZWN0b3IocixhKSxjPW5ldyBWbChlLHZvaWQgMCxsKSxkPXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGMpO2EuaW5zdGFuY2U9ZC5pbnN0YW5jZX1yZXR1cm4gdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoIihtYXgtd2lkdGg6IDU5OS45OHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkiKS5waXBlKG90KG8uZGV0YWNobWVudHMoKSkpLnN1YnNjcmliZShsPT57by5vdmVybGF5RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuaGFuZHNldENzc0NsYXNzLGwubWF0Y2hlcyl9KSxyLmFubm91bmNlbWVudE1lc3NhZ2UmJnMuX29uQW5ub3VuY2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fbGl2ZS5hbm5vdW5jZShyLmFubm91bmNlbWVudE1lc3NhZ2Usci5wb2xpdGVuZXNzKX0pLHRoaXMuX2FuaW1hdGVTbmFja0JhcihhLHIpLHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPWEsdGhpcy5fb3BlbmVkU25hY2tCYXJSZWZ9X2FuaW1hdGVTbmFja0JhcihlLGkpe2UuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vcGVuZWRTbmFja0JhclJlZj09ZSYmKHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmPW51bGwpLGkuYW5ub3VuY2VtZW50TWVzc2FnZSYmdGhpcy5fbGl2ZS5jbGVhcigpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY/KHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmFmdGVyRGlzbWlzc2VkKCkuc3Vic2NyaWJlKCgpPT57ZS5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpfSksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpKTplLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCksaS5kdXJhdGlvbiYmaS5kdXJhdGlvbj4wJiZlLmFmdGVyT3BlbmVkKCkuc3Vic2NyaWJlKCgpPT5lLl9kaXNtaXNzQWZ0ZXIoaS5kdXJhdGlvbikpfV9jcmVhdGVPdmVybGF5KGUpe2xldCBpPW5ldyBRYTtpLmRpcmVjdGlvbj1lLmRpcmVjdGlvbjtsZXQgcj10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCksbz0icnRsIj09PWUuZGlyZWN0aW9uLHM9ImxlZnQiPT09ZS5ob3Jpem9udGFsUG9zaXRpb258fCJzdGFydCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmIW98fCJlbmQiPT09ZS5ob3Jpem9udGFsUG9zaXRpb24mJm8sYT0hcyYmImNlbnRlciIhPT1lLmhvcml6b250YWxQb3NpdGlvbjtyZXR1cm4gcz9yLmxlZnQoIjAiKTphP3IucmlnaHQoIjAiKTpyLmNlbnRlckhvcml6b250YWxseSgpLCJ0b3AiPT09ZS52ZXJ0aWNhbFBvc2l0aW9uP3IudG9wKCIwIik6ci5ib3R0b20oIjAiKSxpLnBvc2l0aW9uU3RyYXRlZ3k9cix0aGlzLl9vdmVybGF5LmNyZWF0ZShpKX1fY3JlYXRlSW5qZWN0b3IoZSxpKXtyZXR1cm4gTWkuY3JlYXRlKHtwYXJlbnQ6ZSYmZS52aWV3Q29udGFpbmVyUmVmJiZlLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6Q2YsdXNlVmFsdWU6aX0se3Byb3ZpZGU6WTEsdXNlVmFsdWU6ZS5kYXRhfV19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhWdiksayhNaSksayhGdiksayhuLDEyKSxrKFE3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWjc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBiZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7c3VwZXIoZSxpLHIsbyxzLGEpLHRoaXMuc2ltcGxlU25hY2tCYXJDb21wb25lbnQ9c2JlLHRoaXMuc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ9ZGJlLHRoaXMuaGFuZHNldENzc0NsYXNzPSJtYXQtbWRjLXNuYWNrLWJhci1oYW5kc2V0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhWdiksayhNaSksayhGdiksayhuLDEyKSxrKFE3KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46TzJ9KSxufSkoKSxmYmU9L1tcXF4kLiorPygpW1xde318XS9nLEo3PSJcXHUwMDAwLVxcdTAwMjBcXHUwMDdmLVxcdTAwOWYiLGhiZT1uZXcgUmVnRXhwKCIoPzpbYS16QS1aXVthLXpBLVowLTkrLi1dezIsfTpcXC9cXC98ZGF0YTp8d3d3XFwuKVteXFxzIitKNysnIl17Mix9W15cXHMnK0o3KyJcIicpfVxcXSw6Oy4hP10iLCJndSIpO2Z1bmN0aW9uIGU5KG4pe3JldHVybiBmdW5jdGlvbihuLHQpe3QuZmxhZ3MuaW5jbHVkZXMoImciKXx8KHQ9bmV3IFJlZ0V4cCh0LHQuZmxhZ3MrImciKSk7bGV0IGU9W10saT0wO2ZvcihsZXQgciBvZiBuLm1hdGNoQWxsKHQpKXtsZXQgbz1yLmluZGV4LHM9clswXTtvPmkmJmUucHVzaCh7aW5kZXg6aSx0ZXh0Om4uc3Vic3RyaW5nKGksbyksbWF0Y2hlc1JlZ2V4OiExfSksZS5wdXNoKHtpbmRleDpvLHRleHQ6cyxtYXRjaGVzUmVnZXg6ITB9KSxpPW8rcy5sZW5ndGh9cmV0dXJuIG4ubGVuZ3RoPmkmJmUucHVzaCh7aW5kZXg6aSx0ZXh0Om4uc3Vic3RyaW5nKGksbi5sZW5ndGgpLG1hdGNoZXNSZWdleDohMX0pLGV9KG4saGJlKS5tYXAoKHttYXRjaGVzUmVnZXg6dCx0ZXh0OmV9KT0+KHtpc1VSTDp0LHRleHQ6ZX0pKX1mdW5jdGlvbiBnYmUobix0KXtpZigxJm4mJihPdCgwKSxUKDEpLGt0KCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLEhlKCIgIixlLnRleHQsIiAiKX19ZnVuY3Rpb24gX2JlKG4sdCl7aWYoMSZuJiYoaCgwLCJhIiw3KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O1dpKCJocmVmIixlLnRleHQsa2EpLHYoMSksYnQoZS50ZXh0KX19ZnVuY3Rpb24gYmJlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLGdiZSwyLDEsIm5nLWNvbnRhaW5lciIsNSksUygyLF9iZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDYsV3QpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1pdCgzKTt2KDEpLF8oIm5nSWYiLCFlLmlzVVJMKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiB2YmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDgpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpO3YoMSksSGUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIHQ5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1lOSx0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbigpO3RoaXMuc3RvcmUuZGlzcGF0Y2goZSl9b25DbG9zZUJ1dHRvbkNsaWNrZWQoKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3MoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhDZiksQyhZMSksQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LWRpc3BsYXktc25hY2tiYXIiXV0sZGVjbHM6Nix2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBjbG9zZSB0aGUgc25hY2tiYXIgbWVzc2FnZeKQn2VhNGQ5ZmU2MTQyMGEzZmNlODFjZjU0YzRjNjE1ZTNjMTljNjQ2YTbikJ8xNTM2MDg3NTE5NzQzNzA3MzYyOkRpc21pc3NgLFtbMSwibWVzc2FnZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImRpc21pc3MtYnV0dG9uIiwzLCJjbGljayJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxpbmtQaWVjZSIsIiJdLFsicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsInRhcmdldCIsIl9ibGFuayIsMywiaHJlZiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiZm9sbG93dXAtYnV0dG9uIiwzLCJjbGljayJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksUygxLGJiZSw0LDIsIm5nLWNvbnRhaW5lciIsMSksZygpLGgoMiwiZGl2IiwyKSxTKDMsdmJlLDIsMSwiYnV0dG9uIiwzKSxoKDQsImJ1dHRvbiIsNCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DbG9zZUJ1dHRvbkNsaWNrZWQoKX0pLFQoNSwiIERpc21pc3MgIiksZygpKCkpLDImZSYmKHYoMSksXygibmdGb3JPZiIsaS5zcGxpdEJ5VVJMKGkuYWxlcnQubG9jYWxpemVkTWVzc2FnZSkpLHYoMiksXygibmdJZiIsaS5hbGVydC5mb2xsb3d1cEFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W25uLEZlLEppXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjVweCAwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0ubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1sZWZ0OmF1dG99YnV0dG9uLm1hdC1tZGMtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG45PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5zbmFja0Jhcj1pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChqNikucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGtlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMuc2hvd0FsZXJ0KGUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXNob3dBbGVydChlKXt0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KHQ5LHtkdXJhdGlvbjo1ZTMsaG9yaXpvbnRhbFBvc2l0aW9uOiJzdGFydCIsdmVydGljYWxQb3NpdGlvbjoiYm90dG9tIixkYXRhOmV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSksQyhaNykpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0LXNuYWNrYmFyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYMT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsY2ksTzJdfSksbn0pKCksUTE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1NjLFgxLFRyLmZvckZlYXR1cmUoImFsZXJ0cyIsaTcpLHRvLmZvckZlYXR1cmUoW243XSldfSksbn0pKCk7ZnVuY3Rpb24geGJlKG4sdCl7fXZhciBNZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucm9sZT0iZGlhbG9nIix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMCx0aGlzLmJhY2tkcm9wQ2xhc3M9IiIsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy53aWR0aD0iIix0aGlzLmhlaWdodD0iIix0aGlzLmRhdGE9bnVsbCx0aGlzLmFyaWFEZXNjcmliZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbD1udWxsLHRoaXMuYXJpYU1vZGFsPSEwLHRoaXMuYXV0b0ZvY3VzPSJmaXJzdC10YWJiYWJsZSIsdGhpcy5yZXN0b3JlRm9jdXM9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmNsb3NlT25EZXN0cm95PSEwLHRoaXMuY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50cz0hMH19LEYyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGdXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9aSx0aGlzLl9jb25maWc9byx0aGlzLl9pbnRlcmFjdGl2aXR5Q2hlY2tlcj1zLHRoaXMuX25nWm9uZT1hLHRoaXMuX292ZXJsYXlSZWY9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZD1udWxsLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwsdGhpcy5hdHRhY2hEb21Qb3J0YWw9ZD0+e3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCB1PXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwoZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLHV9LHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXRoaXMuX2NvbmZpZy5hcmlhTGFiZWxsZWRCeXx8bnVsbCx0aGlzLl9kb2N1bWVudD1yfV9jb250ZW50QXR0YWNoZWQoKXt0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCksdGhpcy5faGFuZGxlQmFja2Ryb3BDbGlja3MoKSx0aGlzLl9jYXB0dXJlSW5pdGlhbEZvY3VzKCl9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl90cmFwRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc3RvcmVGb2N1cygpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fHRoaXMuX3RyYXBGb2N1cygpfV9mb3JjZUZvY3VzKGUsaSl7dGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUoZSl8fChlLnRhYkluZGV4PS0xLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsciksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9O2UuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpfSkpLGUuZm9jdXMoaSl9X2ZvY3VzQnlDc3NTZWxlY3RvcihlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO3ImJnRoaXMuX2ZvcmNlRm9jdXMocixpKX1fdHJhcEZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3N3aXRjaCh0aGlzLl9jb25maWcuYXV0b0ZvY3VzKXtjYXNlITE6Y2FzZSJkaWFsb2ciOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8ZS5mb2N1cygpO2JyZWFrO2Nhc2UhMDpjYXNlImZpcnN0LXRhYmJhYmxlIjp0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oaT0+e2l8fHRoaXMuX2ZvY3VzRGlhbG9nQ29udGFpbmVyKCl9KTticmVhaztjYXNlImZpcnN0LWhlYWRpbmciOnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgW3JvbGU9ImhlYWRpbmciXScpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fZm9jdXNCeUNzc1NlbGVjdG9yKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpfX1fcmVzdG9yZUZvY3VzKCl7bGV0IGU9dGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyxpPW51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlP2k9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKToiYm9vbGVhbiI9PXR5cGVvZiBlP2k9ZT90aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDpudWxsOmUmJihpPWUpLHRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMmJmkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmZvY3VzKXtsZXQgcj1PdigpLG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Oyghcnx8cj09PXRoaXMuX2RvY3VtZW50LmJvZHl8fHI9PT1vfHxvLmNvbnRhaW5zKHIpKSYmKHRoaXMuX2ZvY3VzTW9uaXRvcj8odGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKGksdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGUpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwpOmkuZm9jdXMoKSl9dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfV9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NvbnRhaW5zRm9jdXMoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1PdigpO3JldHVybiBlPT09aXx8ZS5jb250YWlucyhpKX1faW5pdGlhbGl6ZUZvY3VzVHJhcCgpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9T3YoKSl9X2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCl7dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY29uZmlnLmRpc2FibGVDbG9zZSYmdGhpcy5fcmVjYXB0dXJlRm9jdXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKE52KSxDKEx0LDgpLEMoTWYpLEMoYWcpLEMoYXQpLEMoT2MpLEMoWHIpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstZGlhbG9nLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKHBzLDcpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsImNkay1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJpZCIsaS5fY29uZmlnLmlkfHxudWxsKSgicm9sZSIsaS5fY29uZmlnLnJvbGUpKCJhcmlhLW1vZGFsIixpLl9jb25maWcuYXJpYU1vZGFsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCl9LGZlYXR1cmVzOltLZV0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLHhiZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltwc10sc3R5bGVzOlsiLmNkay1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFl2PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vdmVybGF5UmVmPXQsdGhpcy5jb25maWc9ZSx0aGlzLmNsb3NlZD1uZXcgSWUsdGhpcy5kaXNhYmxlQ2xvc2U9ZS5kaXNhYmxlQ2xvc2UsdGhpcy5iYWNrZHJvcENsaWNrPXQuYmFja2Ryb3BDbGljaygpLHRoaXMua2V5ZG93bkV2ZW50cz10LmtleWRvd25FdmVudHMoKSx0aGlzLm91dHNpZGVQb2ludGVyRXZlbnRzPXQub3V0c2lkZVBvaW50ZXJFdmVudHMoKSx0aGlzLmlkPWUuaWQsdGhpcy5rZXlkb3duRXZlbnRzLnN1YnNjcmliZShpPT57Mjc9PT1pLmtleUNvZGUmJiF0aGlzLmRpc2FibGVDbG9zZSYmIXZyKGkpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2Uodm9pZCAwLHtmb2N1c09yaWdpbjoia2V5Ym9hcmQifSkpfSksdGhpcy5iYWNrZHJvcENsaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMuZGlzYWJsZUNsb3NlfHx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46Im1vdXNlIn0pfSksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXQuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9PnshMSE9PWUuY2xvc2VPbk92ZXJsYXlEZXRhY2htZW50cyYmdGhpcy5jbG9zZSgpfSl9Y2xvc2UodCxlKXtpZih0aGlzLmNvbnRhaW5lckluc3RhbmNlKXtsZXQgaT10aGlzLmNsb3NlZDt0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9jbG9zZUludGVyYWN0aW9uVHlwZT1lPy5mb2N1c09yaWdpbnx8InByb2dyYW0iLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCksaS5uZXh0KHQpLGkuY29tcGxldGUoKSx0aGlzLmNvbXBvbmVudEluc3RhbmNlPXRoaXMuY29udGFpbmVySW5zdGFuY2U9bnVsbH19dXBkYXRlUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9fSxpOT1uZXcgaWUoIkRpYWxvZ1Njcm9sbFN0cmF0ZWd5IiksQ2JlPW5ldyBpZSgiRGlhbG9nRGF0YSIpLE1iZT1uZXcgaWUoIkRlZmF1bHREaWFsb2dDb25maWciKSxTYmU9e3Byb3ZpZGU6aTksZGVwczpbemldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpfX0sRWJlPTAsTjI9KCgpPT57Y2xhc3MgbntnZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1zLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD10YSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUocW4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9b3BlbihlLGkpeyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IE1mLC4uLml9KS5pZD1pLmlkfHwiY2RrLWRpYWxvZy0iK0ViZSsrLGkuaWQmJnRoaXMuZ2V0RGlhbG9nQnlJZChpLmlkKTtsZXQgbz10aGlzLl9nZXRPdmVybGF5Q29uZmlnKGkpLHM9dGhpcy5fb3ZlcmxheS5jcmVhdGUobyksYT1uZXcgWXYocyxpKSxsPXRoaXMuX2F0dGFjaENvbnRhaW5lcihzLGEsaSk7cmV0dXJuIGEuY29udGFpbmVySW5zdGFuY2U9bCx0aGlzLl9hdHRhY2hEaWFsb2dDb250ZW50KGUsYSxsLGkpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCksdGhpcy5vcGVuRGlhbG9ncy5wdXNoKGEpLGEuY2xvc2VkLnN1YnNjcmliZSgoKT0+dGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhhLCEwKSksdGhpcy5hZnRlck9wZW5lZC5uZXh0KGEpLGF9Y2xvc2VBbGwoKXtrMih0aGlzLm9wZW5EaWFsb2dzLGU9PmUuY2xvc2UoKSl9Z2V0RGlhbG9nQnlJZChlKXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKGk9PmkuaWQ9PT1lKX1uZ09uRGVzdHJveSgpe2syKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwsZT0+eyExPT09ZS5jb25maWcuY2xvc2VPbkRlc3Ryb3kmJnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coZSwhMSl9KSxrMih0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PmUuY2xvc2UoKSksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdfV9nZXRPdmVybGF5Q29uZmlnKGUpe2xldCBpPW5ldyBRYSh7cG9zaXRpb25TdHJhdGVneTplLnBvc2l0aW9uU3RyYXRlZ3l8fHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksc2Nyb2xsU3RyYXRlZ3k6ZS5zY3JvbGxTdHJhdGVneXx8dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxwYW5lbENsYXNzOmUucGFuZWxDbGFzcyxoYXNCYWNrZHJvcDplLmhhc0JhY2tkcm9wLGRpcmVjdGlvbjplLmRpcmVjdGlvbixtaW5XaWR0aDplLm1pbldpZHRoLG1pbkhlaWdodDplLm1pbkhlaWdodCxtYXhXaWR0aDplLm1heFdpZHRoLG1heEhlaWdodDplLm1heEhlaWdodCx3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodCxkaXNwb3NlT25OYXZpZ2F0aW9uOmUuY2xvc2VPbk5hdmlnYXRpb259KTtyZXR1cm4gZS5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPWUuYmFja2Ryb3BDbGFzcyksaX1fYXR0YWNoQ29udGFpbmVyKGUsaSxyKXtsZXQgYSxvPXIuaW5qZWN0b3J8fHIudmlld0NvbnRhaW5lclJlZj8uaW5qZWN0b3Iscz1be3Byb3ZpZGU6TWYsdXNlVmFsdWU6cn0se3Byb3ZpZGU6WXYsdXNlVmFsdWU6aX0se3Byb3ZpZGU6T2MsdXNlVmFsdWU6ZX1dO3IuY29udGFpbmVyPyJmdW5jdGlvbiI9PXR5cGVvZiByLmNvbnRhaW5lcj9hPXIuY29udGFpbmVyOihhPXIuY29udGFpbmVyLnR5cGUscy5wdXNoKC4uLnIuY29udGFpbmVyLnByb3ZpZGVycyhyKSkpOmE9RjI7bGV0IGw9bmV3IFZsKGEsci52aWV3Q29udGFpbmVyUmVmLE1pLmNyZWF0ZSh7cGFyZW50Om98fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpzfSksci5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO3JldHVybiBlLmF0dGFjaChsKS5pbnN0YW5jZX1fYXR0YWNoRGlhbG9nQ29udGVudChlLGkscixvKXtpZihlIGluc3RhbmNlb2YgU2kpe2xldCBzPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHZvaWQgMCksYT17JGltcGxpY2l0Om8uZGF0YSxkaWFsb2dSZWY6aX07by50ZW1wbGF0ZUNvbnRleHQmJihhPXsuLi5hLC4uLiJmdW5jdGlvbiI9PXR5cGVvZiBvLnRlbXBsYXRlQ29udGV4dD9vLnRlbXBsYXRlQ29udGV4dCgpOm8udGVtcGxhdGVDb250ZXh0fSksci5hdHRhY2hUZW1wbGF0ZVBvcnRhbChuZXcgWW8oZSxudWxsLGEscykpfWVsc2V7bGV0IHM9dGhpcy5fY3JlYXRlSW5qZWN0b3IobyxpLHIsdGhpcy5faW5qZWN0b3IpLGE9ci5hdHRhY2hDb21wb25lbnRQb3J0YWwobmV3IFZsKGUsby52aWV3Q29udGFpbmVyUmVmLHMsby5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpKTtpLmNvbXBvbmVudEluc3RhbmNlPWEuaW5zdGFuY2V9fV9jcmVhdGVJbmplY3RvcihlLGkscixvKXtsZXQgcz1lLmluamVjdG9yfHxlLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLGE9W3twcm92aWRlOkNiZSx1c2VWYWx1ZTplLmRhdGF9LHtwcm92aWRlOll2LHVzZVZhbHVlOml9XTtyZXR1cm4gZS5wcm92aWRlcnMmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5wcm92aWRlcnM/YS5wdXNoKC4uLmUucHJvdmlkZXJzKGksZSxyKSk6YS5wdXNoKC4uLmUucHJvdmlkZXJzKSksZS5kaXJlY3Rpb24mJighc3x8IXMuZ2V0KFhpLG51bGwse29wdGlvbmFsOiEwfSkpJiZhLnB1c2goe3Byb3ZpZGU6WGksdXNlVmFsdWU6e3ZhbHVlOmUuZGlyZWN0aW9uLGNoYW5nZTpIdCgpfX0pLE1pLmNyZWF0ZSh7cGFyZW50OnN8fG8scHJvdmlkZXJzOmF9KX1fcmVtb3ZlT3BlbkRpYWxvZyhlLGkpe2xldCByPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihlKTtyPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UociwxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8KHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChvLHMpPT57bz9zLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLG8pOnMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksaSYmdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2xldCBlPXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKGUucGFyZW50RWxlbWVudCl7bGV0IGk9ZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+LTE7ci0tKXtsZXQgbz1pW3JdO28hPT1lJiYiU0NSSVBUIiE9PW8ubm9kZU5hbWUmJiJTVFlMRSIhPT1vLm5vZGVOYW1lJiYhby5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpJiYodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhNaSksayhNYmUsOCksayhuLDEyKSxrKHBnKSxrKGk5KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gazIobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IoO2UtLTspdChuW2VdKX12YXIgcjk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbTjIsU2JlXSxpbXBvcnRzOltDbyxIbCxsZyxIbF19KSxufSkoKTtmdW5jdGlvbiBUYmUobix0KXt9dmFyIG1nPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMubWF4V2lkdGg9IjgwdnciLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmRlbGF5Rm9jdXNUcmFwPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITB9fSxMMj0ibWRjLWRpYWxvZy0tb3BlbiIsbzk9Im1kYy1kaWFsb2ctLW9wZW5pbmciLHM5PSJtZGMtZGlhbG9nLS1jbG9zaW5nIixBYmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEYye2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxpLHIsbyxzLGEsbCxjKSx0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQ9bmV3IEZ9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl9jb25maWcuZGVsYXlGb2N1c1RyYXB8fHRoaXMuX3RyYXBGb2N1cygpfV9vcGVuQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9jb25maWcuZGVsYXlGb2N1c1RyYXAmJnRoaXMuX3RyYXBGb2N1cygpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmVkIix0b3RhbFRpbWU6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKE52KSxDKEx0LDgpLEMobWcpLEMoYWcpLEMoYXQpLEMoT2MpLEMoWHIpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZmVhdHVyZXM6W0tlXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksYTk9Ii0tbWF0LWRpYWxvZy10cmFuc2l0aW9uLWR1cmF0aW9uIjtmdW5jdGlvbiBsOShuKXtyZXR1cm4gbnVsbD09bj9udWxsOiJudW1iZXIiPT10eXBlb2Ygbj9uOm4uZW5kc1dpdGgoIm1zIik/X2kobi5zdWJzdHJpbmcoMCxuLmxlbmd0aC0yKSk6bi5lbmRzV2l0aCgicyIpPzFlMypfaShuLnN1YnN0cmluZygwLG4ubGVuZ3RoLTEpKToiMCI9PT1uPzA6bnVsbH12YXIgUmJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBBYmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQpe3N1cGVyKGUsaSxyLG8scyxhLGwsZCksdGhpcy5fYW5pbWF0aW9uTW9kZT1jLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT10aGlzLl9hbmltYXRpb25Nb2RlLHRoaXMuX2hvc3RFbGVtZW50PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLl9vcGVuQW5pbWF0aW9uRHVyYXRpb249dGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/bDkodGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb24pPz8xNTA6MCx0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9uPXRoaXMuX2FuaW1hdGlvbnNFbmFibGVkP2w5KHRoaXMuX2NvbmZpZy5leGl0QW5pbWF0aW9uRHVyYXRpb24pPz83NTowLHRoaXMuX2FuaW1hdGlvblRpbWVyPW51bGwsdGhpcy5fZmluaXNoRGlhbG9nT3Blbj0oKT0+e3RoaXMuX2NsZWFyQW5pbWF0aW9uQ2xhc3NlcygpLHRoaXMuX29wZW5BbmltYXRpb25Eb25lKHRoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbil9LHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlPSgpPT57dGhpcy5fY2xlYXJBbmltYXRpb25DbGFzc2VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTp0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9ufSl9fV9jb250ZW50QXR0YWNoZWQoKXtzdXBlci5fY29udGVudEF0dGFjaGVkKCksdGhpcy5fc3RhcnRPcGVuQW5pbWF0aW9uKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLG51bGwhPT10aGlzLl9hbmltYXRpb25UaW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuX2FuaW1hdGlvblRpbWVyKX1fc3RhcnRPcGVuQW5pbWF0aW9uKCl7dGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoe3N0YXRlOiJvcGVuaW5nIix0b3RhbFRpbWU6dGhpcy5fb3BlbkFuaW1hdGlvbkR1cmF0aW9ufSksdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/KHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGE5LGAke3RoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbn1tc2ApLHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvOSxMMikpLHRoaXMuX3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKHRoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbix0aGlzLl9maW5pc2hEaWFsb2dPcGVuKSk6KHRoaXMuX2hvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoTDIpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuX2ZpbmlzaERpYWxvZ09wZW4oKSkpfV9zdGFydEV4aXRBbmltYXRpb24oKXt0aGlzLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdCh7c3RhdGU6ImNsb3NpbmciLHRvdGFsVGltZTp0aGlzLl9jbG9zZUFuaW1hdGlvbkR1cmF0aW9ufSksdGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShMMiksdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQ/KHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGE5LGAke3RoaXMuX29wZW5BbmltYXRpb25EdXJhdGlvbn1tc2ApLHRoaXMuX3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChzOSkpLHRoaXMuX3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKHRoaXMuX2Nsb3NlQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UpKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl9maW5pc2hEaWFsb2dDbG9zZSgpKX1fY2xlYXJBbmltYXRpb25DbGFzc2VzKCl7dGhpcy5faG9zdEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShvOSxzOSl9X3dhaXRGb3JBbmltYXRpb25Ub0NvbXBsZXRlKGUsaSl7bnVsbCE9PXRoaXMuX2FuaW1hdGlvblRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5fYW5pbWF0aW9uVGltZXIpLHRoaXMuX2FuaW1hdGlvblRpbWVyPXNldFRpbWVvdXQoaSxlKX1fcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOmUoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKE52KSxDKEx0LDgpLEMobWcpLEMoYWcpLEMoYXQpLEMoT2MpLEMoaGksOCksQyhYcikpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciIsIm1kYy1kaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKGpvKCJpZCIsaS5fY29uZmlnLmlkKSxCZSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCksbnQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpKX0sZmVhdHVyZXM6W0tlXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJtZGMtZGlhbG9nX19jb250YWluZXIiXSxbMSwibWF0LW1kYy1kaWFsb2ctc3VyZmFjZSIsIm1kYy1kaWFsb2dfX3N1cmZhY2UiXSxbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFMoMixUYmUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksZygpKCkpfSxkZXBlbmRlbmNpZXM6W3BzXSxzdHlsZXM6WycubWRjLWVsZXZhdGlvbi1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6dmFyKC0tbWRjLWVsZXZhdGlvbi1vdmVybGF5LW9wYWNpdHksIDApO3RyYW5zaXRpb246b3BhY2l0eSAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZGlhbG9nLC5tZGMtZGlhbG9nX19zY3JpbXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1kYy1kaWFsb2d7ZGlzcGxheTpub25lO3otaW5kZXg6dmFyKC0tbWRjLWRpYWxvZy16LWluZGV4LCA3KX0ubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fY29udGVudHtwYWRkaW5nOjIwcHggMjRweCAyMHB4IDI0cHh9Lm1kYy1kaWFsb2cgLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWluLXdpZHRoOjI4MHB4fUBtZWRpYShtYXgtd2lkdGg6IDU5MnB4KXsubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDMycHgpfX1AbWVkaWEobWluLXdpZHRoOiA1OTJweCl7Lm1kYy1kaWFsb2cgLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LXdpZHRoOjU2MHB4fX0ubWRjLWRpYWxvZyAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtaGVpZ2h0OmNhbGMoMTAwJSAtIDMycHgpfS5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LXdpZHRoOm5vbmV9QG1lZGlhKG1heC13aWR0aDogOTYwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LWhlaWdodDo1NjBweDt3aWR0aDo1NjBweH0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpYW5kIChtYXgtd2lkdGg6IDY3MnB4KXsubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNle3dpZHRoOmNhbGMoMTAwdncgLSAxMTJweCl9fUBtZWRpYShtYXgtd2lkdGg6IDcyMHB4KWFuZCAobWluLXdpZHRoOiA2NzJweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXt3aWR0aDo1NjBweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpYW5kIChtYXgtaGVpZ2h0OiA3MjBweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXttYXgtaGVpZ2h0OmNhbGMoMTAwdmggLSAxNjBweCl9fUBtZWRpYShtYXgtd2lkdGg6IDcyMHB4KWFuZCAobWluLWhlaWdodDogNzIwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7bWF4LWhlaWdodDo1NjBweH19QG1lZGlhKG1heC13aWR0aDogNzIwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2UgLm1kYy1kaWFsb2dfX2Nsb3Nle3JpZ2h0Oi0xMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA3MjBweClhbmQgKG1heC1oZWlnaHQ6IDQwMHB4KSwobWF4LXdpZHRoOiA2MDBweCksKG1pbi13aWR0aDogNzIwcHgpYW5kIChtYXgtaGVpZ2h0OiA0MDBweCl7Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZXtoZWlnaHQ6MTAwJTttYXgtaGVpZ2h0OjEwMHZoO21heC13aWR0aDoxMDB2dzt3aWR0aDoxMDB2dztib3JkZXItcmFkaXVzOjB9Lm1kYy1kaWFsb2cubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fc3VyZmFjZSAubWRjLWRpYWxvZ19fY2xvc2V7b3JkZXI6LTE7bGVmdDotMTJweH0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19oZWFkZXJ7cGFkZGluZzowIDE2cHggOXB4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2UgLm1kYy1kaWFsb2dfX3RpdGxle21hcmdpbi1sZWZ0OmNhbGMoMTZweCAtIDIgKiAxMnB4KX19QG1lZGlhKG1pbi13aWR0aDogOTYwcHgpey5tZGMtZGlhbG9nLm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4gLm1kYy1kaWFsb2dfX3N1cmZhY2V7d2lkdGg6Y2FsYygxMDB2dyAtIDQwMHB4KX0ubWRjLWRpYWxvZy5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH19Lm1kYy1kaWFsb2cubWRjLWRpYWxvZ19fc2NyaW0tLWhpZGRlbiAubWRjLWRpYWxvZ19fc2NyaW17b3BhY2l0eTowfS5tZGMtZGlhbG9nX19zY3JpbXtvcGFjaXR5OjA7ei1pbmRleDotMX0ubWRjLWRpYWxvZ19fY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZGlhbG9nX19zdXJmYWNle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOmF1dG87b3ZlcmZsb3cteTphdXRvfS5tZGMtZGlhbG9nX19zdXJmYWNlIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX19zdXJmYWNlLC5tZGMtZGlhbG9nX19zdXJmYWNlW2Rpcj1ydGxde3RleHQtYWxpZ246cmlnaHR9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tZGMtZGlhbG9nX19zdXJmYWNle291dGxpbmU6MnB4IHNvbGlkIHdpbmRvd1RleHR9fS5tZGMtZGlhbG9nX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoycHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtZGlhbG9nX19zdXJmYWNlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOkNhbnZhc1RleHR9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSxzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSl7Lm1kYy1kaWFsb2dfX3N1cmZhY2U6OmJlZm9yZXtjb250ZW50Om5vbmV9fS5tZGMtZGlhbG9nX190aXRsZXtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MCAwIDFweDtwYWRkaW5nOjAgMjRweCA5cHh9Lm1kYy1kaWFsb2dfX3RpdGxlOjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6NDBweDtjb250ZW50OiIiO3ZlcnRpY2FsLWFsaWduOjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX190aXRsZSwubWRjLWRpYWxvZ19fdGl0bGVbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7bWFyZ2luLWJvdHRvbToxcHg7cGFkZGluZy1ib3R0b206MTVweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19faGVhZGVye2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgMjRweCA5cHg7ei1pbmRleDoxfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuIC5tZGMtZGlhbG9nX19oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19faGVhZGVyIC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDotMTJweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fdGl0bGV7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmc6MDtib3JkZXItYm90dG9tOjB9Lm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7Ym9yZGVyLWJvdHRvbTowO21hcmdpbi1ib3R0b206MH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbiAubWRjLWRpYWxvZ19fY2xvc2V7dG9wOjVweH0ubWRjLWRpYWxvZy0tZnVsbHNjcmVlbi5tZGMtZGlhbG9nLS1zY3JvbGxhYmxlIC5tZGMtZGlhbG9nX19hY3Rpb25ze2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1kaWFsb2ctLWZ1bGxzY3JlZW4ubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fYWN0aW9uc3tib3JkZXItdG9wLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuLS10aXRsZWxlc3MgLm1kYy1kaWFsb2dfX2Nsb3Nle21hcmdpbi10b3A6NHB4fS5tZGMtZGlhbG9nLS1mdWxsc2NyZWVuLS10aXRsZWxlc3MubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fY2xvc2V7bWFyZ2luLXRvcDowfS5tZGMtZGlhbG9nX19jb250ZW50e2ZsZXgtZ3JvdzoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtvdmVyZmxvdzphdXRvfS5tZGMtZGlhbG9nX19jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1kYy1kaWFsb2dfX2NvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tZGMtZGlhbG9nX190aXRsZSsubWRjLWRpYWxvZ19fY29udGVudCwubWRjLWRpYWxvZ19faGVhZGVyKy5tZGMtZGlhbG9nX19jb250ZW50e3BhZGRpbmctdG9wOjB9Lm1kYy1kaWFsb2ctLXNjcm9sbGFibGUgLm1kYy1kaWFsb2dfX3RpdGxlKy5tZGMtZGlhbG9nX19jb250ZW50e3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1kYy1kaWFsb2dfX2NvbnRlbnQgLm1kYy1kZXByZWNhdGVkLWxpc3Q6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtwYWRkaW5nOjZweCAwIDB9Lm1kYy1kaWFsb2ctLXNjcm9sbGFibGUgLm1kYy1kaWFsb2dfX2NvbnRlbnQgLm1kYy1kZXByZWNhdGVkLWxpc3Q6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtwYWRkaW5nOjB9Lm1kYy1kaWFsb2dfX2FjdGlvbnN7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjA7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo1MnB4O21hcmdpbjowO3BhZGRpbmc6OHB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1kaWFsb2dfX2FjdGlvbnN7Ym9yZGVyLXRvcC1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLWRpYWxvZy0tc3RhY2tlZCAubWRjLWRpYWxvZ19fYWN0aW9uc3tmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1lbmR9Lm1kYy1kaWFsb2dfX2J1dHRvbnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCU7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0gLm1kYy1kaWFsb2dfX2J1dHRvbiwubWRjLWRpYWxvZ19fYnV0dG9uW2Rpcj1ydGxde21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjhweH0ubWRjLWRpYWxvZ19fYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtZGlhbG9nX19idXR0b246Zmlyc3QtY2hpbGQsLm1kYy1kaWFsb2dfX2J1dHRvbjpmaXJzdC1jaGlsZFtkaXI9cnRsXXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfVtkaXI9cnRsXSAubWRjLWRpYWxvZ19fYnV0dG9uLC5tZGMtZGlhbG9nX19idXR0b25bZGlyPXJ0bF17dGV4dC1hbGlnbjpsZWZ0fS5tZGMtZGlhbG9nLS1zdGFja2VkIC5tZGMtZGlhbG9nX19idXR0b246bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDoxMnB4fS5tZGMtZGlhbG9nLS1vcGVuLC5tZGMtZGlhbG9nLS1vcGVuaW5nLC5tZGMtZGlhbG9nLS1jbG9zaW5ne2Rpc3BsYXk6ZmxleH0ubWRjLWRpYWxvZy0tb3BlbmluZyAubWRjLWRpYWxvZ19fc2NyaW17dHJhbnNpdGlvbjpvcGFjaXR5IDE1MG1zIGxpbmVhcn0ubWRjLWRpYWxvZy0tb3BlbmluZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIGxpbmVhcix0cmFuc2Zvcm0gMTUwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tZGMtZGlhbG9nLS1jbG9zaW5nIC5tZGMtZGlhbG9nX19zY3JpbSwubWRjLWRpYWxvZy0tY2xvc2luZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246b3BhY2l0eSA3NW1zIGxpbmVhcn0ubWRjLWRpYWxvZy0tY2xvc2luZyAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zZm9ybTpub25lfS5tZGMtZGlhbG9nLS1vcGVuIC5tZGMtZGlhbG9nX19zY3JpbXtvcGFjaXR5OjF9Lm1kYy1kaWFsb2ctLW9wZW4gLm1kYy1kaWFsb2dfX2NvbnRhaW5lcnt0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9Lm1kYy1kaWFsb2ctLW9wZW4ubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbS0tc2hvd24gLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW17b3BhY2l0eToxfS5tZGMtZGlhbG9nLS1vcGVuLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW0tLWhpZGluZyAubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbXt0cmFuc2l0aW9uOm9wYWNpdHkgNzVtcyBsaW5lYXJ9Lm1kYy1kaWFsb2ctLW9wZW4ubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbS0tc2hvd2luZyAubWRjLWRpYWxvZ19fc3VyZmFjZS1zY3JpbXt0cmFuc2l0aW9uOm9wYWNpdHkgMTUwbXMgbGluZWFyfS5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmlte2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjF9Lm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW0tLXNob3duIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLS1zaG93aW5nIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmltLS1oaWRpbmcgLm1kYy1kaWFsb2dfX3N1cmZhY2Utc2NyaW17ZGlzcGxheTpibG9ja30ubWRjLWRpYWxvZy1zY3JvbGwtbG9ja3tvdmVyZmxvdzpoaWRkZW59Lm1kYy1kaWFsb2ctLW5vLWNvbnRlbnQtcGFkZGluZyAubWRjLWRpYWxvZ19fY29udGVudHtwYWRkaW5nOjB9Lm1kYy1kaWFsb2ctLXNoZWV0IC5tZGMtZGlhbG9nX19jbG9zZXtyaWdodDoxMnB4O3RvcDo5cHg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxfS5tZGMtZGlhbG9nX19zY3JpbS0tcmVtb3ZlZHtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtZGlhbG9nX19zY3JpbS0tcmVtb3ZlZCAubWRjLWRpYWxvZ19fc2NyaW0sLm1kYy1kaWFsb2dfX3NjcmltLS1yZW1vdmVkIC5tZGMtZGlhbG9nX19zdXJmYWNlLXNjcmlte2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1kaWFsb2ctY29udGVudHttYXgtaGVpZ2h0OjY1dmh9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcntwb3NpdGlvbjpzdGF0aWM7ZGlzcGxheTpibG9ja30ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyLC5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIgLm1kYy1kaWFsb2dfX2NvbnRhaW5lciwubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19zdXJmYWNle21heC1oZWlnaHQ6aW5oZXJpdDttaW4taGVpZ2h0OmluaGVyaXQ7bWluLXdpZHRoOmluaGVyaXQ7bWF4LXdpZHRoOmluaGVyaXR9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lcntvdXRsaW5lOjB9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1kaWFsb2ctY29udGFpbmVyLWNvbG9yLCB3aGl0ZSl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fc3VyZmFjZXtib3gtc2hhZG93OnZhcigtLW1kYy1kaWFsb2ctY29udGFpbmVyLWVsZXZhdGlvbiwgMHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLWRpYWxvZy1jb250YWluZXItc2hhcGUsIHZhcigtLW1kYy1zaGFwZS1tZWRpdW0sIDRweCkpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGUsLm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lci5tZGMtZGlhbG9nLS1zY3JvbGxhYmxlIC5tZGMtZGlhbG9nX19hY3Rpb25zLC5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZS5tZGMtZGlhbG9nLXNjcm9sbC1kaXZpZGVyLWZvb3RlciAubWRjLWRpYWxvZ19fYWN0aW9uc3tib3JkZXItY29sb3I6dmFyKC0tbWRjLWRpYWxvZy13aXRoLWRpdmlkZXItZGl2aWRlci1jb2xvciwgYmxhY2spfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIubWRjLWRpYWxvZy0tc2Nyb2xsYWJsZSAubWRjLWRpYWxvZ19fdGl0bGV7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1tZGMtZGlhbG9nLXdpdGgtZGl2aWRlci1kaXZpZGVyLWNvbG9yLCBibGFjayl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciAubWRjLWRpYWxvZ19fdGl0bGV7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQsICJBcmlhbCIpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC1saW5lLWhlaWdodCwgMTRweCk7Zm9udC1zaXplOnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC1zaXplLCAxNHB4KTtmb250LXdlaWdodDp2YXIoLS1tZGMtZGlhbG9nLXN1YmhlYWQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy1kaWFsb2ctc3ViaGVhZC10cmFja2luZywgMXB4KX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX190aXRsZXtjb2xvcjp2YXIoLS1tZGMtZGlhbG9nLXN1YmhlYWQtY29sb3IsIGJsYWNrKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19jb250ZW50e2ZvbnQtZmFtaWx5OnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWZvbnQsICJBcmlhbCIpO2xpbmUtaGVpZ2h0OnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0LCAxNHB4KTtmb250LXNpemU6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgMTRweCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0LCA1MDApO2xldHRlci1zcGFjaW5nOnZhcigtLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nLCAxcHgpfS5tYXQtbWRjLWRpYWxvZy1jb250YWluZXIgLm1kYy1kaWFsb2dfX2NvbnRlbnR7Y29sb3I6dmFyKC0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtY29sb3IsIGJsYWNrKX0ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tZGMtZGlhbG9nX19jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS1tYXQtZGlhbG9nLXRyYW5zaXRpb24tZHVyYXRpb24sIDBtcyl9Lm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWRpYWxvZ19fY29udGFpbmVye3RyYW5zaXRpb246bm9uZX0ubWF0LW1kYy1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWRpYWxvZy1hY3Rpb25ze2p1c3RpZnktY29udGVudDpzdGFydH0ubWF0LW1kYy1kaWFsb2ctYWN0aW9ucy5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zLWFsaWduLWNlbnRlciwubWF0LW1kYy1kaWFsb2ctYWN0aW9uc1thbGlnbj1jZW50ZXJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMubWF0LW1kYy1kaWFsb2ctYWN0aW9ucy1hbGlnbi1lbmQsLm1hdC1tZGMtZGlhbG9nLWFjdGlvbnNbYWxpZ249ZW5kXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zIC5tYXQtbWRjLWJ1dHRvbi1iYXNlKy5tYXQtbWRjLWJ1dHRvbi1iYXNle21hcmdpbi1sZWZ0OjhweH1bZGlyPXJ0bF0gLm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLFtkaXI9cnRsXSAubWF0LW1kYy1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9J10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IEllLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgSWUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoa2Uocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxZdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShrZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLFl0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKGtlKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiF2cihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLGQ5KHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKGtlKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLFl0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24gZDkobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIFh2PW5ldyBpZSgiTWF0TWRjRGlhbG9nRGF0YSIpLFBiZT1uZXcgaWUoIm1hdC1tZGMtZGlhbG9nLWRlZmF1bHQtb3B0aW9ucyIpLHU5PW5ldyBpZSgibWF0LW1kYy1kaWFsb2ctc2Nyb2xsLXN0cmF0ZWd5Iiksa2JlPXtwcm92aWRlOnU5LGRlcHM6W3ppXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LEZiZT0wLE5iZT0oKCk9PntjbGFzcyBue2dldCBvcGVuRGlhbG9ncygpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLm9wZW5EaWFsb2dzOnRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWx9Z2V0IGFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cuYWZ0ZXJPcGVuZWQ6dGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbH1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyxkLHUpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX3BhcmVudERpYWxvZz1vLHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yPWwsdGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZT1jLHRoaXMuX2RpYWxvZ0RhdGFUb2tlbj1kLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgSWUsdGhpcy5faWRQcmVmaXg9Im1hdC1kaWFsb2ctIix0aGlzLmRpYWxvZ0NvbmZpZ0NsYXNzPW1nLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9dGEoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKHFuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hLHRoaXMuX2RpYWxvZz1pLmdldChOMil9b3BlbihlLGkpe2xldCByOyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IG1nLC4uLml9KS5pZD1pLmlkfHxgJHt0aGlzLl9pZFByZWZpeH0ke0ZiZSsrfWAsaS5zY3JvbGxTdHJhdGVneT1pLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpO2xldCBvPXRoaXMuX2RpYWxvZy5vcGVuKGUsey4uLmkscG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLGRpc2FibGVDbG9zZTohMCxjbG9zZU9uRGVzdHJveTohMSxjbG9zZU9uT3ZlcmxheURldGFjaG1lbnRzOiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOnRoaXMuZGlhbG9nQ29uZmlnQ2xhc3MsdXNlVmFsdWU6aX0se3Byb3ZpZGU6TWYsdXNlVmFsdWU6aX1dfSx0ZW1wbGF0ZUNvbnRleHQ6KCk9Pih7ZGlhbG9nUmVmOnJ9KSxwcm92aWRlcnM6KHMsYSxsKT0+KHI9bmV3IHRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yKHMsaSxsKSxyLnVwZGF0ZVBvc2l0aW9uKGk/LnBvc2l0aW9uKSxbe3Byb3ZpZGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSx1c2VWYWx1ZTpsfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dEYXRhVG9rZW4sdXNlVmFsdWU6YS5kYXRhfSx7cHJvdmlkZTp0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcix1c2VWYWx1ZTpyfV0pfSk7cmV0dXJuIHIuY29tcG9uZW50SW5zdGFuY2U9by5jb21wb25lbnRJbnN0YW5jZSx0aGlzLm9wZW5EaWFsb2dzLnB1c2gociksdGhpcy5hZnRlck9wZW5lZC5uZXh0KHIpLHIuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCk9PntsZXQgcz10aGlzLm9wZW5EaWFsb2dzLmluZGV4T2Yocik7cz4tMSYmKHRoaXMub3BlbkRpYWxvZ3Muc3BsaWNlKHMsMSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fHRoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCkubmV4dCgpKX0pLHJ9Y2xvc2VBbGwoKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5vcGVuRGlhbG9ncyl9Z2V0RGlhbG9nQnlJZChlKXtyZXR1cm4gdGhpcy5vcGVuRGlhbG9ncy5maW5kKGk9PmkuaWQ9PT1lKX1uZ09uRGVzdHJveSgpe3RoaXMuX2Nsb3NlRGlhbG9ncyh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsKSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpfV9jbG9zZURpYWxvZ3MoZSl7bGV0IGk9ZS5sZW5ndGg7Zm9yKDtpLS07KWVbaV0uY2xvc2UoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksemw9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5iZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUsaSxvLGEsbCxzLEVkLFJiZSxYdixjKSx0aGlzLl9pZFByZWZpeD0ibWF0LW1kYy1kaWFsb2ctIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayh6aSksayhNaSksayh3Yiw4KSxrKFBiZSw4KSxrKHU5KSxrKG4sMTIpLGsocGcpLGsoaGksOCkpfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLExiZT0wLFoxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMudHlwZT0iYnV0dG9uIn1uZ09uSW5pdCgpe3RoaXMuZGlhbG9nUmVmfHwodGhpcy5kaWFsb2dSZWY9ZjkodGhpcy5fZWxlbWVudFJlZix0aGlzLl9kaWFsb2cub3BlbkRpYWxvZ3MpKX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLl9tYXREaWFsb2dDbG9zZXx8ZS5fbWF0RGlhbG9nQ2xvc2VSZXN1bHQ7aSYmKHRoaXMuZGlhbG9nUmVzdWx0PWkuY3VycmVudFZhbHVlKX1fb25CdXR0b25DbGljayhlKXtkOSh0aGlzLmRpYWxvZ1JlZiwwPT09ZS5zY3JlZW5YJiYwPT09ZS5zY3JlZW5ZPyJrZXlib2FyZCI6Im1vdXNlIix0aGlzLmRpYWxvZ1Jlc3VsdCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoRWQsOCksQyhNZSksQyh6bCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyIiLCJtYXREaWFsb2dDbG9zZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkJ1dHRvbkNsaWNrKG8pfSksMiZlJiZCZSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJ0eXBlIixpLnR5cGUpfSxpbnB1dHM6e2FyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSx0eXBlOiJ0eXBlIixkaWFsb2dSZXN1bHQ6WyJtYXQtZGlhbG9nLWNsb3NlIiwiZGlhbG9nUmVzdWx0Il0sX21hdERpYWxvZ0Nsb3NlOlsibWF0RGlhbG9nQ2xvc2UiLCJfbWF0RGlhbG9nQ2xvc2UiXX0sZXhwb3J0QXM6WyJtYXREaWFsb2dDbG9zZSJdLGZlYXR1cmVzOltHdF19KSxufSkoKSxwOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9kaWFsb2dSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fZGlhbG9nPXIsdGhpcy5pZD0ibWF0LW1kYy1kaWFsb2ctdGl0bGUtIitMYmUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1mOSh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhFZCw4KSxDKE1lKSxDKHpsKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1kaWFsb2ctdGl0bGUiLCJtZGMtZGlhbG9nX190aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZqbygiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEsxPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtZGlhbG9nLWNvbnRlbnQiLCJtZGMtZGlhbG9nX19jb250ZW50Il19KSxufSkoKSxKMT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hbGlnbj0ic3RhcnQifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1hY3Rpb25zIiwiIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiXSxbIiIsIm1hdERpYWxvZ0FjdGlvbnMiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWRpYWxvZy1hY3Rpb25zIiwibWRjLWRpYWxvZ19fYWN0aW9ucyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LW1kYy1kaWFsb2ctYWN0aW9ucy1hbGlnbi1jZW50ZXIiLCJjZW50ZXIiPT09aS5hbGlnbikoIm1hdC1tZGMtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gZjkobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIik7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP3QuZmluZChpPT5pLmlkPT09ZS5pZCk6bnVsbH12YXIgaGc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbemwsa2JlXSxpbXBvcnRzOltyOSxDbyxIbCxmbixmbl19KSxufSkoKSxjOT17cGFyYW1zOntlbnRlckFuaW1hdGlvbkR1cmF0aW9uOiIxNTBtcyIsZXhpdEFuaW1hdGlvbkR1cmF0aW9uOiI3NW1zIn19LEJiZT0oX3IoImRpYWxvZ0NvbnRhaW5lciIsW3dpKCJ2b2lkLCBleGl0Iixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC43KSJ9KSksd2koImVudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxnaSgiKiA9PiBlbnRlciIsT2IoW0NpKCJ7e2VudGVyQW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe3RyYW5zZm9ybToibm9uZSIsb3BhY2l0eToxfSkpLEpwKCJAKiIsS3AoKSx7b3B0aW9uYWw6ITB9KV0pLGM5KSxnaSgiKiA9PiB2b2lkLCAqID0+IGV4aXQiLE9iKFtDaSgie3tleGl0QW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSksSnAoIkAqIixLcCgpLHtvcHRpb25hbDohMH0pXSksYzkpXSksWyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZSIsIiJdKSxWYmU9WyIqIl0sSGJlPVsidGV4dEZpZWxkIl0semJlPVsiaWNvblByZWZpeENvbnRhaW5lciJdLFViZT1bInRleHRQcmVmaXhDb250YWluZXIiXTtmdW5jdGlvbiBqYmUobix0KXsxJm4mJlAoMCwic3BhbiIsMTkpfWZ1bmN0aW9uIEdiZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxhYmVsIiwxNyksSSgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KDIpLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSl9KSx6dCgxLDEpLFMoMixqYmUsMSwwLCJzcGFuIiwxOCksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJmbG9hdGluZyIsZS5fc2hvdWxkTGFiZWxGbG9hdCgpKSgiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIWUuX2hhc091dGxpbmUoKSkoImlkIixlLl9sYWJlbElkKSxCZSgiZm9yIixlLl9jb250cm9sLmlkKSgiYXJpYS1vd25zIixlLl9jb250cm9sLmlkKSx2KDIpLF8oIm5nSWYiLCFlLmhpZGVSZXF1aXJlZE1hcmtlciYmZS5fY29udHJvbC5yZXF1aXJlZCl9fWZ1bmN0aW9uIFdiZShuLHQpezEmbiYmUygwLEdiZSwzLDYsImxhYmVsIiwxNiksMiZuJiZfKCJuZ0lmIix3KCkuX2hhc0Zsb2F0aW5nTGFiZWwoKSl9ZnVuY3Rpb24gcWJlKG4sdCl7MSZuJiZQKDAsImRpdiIsMjApfWZ1bmN0aW9uIFliZShuLHQpe31mdW5jdGlvbiBYYmUobix0KXsxJm4mJlMoMCxZYmUsMCwwLCJuZy10ZW1wbGF0ZSIsMjIpLDImbiYmKHcoMiksXygibmdUZW1wbGF0ZU91dGxldCIsaXQoMSkpKX1mdW5jdGlvbiBRYmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjEpLFMoMSxYYmUsMSwxLCJuZy10ZW1wbGF0ZSIsOSksZygpKSwyJm4pe2xldCBlPXcoKTtfKCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZU9wZW4iLGUuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lTGFiZWxXaWR0aCIsZS5fbGFiZWxXaWR0aCksdigxKSxfKCJuZ0lmIiwhZS5fZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpKX19ZnVuY3Rpb24gWmJlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDIzLDI0KSx6dCgyLDIpLGcoKSl9ZnVuY3Rpb24gS2JlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI1LDI2KSx6dCgyLDMpLGcoKSl9ZnVuY3Rpb24gSmJlKG4sdCl7fWZ1bmN0aW9uICRiZShuLHQpezEmbiYmUygwLEpiZSwwLDAsIm5nLXRlbXBsYXRlIiwyMiksMiZuJiYodygpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGl0KDEpKSl9ZnVuY3Rpb24gZXZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI3KSx6dCgxLDQpLGcoKSl9ZnVuY3Rpb24gdHZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI4KSx6dCgxLDUpLGcoKSl9ZnVuY3Rpb24gbnZlKG4sdCl7MSZuJiZQKDAsImRpdiIsMjkpfWZ1bmN0aW9uIGl2ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwzMCksenQoMSw2KSxnKCkpLDImbiYmXygiQHRyYW5zaXRpb25NZXNzYWdlcyIsdygpLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSl9ZnVuY3Rpb24gcnZlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtaGludCIsMzQpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7XygiaWQiLGUuX2hpbnRMYWJlbElkKSx2KDEpLGJ0KGUuaGludExhYmVsKX19ZnVuY3Rpb24gb3ZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDMxKSxTKDEscnZlLDIsMiwibWF0LWhpbnQiLDMyKSx6dCgyLDcpLFAoMywiZGl2IiwzMyksenQoNCw4KSxnKCkpLDImbil7bGV0IGU9dygpO18oIkB0cmFuc2l0aW9uTWVzc2FnZXMiLGUuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKSx2KDEpLF8oIm5nSWYiLGUuaGludExhYmVsKX19dmFyIHN2ZT1bIioiLFtbIm1hdC1sYWJlbCJdXSxbWyIiLCJtYXRQcmVmaXgiLCIiXSxbIiIsIm1hdEljb25QcmVmaXgiLCIiXV0sW1siIiwibWF0VGV4dFByZWZpeCIsIiJdXSxbWyIiLCJtYXRUZXh0U3VmZml4IiwiIl1dLFtbIiIsIm1hdFN1ZmZpeCIsIiJdLFsiIiwibWF0SWNvblN1ZmZpeCIsIiJdXSxbWyJtYXQtZXJyb3IiXSxbIiIsIm1hdEVycm9yIiwiIl1dLFtbIm1hdC1oaW50IiwzLCJhbGlnbiIsImVuZCJdXSxbWyJtYXQtaGludCIsImFsaWduIiwiZW5kIl1dXSxhdmU9WyIqIiwibWF0LWxhYmVsIiwiW21hdFByZWZpeF0sIFttYXRJY29uUHJlZml4XSIsIlttYXRUZXh0UHJlZml4XSIsIlttYXRUZXh0U3VmZml4XSIsIlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0iLCJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSkiLCJtYXQtaGludFthbGlnbj0nZW5kJ10iXSxrYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksbn0pKCksbHZlPTAsQzk9bmV3IGllKCJNYXRFcnJvciIpLE05PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmlkPSJtYXQtbWRjLWVycm9yLSIrbHZlKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHlvKCJhcmlhLWxpdmUiKSxDKE1lKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdLFsiIiwibWF0RXJyb3IiLCIiXV0saG9zdEF0dHJzOlsiYXJpYS1hdG9taWMiLCJ0cnVlIiwxLCJtYXQtbWRjLWZvcm0tZmllbGQtZXJyb3IiLCJtYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmpvKCJpZCIsaS5pZCl9LGlucHV0czp7aWQ6ImlkIn0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpDOSx1c2VFeGlzdGluZzpufV0pXX0pLG59KSgpLGN2ZT0wLG05PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsaWduPSJzdGFydCIsdGhpcy5pZD0ibWF0LW1kYy1oaW50LSIrY3ZlKyt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaGludCJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50IiwibWF0LW1kYy1mb3JtLWZpZWxkLWJvdHRvbS1hbGlnbiJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoam8oImlkIixpLmlkKSxCZSgiYWxpZ24iLG51bGwpLG50KCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1lbmQiLCJlbmQiPT09aS5hbGlnbikpfSxpbnB1dHM6e2FsaWduOiJhbGlnbiIsaWQ6ImlkIn19KSxufSkoKSx3OT1uZXcgaWUoIk1hdFByZWZpeCIpLFM5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pc1RleHQ9ITF9c2V0IF9pc1RleHRTZWxlY3RvcihlKXt0aGlzLl9pc1RleHQ9ITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRQcmVmaXgiLCIiXSxbIiIsIm1hdEljb25QcmVmaXgiLCIiXSxbIiIsIm1hdFRleHRQcmVmaXgiLCIiXV0saW5wdXRzOntfaXNUZXh0U2VsZWN0b3I6WyJtYXRUZXh0UHJlZml4IiwiX2lzVGV4dFNlbGVjdG9yIl19LGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6dzksdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxkdmU9bmV3IGllKCJNYXRTdWZmaXgiKSxoOT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLmZsb2F0aW5nPSExfWdldFdpZHRoKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKG51bGwhPT1uLm9mZnNldFBhcmVudClyZXR1cm4gbi5zY3JvbGxXaWR0aDtsZXQgZT1uLmNsb25lTm9kZSghMCk7ZS5zdHlsZS5zZXRQcm9wZXJ0eSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLGUuc3R5bGUuc2V0UHJvcGVydHkoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtOTk5OXB4LCAtOTk5OXB4KSIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChlKTtsZXQgaT1lLnNjcm9sbFdpZHRoO3JldHVybiBlLnJlbW92ZSgpLGl9KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCl9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImxhYmVsIiwibWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1kYy1mbG9hdGluZy1sYWJlbCIsIm1hdC1tZGMtZmxvYXRpbmctbGFiZWwiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUiLGkuZmxvYXRpbmcpfSxpbnB1dHM6e2Zsb2F0aW5nOiJmbG9hdGluZyJ9fSksbn0pKCksZzk9Im1kYy1saW5lLXJpcHBsZS0tYWN0aXZlIiwkMT0ibWRjLWxpbmUtcmlwcGxlLS1kZWFjdGl2YXRpbmciLF85PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5faGFuZGxlVHJhbnNpdGlvbkVuZD1yPT57bGV0IG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdCxzPW8uY29udGFpbnMoJDEpOyJvcGFjaXR5Ij09PXIucHJvcGVydHlOYW1lJiZzJiZvLnJlbW92ZShnOSwkMSl9LGkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5faGFuZGxlVHJhbnNpdGlvbkVuZCl9KX1hY3RpdmF0ZSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7ZS5yZW1vdmUoJDEpLGUuYWRkKGc5KX1kZWFjdGl2YXRlKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJDEpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuX2hhbmRsZVRyYW5zaXRpb25FbmQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImRpdiIsIm1hdEZvcm1GaWVsZExpbmVSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtZGMtbGluZS1yaXBwbGUiXX0pLG59KSgpLGI5PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5sYWJlbFdpZHRoPTAsdGhpcy5vcGVuPSExfW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWRjLWZsb2F0aW5nLWxhYmVsIik7ZT8odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIiksImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSYmKGUuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPSIwcyIsdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5lLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj0iIil9KSkpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtZGMtbm90Y2hlZC1vdXRsaW5lLS1uby1sYWJlbCIpfV9nZXROb3RjaFdpZHRoKCl7cmV0dXJuIHRoaXMub3Blbj90aGlzLmxhYmVsV2lkdGg+MD9gY2FsYygke3RoaXMubGFiZWxXaWR0aH1weCAqIHZhcigtLW1hdC1tZGMtZm9ybS1maWVsZC1mbG9hdGluZy1sYWJlbC1zY2FsZSwgMC43NSkgKyA5cHgpYDoiMHB4IjpudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGl2IiwibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtZGMtbm90Y2hlZC1vdXRsaW5lIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJtZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIixpLm9wZW4pfSxpbnB1dHM6e2xhYmVsV2lkdGg6WyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZUxhYmVsV2lkdGgiLCJsYWJlbFdpZHRoIl0sb3BlbjpbIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3BlbiIsIm9wZW4iXX0sYXR0cnM6QmJlLG5nQ29udGVudFNlbGVjdG9yczpWYmUsZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwibWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZyJdLFsxLCJtZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCJdLFsxLCJtZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUCgwLCJkaXYiLDApLGgoMSwiZGl2IiwxKSx6dCgyKSxnKCksUCgzLCJkaXYiLDIpKSwyJmUmJih2KDEpLFR0KCJ3aWR0aCIsaS5fZ2V0Tm90Y2hXaWR0aCgpKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHB2ZT17dHJhbnNpdGlvbk1lc3NhZ2VzOl9yKCJ0cmFuc2l0aW9uTWVzc2FnZXMiLFt3aSgiZW50ZXIiLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9KSksZ2koInZvaWQgPT4gZW50ZXIiLFtybih7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNXB4KSJ9KSxDaSgiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LFF2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpufSksbn0pKCksU2Y9bmV3IGllKCJNYXRGb3JtRmllbGQiKSxmdmU9bmV3IGllKCJNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMiKSx2OT0wLEthPSgoKT0+e2NsYXNzIG57Z2V0IGhpZGVSZXF1aXJlZE1hcmtlcigpe3JldHVybiB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXJ9c2V0IGhpZGVSZXF1aXJlZE1hcmtlcihlKXt0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9UnQoZSl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4gdGhpcy5fZmxvYXRMYWJlbHx8dGhpcy5fZGVmYXVsdHM/LmZsb2F0TGFiZWx8fCJhdXRvIn1zZXQgZmxvYXRMYWJlbChlKXtlIT09dGhpcy5fZmxvYXRMYWJlbCYmKHRoaXMuX2Zsb2F0TGFiZWw9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXtsZXQgaT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9ZXx8dGhpcy5fZGVmYXVsdHM/LmFwcGVhcmFuY2V8fCJmaWxsIiwib3V0bGluZSI9PT10aGlzLl9hcHBlYXJhbmNlJiZ0aGlzLl9hcHBlYXJhbmNlIT09aSYmKHRoaXMuX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCgpLHRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGU9ITApfWdldCBzdWJzY3JpcHRTaXppbmcoKXtyZXR1cm4gdGhpcy5fc3Vic2NyaXB0U2l6aW5nfHx0aGlzLl9kZWZhdWx0cz8uc3Vic2NyaXB0U2l6aW5nfHwiZml4ZWQifXNldCBzdWJzY3JpcHRTaXppbmcoZSl7dGhpcy5fc3Vic2NyaXB0U2l6aW5nPWV8fHRoaXMuX2RlZmF1bHRzPy5zdWJzY3JpcHRTaXppbmd8fCJmaXhlZCJ9Z2V0IGhpbnRMYWJlbCgpe3JldHVybiB0aGlzLl9oaW50TGFiZWx9c2V0IGhpbnRMYWJlbChlKXt0aGlzLl9oaW50TGFiZWw9ZSx0aGlzLl9wcm9jZXNzSGludHMoKX1nZXQgX2NvbnRyb2woKXtyZXR1cm4gdGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sfHx0aGlzLl9mb3JtRmllbGRDb250cm9sfXNldCBfY29udHJvbChlKXt0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2w9ZX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1vLHRoaXMuX3BsYXRmb3JtPXMsdGhpcy5fZGVmYXVsdHM9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9ITEsdGhpcy5jb2xvcj0icHJpbWFyeSIsdGhpcy5fYXBwZWFyYW5jZT0iZmlsbCIsdGhpcy5fc3Vic2NyaXB0U2l6aW5nPW51bGwsdGhpcy5faGludExhYmVsPSIiLHRoaXMuX2hhc0ljb25QcmVmaXg9ITEsdGhpcy5faGFzVGV4dFByZWZpeD0hMSx0aGlzLl9oYXNJY29uU3VmZml4PSExLHRoaXMuX2hhc1RleHRTdWZmaXg9ITEsdGhpcy5fbGFiZWxJZD0ibWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLSIrdjkrKyx0aGlzLl9oaW50TGFiZWxJZD0ibWF0LW1kYy1oaW50LSIrdjkrKyx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9sYWJlbFdpZHRoPTAsdGhpcy5fZGVzdHJveWVkPW5ldyBJZSx0aGlzLl9pc0ZvY3VzZWQ9bnVsbCx0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlPSExLGEmJihhLmFwcGVhcmFuY2UmJih0aGlzLmFwcGVhcmFuY2U9YS5hcHBlYXJhbmNlKSx0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9Qm9vbGVhbihhPy5oaWRlUmVxdWlyZWRNYXJrZXIpLGEuY29sb3ImJih0aGlzLmNvbG9yPWEuY29sb3IpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl91cGRhdGVGb2N1c1N0YXRlKCksdGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCksdGhpcy5fZG9jdW1lbnQ/LmZvbnRzPy5yZWFkeT90aGlzLl9kb2N1bWVudC5mb250cy5yZWFkeS50aGVuKCgpPT57dGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KTpzZXRUaW1lb3V0KCgpPT50aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSwxMDApLHRoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2Fzc2VydEZvcm1GaWVsZENvbnRyb2woKSx0aGlzLl9pbml0aWFsaXplQ29udHJvbCgpLHRoaXMuX2luaXRpYWxpemVTdWJzY3JpcHQoKSx0aGlzLl9pbml0aWFsaXplUHJlZml4QW5kU3VmZml4KCksdGhpcy5faW5pdGlhbGl6ZU91dGxpbmVMYWJlbE9mZnNldFN1YnNjcmlwdGlvbnMoKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl9hc3NlcnRGb3JtRmllbGRDb250cm9sKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfWdldExhYmVsSWQoKXtyZXR1cm4gdGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpP3RoaXMuX2xhYmVsSWQ6bnVsbH1nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCl7cmV0dXJuIHRoaXMuX3RleHRGaWVsZHx8dGhpcy5fZWxlbWVudFJlZn1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmKHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIil9X2luaXRpYWxpemVDb250cm9sKCl7bGV0IGU9dGhpcy5fY29udHJvbDtlLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtJHtlLmNvbnRyb2xUeXBlfWApLGUuc3RhdGVDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZUZvY3VzU3RhdGUoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUubmdDb250cm9sJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMmJmUubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9jaGVja1ByZWZpeEFuZFN1ZmZpeFR5cGVzKCl7dGhpcy5faGFzSWNvblByZWZpeD0hIXRoaXMuX3ByZWZpeENoaWxkcmVuLmZpbmQoZT0+IWUuX2lzVGV4dCksdGhpcy5faGFzVGV4dFByZWZpeD0hIXRoaXMuX3ByZWZpeENoaWxkcmVuLmZpbmQoZT0+ZS5faXNUZXh0KSx0aGlzLl9oYXNJY29uU3VmZml4PSEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChlPT4hZS5faXNUZXh0KSx0aGlzLl9oYXNUZXh0U3VmZml4PSEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChlPT5lLl9pc1RleHQpfV9pbml0aWFsaXplUHJlZml4QW5kU3VmZml4KCl7dGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpLHRuKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsdGhpcy5fc3VmZml4Q2hpbGRyZW4uY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9X2luaXRpYWxpemVTdWJzY3JpcHQoKXt0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9wcm9jZXNzSGludHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fYXNzZXJ0Rm9ybUZpZWxkQ29udHJvbCgpe31fdXBkYXRlRm9jdXNTdGF0ZSgpe3RoaXMuX2NvbnRyb2wuZm9jdXNlZCYmIXRoaXMuX2lzRm9jdXNlZD8odGhpcy5faXNGb2N1c2VkPSEwLHRoaXMuX2xpbmVSaXBwbGU/LmFjdGl2YXRlKCkpOiF0aGlzLl9jb250cm9sLmZvY3VzZWQmJih0aGlzLl9pc0ZvY3VzZWR8fG51bGw9PT10aGlzLl9pc0ZvY3VzZWQpJiYodGhpcy5faXNGb2N1c2VkPSExLHRoaXMuX2xpbmVSaXBwbGU/LmRlYWN0aXZhdGUoKSksdGhpcy5fdGV4dEZpZWxkPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoIm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIix0aGlzLl9jb250cm9sLmZvY3VzZWQpfV9pbml0aWFsaXplT3V0bGluZUxhYmVsT2Zmc2V0U3Vic2NyaXB0aW9ucygpe3RoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlPSEwKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlJiYodGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZT0hMSx0aGlzLl91cGRhdGVPdXRsaW5lTGFiZWxPZmZzZXQoKSl9KX0pLHRoaXMuX2Rpci5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX25lZWRzT3V0bGluZUxhYmVsT2Zmc2V0VXBkYXRlT25TdGFibGU9ITApfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsfV9oYXNPdXRsaW5lKCl7cmV0dXJuIm91dGxpbmUiPT09dGhpcy5hcHBlYXJhbmNlfV9mb3JjZURpc3BsYXlJbmZpeExhYmVsKCl7cmV0dXJuIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoJiYhdGhpcy5fc2hvdWxkTGFiZWxGbG9hdCgpfV9oYXNGbG9hdGluZ0xhYmVsKCl7cmV0dXJuISF0aGlzLl9sYWJlbENoaWxkTm9uU3RhdGljfHwhIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWN9X3Nob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fY29udHJvbC5zaG91bGRMYWJlbEZsb2F0fHx0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpfV9zaG91bGRGb3J3YXJkKGUpe2xldCBpPXRoaXMuX2NvbnRyb2w/dGhpcy5fY29udHJvbC5uZ0NvbnRyb2w6bnVsbDtyZXR1cm4gaSYmaVtlXX1fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifV9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKXshdGhpcy5faGFzT3V0bGluZSgpfHwhdGhpcy5fZmxvYXRpbmdMYWJlbHx8KHRoaXMuX2xhYmVsV2lkdGg9dGhpcy5fZmxvYXRpbmdMYWJlbC5nZXRXaWR0aCgpKX1fcHJvY2Vzc0hpbnRzKCl7dGhpcy5fdmFsaWRhdGVIaW50cygpLHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpfV92YWxpZGF0ZUhpbnRzKCl7fV9zeW5jRGVzY3JpYmVkQnlJZHMoKXtpZih0aGlzLl9jb250cm9sKXtsZXQgZT1bXTtpZih0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJiJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiZlLnB1c2goLi4udGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5LnNwbGl0KCIgIikpLCJoaW50Ij09PXRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpe2xldCBpPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4ic3RhcnQiPT09by5hbGlnbik6bnVsbCxyPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4iZW5kIj09PW8uYWxpZ24pOm51bGw7aT9lLnB1c2goaS5pZCk6dGhpcy5faGludExhYmVsJiZlLnB1c2godGhpcy5faGludExhYmVsSWQpLHImJmUucHVzaChyLmlkKX1lbHNlIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJmUucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChpPT5pLmlkKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyhlKX19X3VwZGF0ZU91dGxpbmVMYWJlbE9mZnNldCgpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCF0aGlzLl9oYXNPdXRsaW5lKCl8fCF0aGlzLl9mbG9hdGluZ0xhYmVsKXJldHVybjtsZXQgZT10aGlzLl9mbG9hdGluZ0xhYmVsLmVsZW1lbnQ7aWYoIXRoaXMuX2ljb25QcmVmaXhDb250YWluZXImJiF0aGlzLl90ZXh0UHJlZml4Q29udGFpbmVyKXJldHVybiB2b2lkKGUuc3R5bGUudHJhbnNmb3JtPSIiKTtpZighdGhpcy5faXNBdHRhY2hlZFRvRG9tKCkpcmV0dXJuIHZvaWQodGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZT0hMCk7bGV0IGk9dGhpcy5faWNvblByZWZpeENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCxyPXRoaXMuX3RleHRQcmVmaXhDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsbz1pPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD8/MCxzPXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPz8wO2Uuc3R5bGUudHJhbnNmb3JtPWB2YXIoXG4gICAgICAgIC0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRyYW5zZm9ybSxcbiAgICAgICAgdHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKGNhbGMoJHsicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iLTEiOiIxIn0gKiAoJHtvK3N9cHggKyB2YXIoLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtb2Zmc2V0LXgsIDBweCkpKSlcbiAgICApYH1faXNBdHRhY2hlZFRvRG9tKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKGUuZ2V0Um9vdE5vZGUpe2xldCBpPWUuZ2V0Um9vdE5vZGUoKTtyZXR1cm4gaSYmaSE9PWV9cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQygkdCksQyhhdCksQyhYaSksQyhHbiksQyhmdmUsOCksQyhoaSw4KSxDKEx0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWZvcm0tZmllbGQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsa2MsNSksVGkocixrYyw3KSxUaShyLFF2LDUpLFRpKHIsdzksNSksVGkocixkdmUsNSksVGkocixDOSw1KSxUaShyLG05LDUpKSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9sYWJlbENoaWxkTm9uU3RhdGljPW8uZmlyc3QpLFNlKG89RWUoKSkmJihpLl9sYWJlbENoaWxkU3RhdGljPW8uZmlyc3QpLFNlKG89RWUoKSkmJihpLl9mb3JtRmllbGRDb250cm9sPW8uZmlyc3QpLFNlKG89RWUoKSkmJihpLl9wcmVmaXhDaGlsZHJlbj1vKSxTZShvPUVlKCkpJiYoaS5fc3VmZml4Q2hpbGRyZW49byksU2Uobz1FZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksU2Uobz1FZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKEhiZSw1KSxHZSh6YmUsNSksR2UoVWJlLDUpLEdlKGg5LDUpLEdlKGI5LDUpLEdlKF85LDUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl90ZXh0RmllbGQ9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX2ljb25QcmVmaXhDb250YWluZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RleHRQcmVmaXhDb250YWluZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX2Zsb2F0aW5nTGFiZWw9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX25vdGNoZWRPdXRsaW5lPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLl9saW5lUmlwcGxlPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLWZvcm0tZmllbGQiXSxob3N0VmFyczo0Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJtYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtYWx3YXlzLWZsb2F0IixpLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXByZWZpeCIsaS5faGFzSWNvblByZWZpeCkoIm1hdC1tZGMtZm9ybS1maWVsZC1oYXMtaWNvbi1zdWZmaXgiLGkuX2hhc0ljb25TdWZmaXgpKCJtYXQtZm9ybS1maWVsZC1pbnZhbGlkIixpLl9jb250cm9sLmVycm9yU3RhdGUpKCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZCIsaS5fY29udHJvbC5kaXNhYmxlZCkoIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsZWQiLGkuX2NvbnRyb2wuYXV0b2ZpbGxlZCkoIm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIiwiZmlsbCI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIixpLl9oYXNGbG9hdGluZ0xhYmVsKCkmJiFpLl9zaG91bGRMYWJlbEZsb2F0KCkpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibWF0LXByaW1hcnkiLCJhY2NlbnQiIT09aS5jb2xvciYmIndhcm4iIT09aS5jb2xvcikoIm1hdC1hY2NlbnQiLCJhY2NlbnQiPT09aS5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PT1pLmNvbG9yKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSl9LGlucHV0czp7aGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGNvbG9yOiJjb2xvciIsZmxvYXRMYWJlbDoiZmxvYXRMYWJlbCIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsc3Vic2NyaXB0U2l6aW5nOiJzdWJzY3JpcHRTaXppbmciLGhpbnRMYWJlbDoiaGludExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbUXQoW3twcm92aWRlOlNmLHVzZUV4aXN0aW5nOm59XSldLG5nQ29udGVudFNlbGVjdG9yczphdmUsZGVjbHM6MTgsdmFyczoyMyxjb25zdHM6W1sibGFiZWxUZW1wbGF0ZSIsIiJdLFsxLCJtYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciIsIm1kYy10ZXh0LWZpZWxkIiwzLCJjbGljayJdLFsidGV4dEZpZWxkIiwiIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5Iiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4Il0sWyJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZSIsIiIsMywibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmVPcGVuIiwibWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmVMYWJlbFdpZHRoIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtdGV4dC1wcmVmaXgiLDQsIm5nSWYiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWluZml4Il0sWzMsIm5nSWYiXSxbImNsYXNzIiwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtc3VmZml4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeCIsNCwibmdJZiJdLFsibWF0Rm9ybUZpZWxkTGluZVJpcHBsZSIsIiIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLCJtYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtZXJyb3Itd3JhcHBlciIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCIsIiIsMywiZmxvYXRpbmciLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiaWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsibWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbCIsIiIsMywiZmxvYXRpbmciLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiaWQiLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJtYXQtbWRjLWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIG1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LW1kYy1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciIsIm1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWZvY3VzLW92ZXJsYXkiXSxbIm1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lIiwiIiwzLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZU9wZW4iLCJtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZUxhYmVsV2lkdGgiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXgiXSxbImljb25QcmVmaXhDb250YWluZXIiLCIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLXRleHQtcHJlZml4Il0sWyJ0ZXh0UHJlZml4Q29udGFpbmVyIiwiIl0sWzEsIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0LXN1ZmZpeCJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXgiXSxbIm1hdEZvcm1GaWVsZExpbmVSaXBwbGUiLCIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXIiXSxbMSwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFszLCJpZCIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMywiaWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbihzdmUpLFMoMCxXYmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLFd0KSxoKDIsImRpdiIsMSwyKSxJKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NvbnRyb2wub25Db250YWluZXJDbGljayYmaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKG8pfSksUyg0LHFiZSwxLDAsImRpdiIsMyksaCg1LCJkaXYiLDQpLFMoNixRYmUsMiwzLCJkaXYiLDUpLFMoNyxaYmUsMywwLCJkaXYiLDYpLFMoOCxLYmUsMywwLCJkaXYiLDcpLGgoOSwiZGl2Iiw4KSxTKDEwLCRiZSwxLDEsIm5nLXRlbXBsYXRlIiw5KSx6dCgxMSksZygpLFMoMTIsZXZlLDIsMCwiZGl2IiwxMCksUygxMyx0dmUsMiwwLCJkaXYiLDExKSxnKCksUygxNCxudmUsMSwwLCJkaXYiLDEyKSxnKCksaCgxNSwiZGl2IiwxMyksUygxNixpdmUsMiwxLCJkaXYiLDE0KSxTKDE3LG92ZSw1LDIsImRpdiIsMTUpLGcoKSksMiZlJiYodigyKSxudCgibWRjLXRleHQtZmllbGQtLWZpbGxlZCIsIWkuX2hhc091dGxpbmUoKSkoIm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCIsaS5faGFzT3V0bGluZSgpKSgibWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIiwhaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWRjLXRleHQtZmllbGQtLWRpc2FibGVkIixpLl9jb250cm9sLmRpc2FibGVkKSgibWRjLXRleHQtZmllbGQtLWludmFsaWQiLGkuX2NvbnRyb2wuZXJyb3JTdGF0ZSksdigyKSxfKCJuZ0lmIiwhaS5faGFzT3V0bGluZSgpJiYhaS5fY29udHJvbC5kaXNhYmxlZCksdigyKSxfKCJuZ0lmIixpLl9oYXNPdXRsaW5lKCkpLHYoMSksXygibmdJZiIsaS5faGFzSWNvblByZWZpeCksdigxKSxfKCJuZ0lmIixpLl9oYXNUZXh0UHJlZml4KSx2KDIpLF8oIm5nSWYiLCFpLl9oYXNPdXRsaW5lKCl8fGkuX2ZvcmNlRGlzcGxheUluZml4TGFiZWwoKSksdigyKSxfKCJuZ0lmIixpLl9oYXNUZXh0U3VmZml4KSx2KDEpLF8oIm5nSWYiLGkuX2hhc0ljb25TdWZmaXgpLHYoMSksXygibmdJZiIsIWkuX2hhc091dGxpbmUoKSksdigxKSxudCgibWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC1keW5hbWljLXNpemUiLCJkeW5hbWljIj09PWkuc3Vic2NyaXB0U2l6aW5nKSxfKCJuZ1N3aXRjaCIsaS5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJlcnJvciIpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiaGludCIpKX0sZGVwZW5kZW5jaWVzOltGZSxMcixzcixTcixQMSxtOSxoOSxiOSxfOV0sc3R5bGVzOlsnLm1kYy10ZXh0LWZpZWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47d2lsbC1jaGFuZ2U6b3BhY2l0eSx0cmFuc2Zvcm0sY29sb3J9Lm1kYy10ZXh0LWZpZWxkIC5tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXR7aGVpZ2h0OjI4cHg7d2lkdGg6MTAwJTttaW4td2lkdGg6MDtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZDpub25lO2FwcGVhcmFuY2U6bm9uZTtwYWRkaW5nOjB9Lm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0ubWRjLXRleHQtZmllbGRfX2lucHV0Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtdGV4dC1maWVsZF9faW5wdXQ6aW52YWxpZHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcntvcGFjaXR5OjB9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfX1AbWVkaWEgYWxsey5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXIsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6OnBsYWNlaG9sZGVye29wYWNpdHk6MX19QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLC5tZGMtdGV4dC1maWVsZC0tZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjF9fS5tZGMtdGV4dC1maWVsZF9fYWZmaXh7aGVpZ2h0OjI4cHg7b3BhY2l0eTowO3doaXRlLXNwYWNlOm5vd3JhcH0ubWRjLXRleHQtZmllbGQtLWxhYmVsLWZsb2F0aW5nIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLXRleHQtZmllbGRfX2FmZml4e29wYWNpdHk6MX1Ac3VwcG9ydHMoLXdlYmtpdC1oeXBoZW5zOiBub25lKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXh7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCV9fS5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjJweH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4W2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxMnB4O3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4W2Rpcj1ydGxde3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTJweH0ubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXhbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoycHh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWR7aGVpZ2h0OjU2cHh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQ6OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDo0MHB4O2NvbnRlbnQ6IiI7dmVydGljYWwtYWxpZ246MH0ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6MTZweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWxbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjE2cHh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwNiUpIHNjYWxlKDAuNzUpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLXRleHQtZmllbGRfX2lucHV0e2hlaWdodDoxMDAlfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWw6OmJlZm9yZXtkaXNwbGF5Om5vbmV9QHN1cHBvcnRzKC13ZWJraXQtaHlwaGVuczogbm9uZSl7Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tZGMtdGV4dC1maWVsZF9fYWZmaXh7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCV9fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWR7aGVpZ2h0OjU2cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNy4yNXB4KSBzY2FsZSgxKX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZTouNzVyZW19Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6MXJlbX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7aGVpZ2h0OjEwMCV9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ3tib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ1tkaXI9cnRsXXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ3t3aWR0aDptYXgoMTJweCwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX19QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIG1heCgxMnB4LCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpKjIpfX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nW2Rpcj1ydGxde2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KX1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVke3BhZGRpbmctbGVmdDptYXgoMTZweCwgY2FsYyh2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkgKyA0cHgpKX19QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZHtwYWRkaW5nLXJpZ2h0Om1heCgxNnB4LCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfX1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZXtwYWRkaW5nLWxlZnQ6bWF4KDE2cHgsIGNhbGModmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpICsgNHB4KSl9fUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5le3BhZGRpbmctcmlnaHQ6bWF4KDE2cHgsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9fS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29ue3BhZGRpbmctbGVmdDowfUBzdXBwb3J0cyh0b3A6IG1heCgwJSkpey5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29ue3BhZGRpbmctcmlnaHQ6bWF4KDE2cHgsIHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSl9fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbiwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLXJpZ2h0OjB9QHN1cHBvcnRzKHRvcDogbWF4KDAlKSl7W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctbGVmdDptYXgoMTZweCwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX19Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctcmlnaHQ6MH1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXsubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb257cGFkZGluZy1sZWZ0Om1heCgxNnB4LCBjYWxjKHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSArIDRweCkpfX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MH1Ac3VwcG9ydHModG9wOiBtYXgoMCUpKXtbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLXJpZ2h0Om1heCgxNnB4LCBjYWxjKHZhcigtLW1kYy1zaGFwZS1zbWFsbCwgNHB4KSArIDRweCkpfX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDoxcHh9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6NHB4O3JpZ2h0OmluaXRpYWx9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWxbZGlyPXJ0bF17bGVmdDppbml0aWFsO3JpZ2h0OjRweH0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7ZGlzcGxheTpmbGV4O2JvcmRlcjpub25lICFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmV7ei1pbmRleDoxfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWF7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDphdXRvO2hlaWdodDphdXRvO3BhZGRpbmc6MH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhIC5tZGMtZmxvYXRpbmctbGFiZWx7dG9wOjE5cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLWZsb2F0aW5nLWxhYmVsOm5vdCgubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSl7dHJhbnNmb3JtOm5vbmV9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSAubWRjLXRleHQtZmllbGRfX2lucHV0e2ZsZXgtZ3JvdzoxO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MS41cmVtO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7cmVzaXplOm5vbmU7cGFkZGluZzowIDE2cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOjpiZWZvcmV7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7bWFyZ2luLXRvcDoyM3B4O21hcmdpbi1ib3R0b206OXB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLWZpbGxlZC5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWwgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHttYXJnaW4tdG9wOjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDowfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNy4yNXB4KSBzY2FsZSgxKX0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6Ljc1cmVtfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMjQuNzVweCkgc2NhbGUoMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle2ZvbnQtc2l6ZToxcmVtfS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXR7bWFyZ2luLXRvcDoxNnB4O21hcmdpbi1ib3R0b206MTZweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVse3RvcDoxOHB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLXdpdGgtaW50ZXJuYWwtY291bnRlciAubWRjLXRleHQtZmllbGRfX2lucHV0e21hcmdpbi1ib3R0b206MnB4fS5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLXdpdGgtaW50ZXJuYWwtY291bnRlciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7YWxpZ24tc2VsZjpmbGV4LWVuZDtwYWRkaW5nOjAgMTZweH0ubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS13aXRoLWludGVybmFsLWNvdW50ZXIgLm1kYy10ZXh0LWZpZWxkLWNoYXJhY3Rlci1jb3VudGVyOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDoxNnB4O2NvbnRlbnQ6IiI7dmVydGljYWwtYWxpZ246LTE2cHh9Lm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYS5tZGMtdGV4dC1maWVsZC0td2l0aC1pbnRlcm5hbC1jb3VudGVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcjo6YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXJ7YWxpZ24tc2VsZjpzdHJldGNoO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO21heC1oZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTttaW4taGVpZ2h0OjU2cHg7bWluLXdpZHRoOmZpdC1jb250ZW50O21pbi13aWR0aDotbW96LWF2YWlsYWJsZTttaW4td2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOmJvdGh9Lm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpfS5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGRfX2lucHV0LC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplcnt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KSB0cmFuc2xhdGVZKC0xcHgpfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplcltkaXI9cnRsXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxcHgpIHRyYW5zbGF0ZVkoLTFweCl9Lm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLXRleHQtZmllbGRfX3Jlc2l6ZXIgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGQtY2hhcmFjdGVyLWNvdW50ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMXB4KSB0cmFuc2xhdGVZKDFweCl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZF9faW5wdXQsW2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlciwubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtdGV4dC1maWVsZF9fcmVzaXplciAubWRjLXRleHQtZmllbGRfX2lucHV0W2Rpcj1ydGxdLC5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19yZXNpemVyIC5tZGMtdGV4dC1maWVsZC1jaGFyYWN0ZXItY291bnRlcltkaXI9cnRsXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KSB0cmFuc2xhdGVZKDFweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbntwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24sLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbltkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDQ4cHgpO2xlZnQ6NDhweDtyaWdodDppbml0aWFsfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbFtkaXI9cnRsXXtsZWZ0OmluaXRpYWw7cmlnaHQ6NDhweH0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7bWF4LXdpZHRoOmNhbGMoMTAwJSAvIDAuNzUgLSA2NHB4IC8gMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtsZWZ0OjM2cHg7cmlnaHQ6aW5pdGlhbH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsW2Rpcj1ydGxde2xlZnQ6aW5pdGlhbDtyaWdodDozNnB4fS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIDpub3QoLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTM3LjI1cHgpIHRyYW5zbGF0ZVgoLTMycHgpIHNjYWxlKDEpfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZSwubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZVtkaXI9cnRsXXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzcuMjVweCkgdHJhbnNsYXRlWCgzMnB4KSBzY2FsZSgxKX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6Ljc1cmVtfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzQuNzVweCkgdHJhbnNsYXRlWCgtMzJweCkgc2NhbGUoMC43NSl9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmUsLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmVbZGlyPXJ0bF0sLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlW2Rpcj1ydGxde3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zNC43NXB4KSB0cmFuc2xhdGVYKDMycHgpIHNjYWxlKDAuNzUpfS5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkLm1kYy1ub3RjaGVkLW91dGxpbmUtLXVwZ3JhZGVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3ZlLC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS11cGdyYWRlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtmb250LXNpemU6MXJlbX0ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjB9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLC5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uW2Rpcj1ydGxde3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH0ubWRjLXRleHQtZmllbGQtLXdpdGgtdHJhaWxpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tZmlsbGVkIC5tZGMtZmxvYXRpbmctbGFiZWx7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDY0cHgpfS5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7bWF4LXdpZHRoOmNhbGMoMTAwJSAvIDAuNzUgLSA2NHB4IC8gMC43NSl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIDpub3QoLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQpIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0td2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVse21heC13aWR0aDpjYWxjKDEwMCUgLSA5NnB4KX0ubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS13aXRoLXRyYWlsaW5nLWljb24ubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXttYXgtd2lkdGg6Y2FsYygxMDAlIC8gMC43NSAtIDk2cHggLyAwLjc1KX0ubWRjLXRleHQtZmllbGQtaGVscGVyLWxpbmV7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWRjLXRleHQtZmllbGQrLm1kYy10ZXh0LWZpZWxkLWhlbHBlci1saW5le3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH0ubWRjLWZvcm0tZmllbGQ+Lm1kYy10ZXh0LWZpZWxkK2xhYmVse2FsaWduLXNlbGY6ZmxleC1zdGFydH0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCwubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5ne2JvcmRlci13aWR0aDoycHh9Lm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQ6bm90KC5tZGMtdGV4dC1maWVsZC1oZWxwZXItdGV4dC0tdmFsaWRhdGlvbi1tc2cpe29wYWNpdHk6MX0ubWRjLXRleHQtZmllbGQtLWZvY3VzZWQubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lLS1ub3RjaGVkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtwYWRkaW5nLXRvcDoycHh9Lm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEgLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe3BhZGRpbmctdG9wOjB9Lm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkKy5tZGMtdGV4dC1maWVsZC1oZWxwZXItbGluZSAubWRjLXRleHQtZmllbGQtaGVscGVyLXRleHQtLXZhbGlkYXRpb24tbXNne29wYWNpdHk6MX0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy10ZXh0LWZpZWxkLS1kaXNhYmxlZCAubWRjLXRleHQtZmllbGRfX2lucHV0e2JhY2tncm91bmQtY29sb3I6V2luZG93fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHt6LWluZGV4OjF9fS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy1mbG9hdGluZy1sYWJlbHtjdXJzb3I6ZGVmYXVsdH0ubWRjLXRleHQtZmllbGQtLWRpc2FibGVkLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQgLm1kYy10ZXh0LWZpZWxkX19yaXBwbGV7ZGlzcGxheTpub25lfS5tZGMtdGV4dC1maWVsZC0tZGlzYWJsZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtwb2ludGVyLWV2ZW50czphdXRvfS5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHt0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9faW5wdXQsLm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2lucHV0W2Rpcj1ydGxde3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dCAubWRjLXRleHQtZmllbGRfX2lucHV0LFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2lucHV0LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeHtkaXJlY3Rpb246bHRyfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjJweH1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXh7cGFkZGluZy1sZWZ0OjEycHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZywubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tbGVhZGluZ3tvcmRlcjoxfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXN1ZmZpeHtvcmRlcjoyfVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0IC5tZGMtdGV4dC1maWVsZF9faW5wdXQsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2lucHV0e29yZGVyOjN9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4LC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tcHJlZml4e29yZGVyOjR9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQgLm1kYy10ZXh0LWZpZWxkX19pY29uLS10cmFpbGluZywubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZF9faWNvbi0tdHJhaWxpbmd7b3JkZXI6NX1bZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2lucHV0e3RleHQtYWxpZ246cmlnaHR9W2Rpcj1ydGxdIC5tZGMtdGV4dC1maWVsZC0tbHRyLXRleHQubWRjLXRleHQtZmllbGQtLWVuZC1hbGlnbmVkIC5tZGMtdGV4dC1maWVsZF9fYWZmaXgtLXByZWZpeCwubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZFtkaXI9cnRsXSAubWRjLXRleHQtZmllbGRfX2FmZml4LS1wcmVmaXh7cGFkZGluZy1yaWdodDoxMnB4fVtkaXI9cnRsXSAubWRjLXRleHQtZmllbGQtLWx0ci10ZXh0Lm1kYy10ZXh0LWZpZWxkLS1lbmQtYWxpZ25lZCAubWRjLXRleHQtZmllbGRfX2FmZml4LS1zdWZmaXgsLm1kYy10ZXh0LWZpZWxkLS1sdHItdGV4dC5tZGMtdGV4dC1maWVsZC0tZW5kLWFsaWduZWRbZGlyPXJ0bF0gLm1kYy10ZXh0LWZpZWxkX19hZmZpeC0tc3VmZml4e3BhZGRpbmctbGVmdDoycHh9Lm1kYy1mbG9hdGluZy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmxlZnQgdG9wO3RyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3A7bGluZS1oZWlnaHQ6MS4xNXJlbTt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnRleHQ7b3ZlcmZsb3c6aGlkZGVuO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1bZGlyPXJ0bF0gLm1kYy1mbG9hdGluZy1sYWJlbCwubWRjLWZsb2F0aW5nLWxhYmVsW2Rpcj1ydGxde3JpZ2h0OjA7bGVmdDphdXRvOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjpyaWdodCB0b3A7dHJhbnNmb3JtLW9yaWdpbjpyaWdodCB0b3A7dGV4dC1hbGlnbjpyaWdodH0ubWRjLWZsb2F0aW5nLWxhYmVsLS1mbG9hdC1hYm92ZXtjdXJzb3I6YXV0b30ubWRjLWZsb2F0aW5nLWxhYmVsLS1yZXF1aXJlZDpub3QoLm1kYy1mbG9hdGluZy1sYWJlbC0taGlkZS1yZXF1aXJlZC1tYXJrZXIpOjphZnRlcnttYXJnaW4tbGVmdDoxcHg7bWFyZ2luLXJpZ2h0OjBweDtjb250ZW50OiIqIn1bZGlyPXJ0bF0gLm1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQ6bm90KC5tZGMtZmxvYXRpbmctbGFiZWwtLWhpZGUtcmVxdWlyZWQtbWFya2VyKTo6YWZ0ZXIsLm1kYy1mbG9hdGluZy1sYWJlbC0tcmVxdWlyZWQ6bm90KC5tZGMtZmxvYXRpbmctbGFiZWwtLWhpZGUtcmVxdWlyZWQtbWFya2VyKVtkaXI9cnRsXTo6YWZ0ZXJ7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MXB4fS5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDYlKSBzY2FsZSgwLjc1KX0ubWRjLW5vdGNoZWQtb3V0bGluZXtkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dGV4dC1hbGlnbjpsZWZ0O3BvaW50ZXItZXZlbnRzOm5vbmV9W2Rpcj1ydGxdIC5tZGMtbm90Y2hlZC1vdXRsaW5lLC5tZGMtbm90Y2hlZC1vdXRsaW5lW2Rpcj1ydGxde3RleHQtYWxpZ246cmlnaHR9Lm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoLC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7Ym9yZGVyLXRvcDoxcHggc29saWQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQ7cG9pbnRlci1ldmVudHM6bm9uZX0ubWRjLW5vdGNoZWQtb3V0bGluZV9fbGVhZGluZ3tib3JkZXItbGVmdDoxcHggc29saWQ7Ym9yZGVyLXJpZ2h0Om5vbmU7d2lkdGg6MTJweH1bZGlyPXJ0bF0gLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmdbZGlyPXJ0bF17Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkfS5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZ3tib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQ7ZmxleC1ncm93OjF9W2Rpcj1ydGxdIC5tZGMtbm90Y2hlZC1vdXRsaW5lX190cmFpbGluZywubWRjLW5vdGNoZWQtb3V0bGluZV9fdHJhaWxpbmdbZGlyPXJ0bF17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkO2JvcmRlci1yaWdodDpub25lfS5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHtmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDEycHggKiAyKX0ubWRjLW5vdGNoZWQtb3V0bGluZSAubWRjLWZsb2F0aW5nLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlfS5tZGMtbm90Y2hlZC1vdXRsaW5lIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle3RleHQtb3ZlcmZsb3c6Y2xpcH0ubWRjLW5vdGNoZWQtb3V0bGluZS0tdXBncmFkZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tZmxvYXQtYWJvdmV7bWF4LXdpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDo4cHg7Ym9yZGVyLXRvcDpub25lfVtkaXI9cnRsXSAubWRjLW5vdGNoZWQtb3V0bGluZS0tbm90Y2hlZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2gsLm1kYy1ub3RjaGVkLW91dGxpbmUtLW5vdGNoZWQgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoW2Rpcj1ydGxde3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDowfS5tZGMtbm90Y2hlZC1vdXRsaW5lLS1uby1sYWJlbCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7ZGlzcGxheTpub25lfS5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZSwubWRjLWxpbmUtcmlwcGxlOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2NvbnRlbnQ6IiJ9Lm1kYy1saW5lLXJpcHBsZTo6YmVmb3Jle2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5tZGMtbGluZS1yaXBwbGU6OmFmdGVye2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZXt6LWluZGV4OjF9Lm1kYy1saW5lLXJpcHBsZTo6YWZ0ZXJ7dHJhbnNmb3JtOnNjYWxlWCgwKTtvcGFjaXR5OjA7ei1pbmRleDoyfS5tZGMtbGluZS1yaXBwbGUtLWFjdGl2ZTo6YWZ0ZXJ7dHJhbnNmb3JtOnNjYWxlWCgxKTtvcGFjaXR5OjF9Lm1kYy1saW5lLXJpcHBsZS0tZGVhY3RpdmF0aW5nOjphZnRlcntvcGFjaXR5OjB9Lm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0YXJlYS1jb250cm9se3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtyZXNpemU6dmVydGljYWw7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDphdXRvO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6bm9uZTtvdmVyZmxvdzphdXRvfS5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHtmb250OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LXRyYW5zZm9ybTppbmhlcml0O2JvcmRlcjpub25lfS5tYXQtbWRjLWZvcm0tZmllbGQgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwubWRjLWZsb2F0aW5nLWxhYmVse2xpbmUtaGVpZ2h0Om5vcm1hbDtwb2ludGVyLWV2ZW50czphbGx9Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbDpub3QoLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYSkgLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sLm1kYy10ZXh0LWZpZWxkX19pbnB1dCwubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIgLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9se2hlaWdodDphdXRvfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wubWRjLXRleHQtZmllbGRfX2lucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoyM3B4fS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntoZWlnaHQ6YXV0bztmbGV4OmF1dG99Lm1hdC1tZGMtZm9ybS1maWVsZC1oYXMtaWNvbi1wcmVmaXggLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVye3BhZGRpbmctbGVmdDowOy0tbWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLW9mZnNldC14OiAtMTZweH0ubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1sZWZ0OjB9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtaGFzLWljb24tcHJlZml4IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntwYWRkaW5nLXJpZ2h0OjB9Lm1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC1hbHdheXMtZmxvYXQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbi1kZWxheTo0MG1zO3RyYW5zaXRpb24tZHVyYXRpb246MTEwbXM7b3BhY2l0eToxfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlciAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4IC5tYXQtbWRjLWZsb2F0aW5nLWxhYmVse2xlZnQ6YXV0bztyaWdodDphdXRvfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy10ZXh0LWZpZWxkX19pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWF0LW1kYy1mb3JtLWZpZWxkIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZCAubWRjLW5vdGNoZWQtb3V0bGluZV9fbm90Y2h7cGFkZGluZy10b3A6MH0ubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXI6OmJlZm9yZXtjb250ZW50Om5vbmV9Lm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciwubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7cGFkZGluZzowIDE2cHh9Lm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtZHluYW1pYy1zaXplIC5tYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyLC5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZSAubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXJ7cG9zaXRpb246c3RhdGljfS5tYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweH0ubWF0LW1kYy1mb3JtLWZpZWxkLWJvdHRvbS1hbGlnbi5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZTo6YmVmb3Jle2NvbnRlbnQ6dW5zZXR9Lm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LWVuZHtvcmRlcjoxfS5tYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVye2Rpc3BsYXk6ZmxleH0ubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2Vye2ZsZXg6MSAwIDFlbX0ubWF0LW1kYy1mb3JtLWZpZWxkLWVycm9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfXNlbGVjdC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3h9c2VsZWN0Lm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb250ZW50OiIiO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci10b3A6NXB4IHNvbGlkO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjUwJTttYXJnaW4tdG9wOi0yLjVweDtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1tZGMtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7cmlnaHQ6YXV0bztsZWZ0OjB9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbHtwYWRkaW5nLXJpZ2h0OjE1cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2x7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcntvdXRsaW5lLWNvbG9yOkdyYXlUZXh0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9jdXNlZCAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXJ7b3V0bGluZTpkYXNoZWQgM3B4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWRjLW5vdGNoZWQtb3V0bGluZXtib3JkZXI6ZGFzaGVkIDNweH0ubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT1kYXRlXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT1kYXRldGltZV0sLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sW3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbFt0eXBlPW1vbnRoXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT13ZWVrXSwubWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2xbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbDo6LXdlYmtpdC1kYXRldGltZS1lZGl0e2xpbmUtaGVpZ2h0OjE7cGFkZGluZzowO21hcmdpbi1ib3R0b206LTJweH0ubWF0LW1kYy1mb3JtLWZpZWxkey0tbWF0LW1kYy1mb3JtLWZpZWxkLWZsb2F0aW5nLWxhYmVsLXNjYWxlOiAwLjc1O2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDowO3RleHQtYWxpZ246bGVmdH1bZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWRjLWZvcm0tZmllbGQtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcnt3aWR0aDoxMDAlfS5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXgsLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHthbGlnbi1zZWxmOmNlbnRlcjtsaW5lLWhlaWdodDowO3BvaW50ZXItZXZlbnRzOmF1dG99Lm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeCxbZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtwYWRkaW5nOjAgNHB4IDAgMH0ubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4LFtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tcHJlZml4e3BhZGRpbmc6MCAwIDAgNHB4fS5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1wcmVmaXg+Lm1hdC1pY29uLC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg+Lm1hdC1pY29ue3BhZGRpbmc6MTJweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIgLm1hdC1pY29uLC5tYXQtbWRjLWZvcm0tZmllbGQgbGFiZWwgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXh7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtY2xpcC1wYXRoOmluc2V0KC05ZW0gLTk5OWVtIC05ZW0gMXB4KTtjbGlwLXBhdGg6aW5zZXQoLTllbSAtOTk5ZW0gLTllbSAxcHgpfVtkaXI9cnRsXSAubWF0LW1kYy1mb3JtLWZpZWxkIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDotMXB4Oy13ZWJraXQtY2xpcC1wYXRoOmluc2V0KC05ZW0gMXB4IC05ZW0gLTk5OWVtKTtjbGlwLXBhdGg6aW5zZXQoLTllbSAxcHggLTllbSAtOTk5ZW0pfS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0e3RyYW5zaXRpb246b3BhY2l0eSAxNTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX1AbWVkaWEgYWxsey5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uOm9wYWNpdHkgNjdtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX19QG1lZGlhIGFsbHsubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpvcGFjaXR5IDY3bXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9fUBtZWRpYSBhbGx7Lm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19pbnB1dDo6cGxhY2Vob2xkZXIsLm1kYy10ZXh0LWZpZWxkLS1mb2N1c2VkIC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0OjpwbGFjZWhvbGRlcnt0cmFuc2l0aW9uLWRlbGF5OjQwbXM7dHJhbnNpdGlvbi1kdXJhdGlvbjoxMTBtc319QG1lZGlhIGFsbHsubWRjLXRleHQtZmllbGQtLW5vLWxhYmVsIC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGRfX2lucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciwubWRjLXRleHQtZmllbGQtLWZvY3VzZWQgLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZF9faW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb24tZGVsYXk6NDBtczt0cmFuc2l0aW9uLWR1cmF0aW9uOjExMG1zfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkX19hZmZpeHt0cmFuc2l0aW9uOm9wYWNpdHkgMTUwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkLm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLXRleHQtZmllbGRfX3JpcHBsZTo6YmVmb3JlLC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLWZpbGxlZDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtdGV4dC1maWVsZF9fcmlwcGxlOjpiZWZvcmV7dHJhbnNpdGlvbi1kdXJhdGlvbjo3NW1zfS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZCAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMCUpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAwJSkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTY2JXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjMwMjQzNSwgMC4zODEzNTIsIDAuNTUsIDAuOTU2MzUyKTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC00JSAtIDAlKSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS10ZXh0YXJlYXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0tdGV4dGFyZWEubWRjLXRleHQtZmllbGQtLWZpbGxlZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHRhcmVhLWZpbGxlZCAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHRhcmVhLWZpbGxlZHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTEwLjI1cHgpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDAlKSkgdHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMCUpKSB0cmFuc2xhdGVZKC0xMC4yNXB4KSBzY2FsZSgwLjc1KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMTAuMjVweCkgc2NhbGUoMC43NSl9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLXRleHRhcmVhLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZCAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHRhcmVhLW91dGxpbmVkIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dGFyZWEtb3V0bGluZWR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMCUpKSB0cmFuc2xhdGVZKC0yNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAwJSkpIHRyYW5zbGF0ZVkoLTI0Ljc1cHgpIHNjYWxlKDAuNzUpfTY2JXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjMwMjQzNSwgMC4zODEzNTIsIDAuNTUsIDAuOTU2MzUyKTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKC00JSAtIDAlKSkgdHJhbnNsYXRlWSgtMjQuNzVweCkgc2NhbGUoMC43NSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTI0Ljc1cHgpIHNjYWxlKDAuNzUpfX0ubWF0LW1kYy1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtbm8tYW5pbWF0aW9ucykgLm1kYy10ZXh0LWZpZWxkLS13aXRoLWxlYWRpbmctaWNvbi5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWQgLm1kYy1mbG9hdGluZy1sYWJlbC0tc2hha2V7YW5pbWF0aW9uOm1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS10ZXh0LWZpZWxkLW91dGxpbmVkLWxlYWRpbmctaWNvbiAyNTBtcyAxfUBrZXlmcmFtZXMgbWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWQtbGVhZGluZy1pY29uezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX0zMyV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC41LCAwLCAwLjcwMTczMiwgMC40OTU4MTkpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoNCUgLSAzMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfX1bZGlyPXJ0bF0gLm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtdGV4dC1maWVsZC0td2l0aC1sZWFkaW5nLWljb24ubWRjLXRleHQtZmllbGQtLW91dGxpbmVkIC5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtlLC5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLXRleHQtZmllbGQtLXdpdGgtbGVhZGluZy1pY29uLm1kYy10ZXh0LWZpZWxkLS1vdXRsaW5lZFtkaXI9cnRsXSAubWRjLWZsb2F0aW5nLWxhYmVsLS1zaGFrZXthbmltYXRpb246bWRjLWZsb2F0aW5nLWxhYmVsLXNoYWtlLWZsb2F0LWFib3ZlLXRleHQtZmllbGQtb3V0bGluZWQtbGVhZGluZy1pY29uIDI1MG1zIDF9QGtleWZyYW1lcyBtZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtdGV4dC1maWVsZC1vdXRsaW5lZC1sZWFkaW5nLWljb24tcnRsezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIC0zMnB4KSkgdHJhbnNsYXRlWSgtMzQuNzVweCkgc2NhbGUoMC43NSl9MzMle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNSwgMCwgMC43MDE3MzIsIDAuNDk1ODE5KTt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDQlIC0gLTMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX02NiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zMDI0MzUsIDAuMzgxMzUyLCAwLjU1LCAwLjk1NjM1Mik7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygtNCUgLSAtMzJweCkpIHRyYW5zbGF0ZVkoLTM0Ljc1cHgpIHNjYWxlKDAuNzUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYygwIC0gLTMycHgpKSB0cmFuc2xhdGVZKC0zNC43NXB4KSBzY2FsZSgwLjc1KX19Lm1hdC1tZGMtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLW5vLWFuaW1hdGlvbnMpIC5tZGMtZmxvYXRpbmctbGFiZWx7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMTUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxjb2xvciAxNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tZGMtZmxvYXRpbmctbGFiZWwtLXNoYWtle2FuaW1hdGlvbjptZGMtZmxvYXRpbmctbGFiZWwtc2hha2UtZmxvYXQtYWJvdmUtc3RhbmRhcmQgMjUwbXMgMX1Aa2V5ZnJhbWVzIG1kYy1mbG9hdGluZy1sYWJlbC1zaGFrZS1mbG9hdC1hYm92ZS1zdGFuZGFyZHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWChjYWxjKDAgLSAwJSkpIHRyYW5zbGF0ZVkoLTEwNiUpIHNjYWxlKDAuNzUpfTMzJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjUsIDAsIDAuNzAxNzMyLCAwLjQ5NTgxOSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoY2FsYyg0JSAtIDAlKSkgdHJhbnNsYXRlWSgtMTA2JSkgc2NhbGUoMC43NSl9NjYle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMzAyNDM1LCAwLjM4MTM1MiwgMC41NSwgMC45NTYzNTIpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoLTQlIC0gMCUpKSB0cmFuc2xhdGVZKC0xMDYlKSBzY2FsZSgwLjc1KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKGNhbGMoMCAtIDAlKSkgdHJhbnNsYXRlWSgtMTA2JSkgc2NhbGUoMC43NSl9fS5tYXQtbWRjLWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zKSAubWRjLWxpbmUtcmlwcGxlOjphZnRlcnt0cmFuc2l0aW9uOnRyYW5zZm9ybSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLG9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltwdmUudHJhbnNpdGlvbk1lc3NhZ2VzXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxFZj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sUGUsbmcsZm5dfSksbn0pKCksTzk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3JlbmRlcmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMub25DaGFuZ2U9cj0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9fXNldFByb3BlcnR5KGUsaSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGUsaSl9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhtYyksQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpufSksbn0pKCksVGY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE85e31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sZmVhdHVyZXM6W0tlXX0pLG59KSgpLE1vPW5ldyBpZSgiTmdWYWx1ZUFjY2Vzc29yIiksZ3ZlPXtwcm92aWRlOk1vLHVzZUV4aXN0aW5nOiRuKCgpPT5fdmUpLG11bHRpOiEwfSxfdmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFRme3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbUXQoW2d2ZV0pLEtlXX0pLG59KSgpLGJ2ZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+YmcpLG11bHRpOiEwfSx5dmU9bmV3IGllKCJDb21wb3NpdGlvbkV2ZW50TW9kZSIpLGJnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBPOXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9cix0aGlzLl9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbigpe2xldCBuPVRsKCk/VGwoKS5nZXRVc2VyQWdlbnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChuLnRvTG93ZXJDYXNlKCkpfSgpKX13cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9X2hhbmRsZUlucHV0KGUpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKGUpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChlKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG1jKSxDKE1lKSxDKHl2ZSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUlucHV0KG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9uc3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NvbXBvc2l0aW9uRW5kKG8udGFyZ2V0LnZhbHVlKX0pfSxmZWF0dXJlczpbUXQoW2J2ZV0pLEtlXX0pLG59KSgpLHh2ZT0hMTtmdW5jdGlvbiBWdShuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBrOShuKXtyZXR1cm4gbnVsbCE9biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aH12YXIgd289bmV3IGllKCJOZ1ZhbGlkYXRvcnMiKSxIdT1uZXcgaWUoIk5nQXN5bmNWYWxpZGF0b3JzIiksQ3ZlPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sVWw9Y2xhc3N7c3RhdGljIG1pbih0KXtyZXR1cm4gRjkodCl9c3RhdGljIG1heCh0KXtyZXR1cm4gTjkodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBMOSh0KX1zdGF0aWMgcmVxdWlyZWRUcnVlKHQpe3JldHVybiBCOSh0KX1zdGF0aWMgZW1haWwodCl7cmV0dXJuIFY5KHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIEg5KHQpfXN0YXRpYyBtYXhMZW5ndGgodCl7cmV0dXJuIHo5KHQpfXN0YXRpYyBwYXR0ZXJuKHQpe3JldHVybiBVOSh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gWDkodCl9c3RhdGljIGNvbXBvc2VBc3luYyh0KXtyZXR1cm4gUTkodCl9fTtmdW5jdGlvbiBGOShuKXtyZXR1cm4gdD0+e2lmKFZ1KHQudmFsdWUpfHxWdShuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gTjkobil7cmV0dXJuIHQ9PntpZihWdSh0LnZhbHVlKXx8VnUobikpcmV0dXJuIG51bGw7bGV0IGU9cGFyc2VGbG9hdCh0LnZhbHVlKTtyZXR1cm4haXNOYU4oZSkmJmU+bj97bWF4OnttYXg6bixhY3R1YWw6dC52YWx1ZX19Om51bGx9fWZ1bmN0aW9uIEw5KG4pe3JldHVybiBWdShuLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gQjkobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBWOShuKXtyZXR1cm4gVnUobi52YWx1ZSl8fEN2ZS50ZXN0KG4udmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiBIOShuKXtyZXR1cm4gdD0+VnUodC52YWx1ZSl8fCFrOSh0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHo5KG4pe3JldHVybiB0PT5rOSh0LnZhbHVlKSYmdC52YWx1ZS5sZW5ndGg+bj97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gVTkobil7aWYoIW4pcmV0dXJuIHRFO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihWdShpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiB0RShuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBqOShuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBHOShuKXtsZXQgdD1oaChuKT8kcihuKTpuO2lmKHh2ZSYmIURPKHQpKXtsZXQgZT0iRXhwZWN0ZWQgYXN5bmMgdmFsaWRhdG9yIHRvIHJldHVybiBQcm9taXNlIG9yIE9ic2VydmFibGUuIjt0aHJvdyJvYmplY3QiPT10eXBlb2YgbiYmKGUrPSIgQXJlIHlvdSB1c2luZyBhIHN5bmNocm9ub3VzIHZhbGlkYXRvciB3aGVyZSBhbiBhc3luYyB2YWxpZGF0b3IgaXMgZXhwZWN0ZWQ/IiksbmV3IHl0KC0xMTAxLGUpfXJldHVybiB0fWZ1bmN0aW9uIFc5KG4pe2xldCB0PXt9O3JldHVybiBuLmZvckVhY2goZT0+e3Q9bnVsbCE9ZT97Li4udCwuLi5lfTp0fSksMD09PU9iamVjdC5rZXlzKHQpLmxlbmd0aD9udWxsOnR9ZnVuY3Rpb24gcTkobix0KXtyZXR1cm4gdC5tYXAoZT0+ZShuKSl9ZnVuY3Rpb24gWTkobil7cmV0dXJuIG4ubWFwKHQ9PmZ1bmN0aW9uKG4pe3JldHVybiFuLnZhbGlkYXRlfSh0KT90OmU9PnQudmFsaWRhdGUoZSkpfWZ1bmN0aW9uIFg5KG4pe2lmKCFuKXJldHVybiBudWxsO2xldCB0PW4uZmlsdGVyKGo5KTtyZXR1cm4gMD09dC5sZW5ndGg/bnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gVzkocTkoZSx0KSl9fWZ1bmN0aW9uIHoyKG4pe3JldHVybiBudWxsIT1uP1g5KFk5KG4pKTpudWxsfWZ1bmN0aW9uIFE5KG4pe2lmKCFuKXJldHVybiBudWxsO2xldCB0PW4uZmlsdGVyKGo5KTtyZXR1cm4gMD09dC5sZW5ndGg/bnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gY28ocTkoZSx0KS5tYXAoRzkpKS5waXBlKE4oVzkpKX19ZnVuY3Rpb24gVTIobil7cmV0dXJuIG51bGwhPW4/UTkoWTkobikpOm51bGx9ZnVuY3Rpb24gRTkobix0KXtyZXR1cm4gbnVsbD09PW4/W3RdOkFycmF5LmlzQXJyYXkobik/Wy4uLm4sdF06W24sdF19ZnVuY3Rpb24gWjkobil7cmV0dXJuIG4uX3Jhd1ZhbGlkYXRvcnN9ZnVuY3Rpb24gSzkobil7cmV0dXJuIG4uX3Jhd0FzeW5jVmFsaWRhdG9yc31mdW5jdGlvbiBCMihuKXtyZXR1cm4gbj9BcnJheS5pc0FycmF5KG4pP246W25dOltdfWZ1bmN0aW9uIG5FKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5pbmNsdWRlcyh0KTpuPT09dH1mdW5jdGlvbiBUOShuLHQpe2xldCBlPUIyKHQpO3JldHVybiBCMihuKS5mb3JFYWNoKHI9PntuRShlLHIpfHxlLnB1c2gocil9KSxlfWZ1bmN0aW9uIEQ5KG4sdCl7cmV0dXJuIEIyKHQpLmZpbHRlcihlPT4hbkUobixlKSl9dmFyIGlFPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ejIodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVUyKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKHQpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19LFhvPWNsYXNzIGV4dGVuZHMgaUV7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX0sR3M9Y2xhc3MgZXh0ZW5kcyBpRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhpcy5uYW1lPW51bGwsdGhpcy52YWx1ZUFjY2Vzc29yPW51bGx9fSxWMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jZD10fWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5zdWJtaXR0ZWR9fSxjRT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVjJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoR3MsMikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm5nLXVudG91Y2hlZCIsaS5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGkuaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGkuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixpLmlzRGlydHkpKCJuZy12YWxpZCIsaS5pc1ZhbGlkKSgibmctaW52YWxpZCIsaS5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixpLmlzUGVuZGluZyl9LGZlYXR1cmVzOltLZV19KSxufSkoKTtmdW5jdGlvbiBKOShuLHQpe3JldHVybiBuP2B3aXRoIG5hbWU6ICcke3R9J2A6YGF0IGluZGV4OiAke3R9YH12YXIgSDI9ITEsWnY9IlZBTElEIixlRT0iSU5WQUxJRCIsX2c9IlBFTkRJTkciLEt2PSJESVNBQkxFRCI7ZnVuY3Rpb24gJDkobil7cmV0dXJuKGRFKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBlcShuLHQpe3JldHVybihkRSh0KT90LmFzeW5jVmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBkRShuKXtyZXR1cm4gbnVsbCE9biYmIUFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2Ygbn12YXIgckU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e30sdGhpcy5fcGFyZW50PW51bGwsdGhpcy5wcmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKHQpLHRoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhlKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcih0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49dH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcih0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXR9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09WnZ9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1lRX1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09X2d9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09S3Z9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1Ldn1nZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKHQpfXNldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnModCl9YWRkVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnMoVDkodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9YWRkQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKFQ5KHQsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnMoRDkodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKEQ5KHQsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9aGFzVmFsaWRhdG9yKHQpe3JldHVybiBuRSh0aGlzLl9yYXdWYWxpZGF0b3JzLHQpfWhhc0FzeW5jVmFsaWRhdG9yKHQpe3JldHVybiBuRSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMsdCl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD0hMCx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzVG91Y2hlZCh0KX1tYXJrQWxsQXNUb3VjaGVkKCl7dGhpcy5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjohMH0pLHRoaXMuX2ZvckVhY2hDaGlsZCh0PT50Lm1hcmtBbGxBc1RvdWNoZWQoKSl9bWFya0FzVW50b3VjaGVkKHQ9e30pe3RoaXMudG91Y2hlZD0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+e2UubWFya0FzVW50b3VjaGVkKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfW1hcmtBc0RpcnR5KHQ9e30pe3RoaXMucHJpc3RpbmU9ITEsdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc0RpcnR5KHQpfW1hcmtBc1ByaXN0aW5lKHQ9e30pe3RoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9bWFya0FzUGVuZGluZyh0PXt9KXt0aGlzLnN0YXR1cz1fZywhMSE9PXQuZW1pdEV2ZW50JiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcodCl9ZGlzYWJsZSh0PXt9KXtsZXQgZT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eSh0Lm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1Ldix0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5kaXNhYmxlKHsuLi50LG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMCkpfWVuYWJsZSh0PXt9KXtsZXQgZT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eSh0Lm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1adix0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kuZW5hYmxlKHsuLi50LG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4udCxza2lwUHJpc3RpbmVDaGVjazplfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGk9PmkoITEpKX1fdXBkYXRlQW5jZXN0b3JzKHQpe3RoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KSx0LnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudCh0KXt0aGlzLl9wYXJlbnQ9dH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodD17fSl7dGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1adnx8dGhpcy5zdGF0dXM9PT1fZykmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKHQuZW1pdEV2ZW50KSksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0KX1fdXBkYXRlVHJlZVZhbGlkaXR5KHQ9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChlPT5lLl91cGRhdGVUcmVlVmFsaWRpdHkodCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/S3Y6WnZ9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcih0KXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1fZyx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7bGV0IGU9RzkodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGk9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoaSx7ZW1pdEV2ZW50OnR9KX0pfX1fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEpfXNldEVycm9ycyh0LGU9e30pe3RoaXMuZXJyb3JzPXQsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1lLmVtaXRFdmVudCl9Z2V0KHQpe2xldCBlPXQ7cmV0dXJuIG51bGw9PWV8fChBcnJheS5pc0FycmF5KGUpfHwoZT1lLnNwbGl0KCIuIikpLDA9PT1lLmxlbmd0aCk/bnVsbDplLnJlZHVjZSgoaSxyKT0+aSYmaS5fZmluZChyKSx0aGlzKX1nZXRFcnJvcih0LGUpe2xldCBpPWU/dGhpcy5nZXQoZSk6dGhpcztyZXR1cm4gaSYmaS5lcnJvcnM/aS5lcnJvcnNbdF06bnVsbH1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5nZXRFcnJvcih0LGUpfWdldCByb290KCl7bGV0IHQ9dGhpcztmb3IoO3QuX3BhcmVudDspdD10Ll9wYXJlbnQ7cmV0dXJuIHR9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKHQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLHQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnModCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBGLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgRn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9Ldjp0aGlzLmVycm9ycz9lRTp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhfZyk/X2c6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGVFKT9lRTpadn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKHQpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhlPT5lLnN0YXR1cz09PXQpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKHQ9PnQuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUodCl9X3VwZGF0ZVRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPXR9X3NldFVwZGF0ZVN0cmF0ZWd5KHQpe2RFKHQpJiZudWxsIT10LnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249dC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KHQpe3JldHVybiF0JiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQodCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/ejIobik6bnx8bnVsbH0odGhpcy5fcmF3VmFsaWRhdG9ycyl9X2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheSh0KT90LnNsaWNlKCk6dCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/VTIobik6bnx8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19LG9FPWNsYXNzIGV4dGVuZHMgckV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCQ5KGUpLGVxKGksZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsaT17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDppLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUsaT17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbihuLHQsZSl7bi5fZm9yRWFjaENoaWxkKChpLHIpPT57aWYodm9pZCAwPT09ZVtyXSl0aHJvdyBuZXcgeXQoMTAwMixIMj9mdW5jdGlvbihuLHQpe3JldHVybmBNdXN0IHN1cHBseSBhIHZhbHVlIGZvciBmb3JtIGNvbnRyb2wgJHtKOShuLHQpfWB9KHQscik6IiIpfSl9KSh0aGlzLCEwLHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+eyhmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5jb250cm9scztpZighKHQ/T2JqZWN0LmtleXMoaSk6aSkubGVuZ3RoKXRocm93IG5ldyB5dCgxZTMsSDI/ZnVuY3Rpb24obil7cmV0dXJuYFxuICAgIFRoZXJlIGFyZSBubyBmb3JtIGNvbnRyb2xzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzICR7bj8iZ3JvdXAiOiJhcnJheSJ9IHlldC4gSWYgeW91J3JlIHVzaW5nIG5nTW9kZWwsXG4gICAgeW91IG1heSB3YW50IHRvIGNoZWNrIG5leHQgdGljayAoZS5nLiB1c2Ugc2V0VGltZW91dCkuXG4gIGB9KHQpOiIiKTtpZighaVtlXSl0aHJvdyBuZXcgeXQoMTAwMSxIMj9mdW5jdGlvbihuLHQpe3JldHVybmBDYW5ub3QgZmluZCBmb3JtIGNvbnRyb2wgJHtKOShuLHQpfWB9KHQsZSk6IiIpfSkodGhpcywhMCxpKSx0aGlzLmNvbnRyb2xzW2ldLnNldFZhbHVlKHRbaV0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXtudWxsIT10JiYoT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dGhpcy5jb250cm9sc1tpXTtyJiZyLnBhdGNoVmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSkpfXJlc2V0KHQ9e30sZT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKChpLHIpPT57aS5yZXNldCh0W3JdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMuX3VwZGF0ZVByaXN0aW5lKGUpLHRoaXMuX3VwZGF0ZVRvdWNoZWQoZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LCh0LGUsaSk9Pih0W2ldPWUuZ2V0UmF3VmFsdWUoKSx0KSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgdD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoZSxpKT0+ISFpLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fGUpO3JldHVybiB0JiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksdH1fZm9yRWFjaENoaWxkKHQpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goZT0+e2xldCBpPXRoaXMuY29udHJvbHNbZV07aSYmdChpLGUpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQodD0+e3Quc2V0UGFyZW50KHRoaXMpLHQuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKHQpe2ZvcihsZXRbZSxpXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udGFpbnMoZSkmJnQoaSkpcmV0dXJuITA7cmV0dXJuITF9X3JlZHVjZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LChlLGkscik9PigoaS5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKGVbcl09aS52YWx1ZSksZSkpfV9yZWR1Y2VDaGlsZHJlbih0LGUpe2xldCBpPXQ7cmV0dXJuIHRoaXMuX2ZvckVhY2hDaGlsZCgocixvKT0+e2k9ZShpLHIsbyl9KSxpfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGxldCB0IG9mIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udHJvbHNbdF0uZW5hYmxlZClyZXR1cm4hMTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X2ZpbmQodCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCk/dGhpcy5jb250cm9sc1t0XTpudWxsfX0sRGY9bmV3IGllKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmV5fSksZXk9ImFsd2F5cyI7ZnVuY3Rpb24gdUUobix0KXtyZXR1cm5bLi4udC5wYXRoLG5dfWZ1bmN0aW9uICR2KG4sdCxlPWV5KXtqMihuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLChuLmRpc2FibGVkfHwiYWx3YXlzIj09PWUpJiZ0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKG4uZGlzYWJsZWQpLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZT0+e24uX3BlbmRpbmdWYWx1ZT1lLG4uX3BlbmRpbmdDaGFuZ2U9ITAsbi5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09bi51cGRhdGVPbiYmdHEobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnRxKG4sdCksInN1Ym1pdCIhPT1uLnVwZGF0ZU9uJiZuLm1hcmtBc1RvdWNoZWQoKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7aWYodC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2xldCBlPWk9Pnt0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShpKX07bi5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKX0pfX0obix0KX1mdW5jdGlvbiBzRShuLHQsZT0hMCl7bGV0IGk9KCk9Pnt9O3QudmFsdWVBY2Nlc3NvciYmKHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGkpLHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChpKSksbEUobix0KSxuJiYodC5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksbi5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9ZnVuY3Rpb24gYUUobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpfSl9ZnVuY3Rpb24gajIobix0KXtsZXQgZT1aOShuKTtudWxsIT09dC52YWxpZGF0b3I/bi5zZXRWYWxpZGF0b3JzKEU5KGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9Szkobik7bnVsbCE9PXQuYXN5bmNWYWxpZGF0b3I/bi5zZXRBc3luY1ZhbGlkYXRvcnMoRTkoaSx0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4uc2V0QXN5bmNWYWxpZGF0b3JzKFtpXSk7bGV0IHI9KCk9Pm4udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO2FFKHQuX3Jhd1ZhbGlkYXRvcnMsciksYUUodC5fcmF3QXN5bmNWYWxpZGF0b3JzLHIpfWZ1bmN0aW9uIGxFKG4sdCl7bGV0IGU9ITE7aWYobnVsbCE9PW4pe2lmKG51bGwhPT10LnZhbGlkYXRvcil7bGV0IHI9Wjkobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9Szkobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQuYXN5bmNWYWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0QXN5bmNWYWxpZGF0b3JzKG8pKX19fWxldCBpPSgpPT57fTtyZXR1cm4gYUUodC5fcmF3VmFsaWRhdG9ycyxpKSxhRSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSksZX1mdW5jdGlvbiB0cShuLHQpe24uX3BlbmRpbmdEaXJ0eSYmbi5tYXJrQXNEaXJ0eSgpLG4uc2V0VmFsdWUobi5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSx0LnZpZXdUb01vZGVsVXBkYXRlKG4uX3BlbmRpbmdWYWx1ZSksbi5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBucShuLHQpe2oyKG4sdCl9ZnVuY3Rpb24gRzIobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24gaXEobix0KXtuLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksdC5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2w7InN1Ym1pdCI9PT1pLnVwZGF0ZU9uJiZpLl9wZW5kaW5nQ2hhbmdlJiYoZS52aWV3VG9Nb2RlbFVwZGF0ZShpLl9wZW5kaW5nVmFsdWUpLGkuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gVzIobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxpLHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKG89PntvLmNvbnN0cnVjdG9yPT09Ymc/ZT1vOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1UZn0obyk/aT1vOnI9b30pLHJ8fGl8fGV8fG51bGx9dmFyIFZ2ZT17cHJvdmlkZTpYbyx1c2VFeGlzdGluZzokbigoKT0+dmcpfSxKdj1Qcm9taXNlLnJlc29sdmUoKSx2Zz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWG97Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1yLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBGLHRoaXMuZm9ybT1uZXcgb0Uoe30sejIoZSksVTIoaSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woZSl7SnYudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9aS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksJHYoZS5jb250cm9sLGUsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksZS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGUpfSl9Z2V0Q29udHJvbChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXJlbW92ZUNvbnRyb2woZSl7SnYudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtpJiZpLnJlbW92ZUNvbnRyb2woZS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShlKX0pfWFkZEZvcm1Hcm91cChlKXtKdi50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpLHI9bmV3IG9FKHt9KTtucShyLGUpLGkucmVnaXN0ZXJDb250cm9sKGUubmFtZSxyKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGUpe0p2LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSl9KX1nZXRGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX11cGRhdGVNb2RlbChlLGkpe0p2LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGUucGF0aCkuc2V0VmFsdWUoaSl9KX1zZXRWYWx1ZShlKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZSl9b25TdWJtaXQoZSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGlxKHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGUpe3JldHVybiBlLnBvcCgpLGUubGVuZ3RoP3RoaXMuZm9ybS5nZXQoZSk6dGhpcy5mb3JtfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHdvLDEwKSxDKEh1LDEwKSxDKERmLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgic3VibWl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN1Ym1pdChvKX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOlsibmdGb3JtT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbUXQoW1Z2ZV0pLEtlXX0pLG59KSgpO2Z1bmN0aW9uIEk5KG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9ZnVuY3Rpb24gQTkobil7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmMj09PU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmInZhbHVlImluIG4mJiJkaXNhYmxlZCJpbiBufXZhciB0eT1jbGFzcyBleHRlbmRzIHJFe2NvbnN0cnVjdG9yKHQ9bnVsbCxlLGkpe3N1cGVyKCQ5KGUpLGVxKGksZSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxkRShlKSYmKGUubm9uTnVsbGFibGV8fGUuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPUE5KHQpP3QudmFsdWU6dCl9c2V0VmFsdWUodCxlPXt9KXt0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT1lLmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChpPT5pKHRoaXMudmFsdWUsITEhPT1lLmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1wYXRjaFZhbHVlKHQsZT17fSl7dGhpcy5zZXRWYWx1ZSh0LGUpfXJlc2V0KHQ9dGhpcy5kZWZhdWx0VmFsdWUsZT17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUodCksdGhpcy5tYXJrQXNQcmlzdGluZShlKSx0aGlzLm1hcmtBc1VudG91Y2hlZChlKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsZSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX1fdXBkYXRlVmFsdWUoKXt9X2FueUNvbnRyb2xzKHQpe3JldHVybiExfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR9cmVnaXN0ZXJPbkNoYW5nZSh0KXt0aGlzLl9vbkNoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25DaGFuZ2UodCl7STkodGhpcy5fb25DaGFuZ2UsdCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKHQpe3RoaXMuX29uRGlzYWJsZWRDaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7STkodGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe0E5KHQpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10LnZhbHVlLHQuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXR9fSxycT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWG97bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUdyb3VwKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUdyb3VwKHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtR3JvdXAodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdUUobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfV9jaGVja1BhcmVudFR5cGUoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixmZWF0dXJlczpbS2VdfSksbn0pKCksenZlPXtwcm92aWRlOlhvLHVzZUV4aXN0aW5nOiRuKCgpPT5VdmUpfSxVdmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJxe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfV9jaGVja1BhcmVudFR5cGUoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWG8sNSksQyh3bywxMCksQyhIdSwxMCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsR3JvdXAiLCIiXV0saW5wdXRzOntuYW1lOlsibmdNb2RlbEdyb3VwIiwibmFtZSJdfSxleHBvcnRBczpbIm5nTW9kZWxHcm91cCJdLGZlYXR1cmVzOltRdChbenZlXSksS2VdfSksbn0pKCksanZlPXtwcm92aWRlOkdzLHVzZUV4aXN0aW5nOiRuKCgpPT5xMil9LFI5PVByb21pc2UucmVzb2x2ZSgpLHEyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBHc3tjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9YSx0aGlzLmNvbnRyb2w9bmV3IHR5LHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEYsdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMociksdGhpcy52YWx1ZUFjY2Vzc29yPVcyKDAsbyl9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gZSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2xldCBpPWUubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmkscGF0aDp0aGlzLl9nZXRQYXRoKGkpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gZSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoZSksRzIoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpeyR2KHRoaXMuY29udHJvbCx0aGlzLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUoKXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFyZW50VHlwZSgpe31fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3VwZGF0ZVZhbHVlKGUpe1I5LnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X3VwZGF0ZURpc2FibGVkKGUpe2xldCBpPWUuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUscj0wIT09aSYmJE0oaSk7UjkudGhlbigoKT0+e3ImJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohciYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoZSl7cmV0dXJuIHRoaXMuX3BhcmVudD91RShlLHRoaXMuX3BhcmVudCk6W2VdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFhvLDkpLEMod28sMTApLEMoSHUsMTApLEMoTW8sMTApLEMoJHQsOCksQyhEZiw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlsibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltRdChbanZlXSksS2UsR3RdfSksbn0pKCksR3ZlPXtwcm92aWRlOk1vLHVzZUV4aXN0aW5nOiRuKCgpPT5ZMiksbXVsdGk6ITB9LFkyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZnt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntlKCIiPT1pP251bGw6cGFyc2VGbG9hdChpKSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W1F0KFtHdmVdKSxLZV19KSxufSkoKSxXdmU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9Pll2ZSksbXVsdGk6ITB9LG9xPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxxdmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoZSxpKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxpXSl9cmVtb3ZlKGUpe2ZvcihsZXQgaT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7aT49MDstLWkpaWYodGhpcy5fYWNjZXNzb3JzW2ldWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGksMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGk9Pnt0aGlzLl9pc1NhbWVHcm91cChpLGUpJiZpWzFdIT09ZSYmaVsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLGkpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1pLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PWkubmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46b3F9KSxufSkoKSxZdmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFRme2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9YWkoRGYse29wdGlvbmFsOiEwfSk/P2V5fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoR3MpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoZSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxlfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKG1jKSxDKE1lKSxDKHF2ZSksQyhNaSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbUXQoW1d2ZV0pLEtlXX0pLG59KSgpLFh2ZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+UXZlKSxtdWx0aTohMH0sUXZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZnt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbUXQoW1h2ZV0pLEtlXX0pLG59KSgpLFgyPW5ldyBpZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxadmU9e3Byb3ZpZGU6R3MsdXNlRXhpc3Rpbmc6JG4oKCk9PlEyKX0sUTI9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEdze3NldCBpc0Rpc2FibGVkKGUpe31jb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPXMsdGhpcy51cGRhdGU9bmV3IEYsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3NldFZhbGlkYXRvcnMoZSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGkpLHRoaXMudmFsdWVBY2Nlc3Nvcj1XMigwLHIpfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJnNFKGksdGhpcywhMSksJHYodGhpcy5mb3JtLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfUcyKGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5mb3JtLnNldFZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtJiZzRSh0aGlzLmZvcm0sdGhpcywhMSl9Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfV9pc0NvbnRyb2xDaGFuZ2VkKGUpe3JldHVybiBlLmhhc093blByb3BlcnR5KCJmb3JtIil9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh3bywxMCksQyhIdSwxMCksQyhNbywxMCksQyhYMiw4KSxDKERmLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntmb3JtOlsiZm9ybUNvbnRyb2wiLCJmb3JtIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W1F0KFtadmVdKSxLZSxHdF19KSxufSkoKSxLdmU9e3Byb3ZpZGU6WG8sdXNlRXhpc3Rpbmc6JG4oKCk9PnlnKX0seWc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFhve2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9cix0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9PnRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5kaXJlY3RpdmVzPVtdLHRoaXMuZm9ybT1udWxsLHRoaXMubmdTdWJtaXQ9bmV3IEYsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSl9bmdPbkNoYW5nZXMoZSl7dGhpcy5fY2hlY2tGb3JtUHJlc2VudCgpLGUuaGFzT3duUHJvcGVydHkoImZvcm0iKSYmKHRoaXMuX3VwZGF0ZVZhbGlkYXRvcnMoKSx0aGlzLl91cGRhdGVEb21WYWx1ZSgpLHRoaXMuX3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKSx0aGlzLl9vbGRGb3JtPXRoaXMuZm9ybSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm0mJihsRSh0aGlzLmZvcm0sdGhpcyksdGhpcy5mb3JtLl9vbkNvbGxlY3Rpb25DaGFuZ2U9PT10aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UmJnRoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1hZGRDb250cm9sKGUpe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtyZXR1cm4gJHYoaSxlLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtzRShlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxpcSh0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2wscj10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSE9PXImJihzRShpfHxudWxsLGUpLChuPT5uIGluc3RhbmNlb2YgdHkpKHIpJiYoJHYocixlLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGUuY29udHJvbD1yKSl9KSx0aGlzLmZvcm0uX3VwZGF0ZVRyZWVWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X3NldFVwRm9ybUNvbnRhaW5lcihlKXtsZXQgaT10aGlzLmZvcm0uZ2V0KGUucGF0aCk7bnEoaSxlKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jbGVhblVwRm9ybUNvbnRhaW5lcihlKXtpZih0aGlzLmZvcm0pe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtpJiZmdW5jdGlvbihuLHQpe3JldHVybiBsRShuLHQpfShpLGUpJiZpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfX1fdXBkYXRlUmVnaXN0cmF0aW9ucygpe3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSx0aGlzLl9vbGRGb3JtJiZ0aGlzLl9vbGRGb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pfV91cGRhdGVWYWxpZGF0b3JzKCl7ajIodGhpcy5mb3JtLHRoaXMpLHRoaXMuX29sZEZvcm0mJmxFKHRoaXMuX29sZEZvcm0sdGhpcyl9X2NoZWNrRm9ybVByZXNlbnQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMod28sMTApLEMoSHUsMTApLEMoRGYsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXAiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e2Zvcm06WyJmb3JtR3JvdXAiLCJmb3JtIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W1F0KFtLdmVdKSxLZSxHdF19KSxufSkoKSxKdmU9e3Byb3ZpZGU6WG8sdXNlRXhpc3Rpbmc6JG4oKCk9PnNxKX0sc3E9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJxe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfV9jaGVja1BhcmVudFR5cGUoKXtscSh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFhvLDEzKSxDKHdvLDEwKSxDKEh1LDEwKSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUdyb3VwTmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6W1F0KFtKdmVdKSxLZV19KSxufSkoKSwkdmU9e3Byb3ZpZGU6WG8sdXNlRXhpc3Rpbmc6JG4oKCk9PmFxKX0sYXE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFhve2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfW5nT25Jbml0KCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5mb3JtRGlyZWN0aXZlLmFkZEZvcm1BcnJheSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUZvcm1BcnJheSh0aGlzKX1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm1EaXJlY3RpdmUuZ2V0Rm9ybUFycmF5KHRoaXMpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfWdldCBwYXRoKCl7cmV0dXJuIHVFKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1fY2hlY2tQYXJlbnRUeXBlKCl7bHEodGhpcy5fcGFyZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhYbywxMyksQyh3bywxMCksQyhIdSwxMCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQXJyYXlOYW1lIiwiIl1dLGlucHV0czp7bmFtZTpbImZvcm1BcnJheU5hbWUiLCJuYW1lIl19LGZlYXR1cmVzOltRdChbJHZlXSksS2VdfSksbn0pKCk7ZnVuY3Rpb24gbHEobil7cmV0dXJuIShuIGluc3RhbmNlb2Ygc3F8fG4gaW5zdGFuY2VvZiB5Z3x8biBpbnN0YW5jZW9mIGFxKX12YXIgZXllPXtwcm92aWRlOkdzLHVzZUV4aXN0aW5nOiRuKCgpPT50eWUpfSx0eWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEdze3NldCBpc0Rpc2FibGVkKGUpe31jb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9cyx0aGlzLl9hZGRlZD0hMSx0aGlzLnVwZGF0ZT1uZXcgRix0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMociksdGhpcy52YWx1ZUFjY2Vzc29yPVcyKDAsbyl9bmdPbkNoYW5nZXMoZSl7dGhpcy5fYWRkZWR8fHRoaXMuX3NldFVwQ29udHJvbCgpLEcyKGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCx0aGlzLmZvcm1EaXJlY3RpdmUudXBkYXRlTW9kZWwodGhpcyx0aGlzLm1vZGVsKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1nZXQgcGF0aCgpe3JldHVybiB1RShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe31fc2V0VXBDb250cm9sKCl7dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5jb250cm9sPXRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX2FkZGVkPSEwfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoWG8sMTMpLEMod28sMTApLEMoSHUsMTApLEMoTW8sMTApLEMoWDIsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUNvbnRyb2xOYW1lIiwibmFtZSJdLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxmZWF0dXJlczpbUXQoW2V5ZV0pLEtlLEd0XX0pLG59KSgpLG55ZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+ZHEpLG11bHRpOiEwfTtmdW5jdGlvbiBjcShuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDoodCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgZHE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFRme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWU7bGV0IHI9Y3EodGhpcy5fZ2V0T3B0aW9uSWQoZSksZSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHIpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShpKSxlKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGUpe2ZvcihsZXQgaSBvZiBBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoaSksZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltRdChbbnllXSksS2VdfSksbn0pKCksdXE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKCkpfXNldCBuZ1ZhbHVlKGUpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLnNldCh0aGlzLmlkLGUpLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShjcSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKG1jKSxDKGRxLDkpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSxufSkoKSxyeWU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9PnBxKSxtdWx0aTohMH07ZnVuY3Rpb24gUDkobix0KXtyZXR1cm4gbnVsbD09bj9gJHt0fWA6KCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9YCcke3R9J2ApLHQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Ik9iamVjdCIpLGAke259OiAke3R9YC5zbGljZSgwLDUwKSl9dmFyIHBxPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lfXdyaXRlVmFsdWUoZSl7bGV0IGk7aWYodGhpcy52YWx1ZT1lLEFycmF5LmlzQXJyYXkoZSkpe2xldCByPWUubWFwKG89PnRoaXMuX2dldE9wdGlvbklkKG8pKTtpPShvLHMpPT57by5fc2V0U2VsZWN0ZWQoci5pbmRleE9mKHMudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGk9KHIsbyk9PntyLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57bGV0IHI9W10sbz1pLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1vKXtsZXQgcz1vO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgYz10aGlzLl9nZXRPcHRpb25WYWx1ZShzW2FdLnZhbHVlKTtyLnB1c2goYyl9fWVsc2V7bGV0IHM9aS5vcHRpb25zO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgbD1zW2FdO2lmKGwuc2VsZWN0ZWQpe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKGwudmFsdWUpO3IucHVzaChjKX19fXRoaXMudmFsdWU9cixlKHIpfX1fcmVnaXN0ZXJPcHRpb24oZSl7bGV0IGk9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGksZSksaX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWUsZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSkuX3ZhbHVlOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbUXQoW3J5ZV0pLEtlXX0pLG59KSgpLGZxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1pLHRoaXMuX3NlbGVjdD1yLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbih0aGlzKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fdmFsdWU9ZSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoUDkodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGUpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9ZSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoUDkodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9X3NldFNlbGVjdGVkKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKG1jKSxDKHBxLDkpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSxufSkoKTtmdW5jdGlvbiBtcShuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4/bjpwYXJzZUludChuLDEwKX1mdW5jdGlvbiBocShuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4/bjpwYXJzZUZsb2F0KG4pfXZhciBJZj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPXRFfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuaW5wdXROYW1lIGluIGUpe2xldCBpPXRoaXMubm9ybWFsaXplSW5wdXQoZVt0aGlzLmlucHV0TmFtZV0uY3VycmVudFZhbHVlKTt0aGlzLl9lbmFibGVkPXRoaXMuZW5hYmxlZChpKSx0aGlzLl92YWxpZGF0b3I9dGhpcy5fZW5hYmxlZD90aGlzLmNyZWF0ZVZhbGlkYXRvcihpKTp0RSx0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX19dmFsaWRhdGUoZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcihlKX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9ZW5hYmxlZChlKXtyZXR1cm4gbnVsbCE9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sZmVhdHVyZXM6W0d0XX0pLG59KSgpLHN5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+YXllKSxtdWx0aTohMH0sYXllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5ocShlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5OOShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtYXgiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtYXgiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgibWF4IixpLl9lbmFibGVkP2kubWF4Om51bGwpfSxpbnB1dHM6e21heDoibWF4In0sZmVhdHVyZXM6W1F0KFtzeWVdKSxLZV19KSxufSkoKSxseWU9e3Byb3ZpZGU6d28sdXNlRXhpc3Rpbmc6JG4oKCk9PmN5ZSksbXVsdGk6ITB9LGN5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+aHEoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+RjkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoIm1pbiIsaS5fZW5hYmxlZD9pLm1pbjpudWxsKX0saW5wdXRzOnttaW46Im1pbiJ9LGZlYXR1cmVzOltRdChbbHllXSksS2VdfSksbn0pKCksZHllPXtwcm92aWRlOndvLHVzZUV4aXN0aW5nOiRuKCgpPT5ncSksbXVsdGk6ITB9LHV5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+WjIpLG11bHRpOiEwfSxncT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD0kTSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5MOX1lbmFibGVkKGUpe3JldHVybiBlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJyZXF1aXJlZCIsaS5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJlZDoicmVxdWlyZWQifSxmZWF0dXJlczpbUXQoW2R5ZV0pLEtlXX0pLG59KSgpLFoyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBncXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+Qjl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxmZWF0dXJlczpbUXQoW3V5ZV0pLEtlXX0pLG59KSgpLHB5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+ZnllKSxtdWx0aTohMH0sZnllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9ImVtYWlsIix0aGlzLm5vcm1hbGl6ZUlucHV0PSRNLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PlY5fWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsImVtYWlsIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsImVtYWlsIiwiIiwibmdNb2RlbCIsIiJdXSxpbnB1dHM6e2VtYWlsOiJlbWFpbCJ9LGZlYXR1cmVzOltRdChbcHllXSksS2VdfSksbn0pKCksbXllPXtwcm92aWRlOndvLHVzZUV4aXN0aW5nOiRuKCgpPT5oeWUpLG11bHRpOiEwfSxoeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIElme2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWlubGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pm1xKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pkg5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1pbmxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1pbmxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJtaW5sZW5ndGgiLGkuX2VuYWJsZWQ/aS5taW5sZW5ndGg6bnVsbCl9LGlucHV0czp7bWlubGVuZ3RoOiJtaW5sZW5ndGgifSxmZWF0dXJlczpbUXQoW215ZV0pLEtlXX0pLG59KSgpLGd5ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+X3llKSxtdWx0aTohMH0sX3llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJZntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heGxlbmd0aCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5tcShlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT56OShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXhsZW5ndGgiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJtYXhsZW5ndGgiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZCZSgibWF4bGVuZ3RoIixpLl9lbmFibGVkP2kubWF4bGVuZ3RoOm51bGwpfSxpbnB1dHM6e21heGxlbmd0aDoibWF4bGVuZ3RoIn0sZmVhdHVyZXM6W1F0KFtneWVdKSxLZV19KSxufSkoKSxieWU9e3Byb3ZpZGU6d28sdXNlRXhpc3Rpbmc6JG4oKCk9PnZ5ZSksbXVsdGk6ITB9LHZ5ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWZ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJwYXR0ZXJuIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PmUsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+VTkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmQmUoInBhdHRlcm4iLGkuX2VuYWJsZWQ/aS5wYXR0ZXJuOm51bGwpfSxpbnB1dHM6e3BhdHRlcm46InBhdHRlcm4ifSxmZWF0dXJlczpbUXQoW2J5ZV0pLEtlXX0pLG59KSgpLF9xPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltvcV19KSxufSkoKSx4Zz0obmV3IHlsKCIxNS4yLjkiKSwoKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6RGYsdXNlVmFsdWU6ZS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/ZXl9XX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltfcV19KSxufSkoKSksYnE9KCgpPT57Y2xhc3MgbntzdGF0aWMgd2l0aENvbmZpZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOlgyLHVzZVZhbHVlOmUud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOkRmLHVzZVZhbHVlOmUuY2FsbFNldERpc2FibGVkU3RhdGU/P2V5fV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbX3FdfSksbn0pKCkseXllPVsidHJpZ2dlciJdLHh5ZT1bInBhbmVsIl07ZnVuY3Rpb24gQ3llKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxMCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksYnQoZS5wbGFjZWhvbGRlcil9fWZ1bmN0aW9uIE15ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTQpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxidChlLnRyaWdnZXJWYWx1ZSl9fWZ1bmN0aW9uIHd5ZShuLHQpezEmbiYmenQoMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gU3llKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiwxMSksUygxLE15ZSwyLDEsInNwYW4iLDEyKSxTKDIsd3llLDEsMCwibmctY29udGVudCIsMTMpLGcoKSksMiZuJiYoXygibmdTd2l0Y2giLCEhdygpLmN1c3RvbVRyaWdnZXIpLHYoMiksXygibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIEV5ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtObigpLE9vKCksaCgwLCJkaXYiLDE1LDE2KSxJKCJAdHJhbnNmb3JtUGFuZWwuZG9uZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KHIudG9TdGF0ZSkpfSkoImtleWRvd24iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9oYW5kbGVLZXlkb3duKHIpKX0pLHp0KDIsMSksZygpfWlmKDImbil7bGV0IGU9dygpO21iKCJtYXQtbWRjLXNlbGVjdC1wYW5lbCBtZGMtbWVudS1zdXJmYWNlIG1kYy1tZW51LXN1cmZhY2UtLW9wZW4gIixlLl9nZXRQYW5lbFRoZW1lKCksIiIpLF8oIm5nQ2xhc3MiLGUucGFuZWxDbGFzcykoIkB0cmFuc2Zvcm1QYW5lbCIsInNob3dpbmciKSxCZSgiaWQiLGUuaWQrIi1wYW5lbCIpKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsZS5tdWx0aXBsZSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCkpfX12YXIgVHllPVtbWyJtYXQtc2VsZWN0LXRyaWdnZXIiXV0sIioiXSxEeWU9WyJtYXQtc2VsZWN0LXRyaWdnZXIiLCIqIl0sSXllPXt0cmFuc2Zvcm1QYW5lbFdyYXA6X3IoInRyYW5zZm9ybVBhbmVsV3JhcCIsW2dpKCIqID0+IHZvaWQiLEpwKCJAdHJhbnNmb3JtUGFuZWwiLFtLcCgpXSx7b3B0aW9uYWw6ITB9KSldKSx0cmFuc2Zvcm1QYW5lbDpfcigidHJhbnNmb3JtUGFuZWwiLFt3aSgidm9pZCIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDEsIDAuOCkifSkpLGdpKCJ2b2lkID0+IHNob3dpbmciLENpKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEsIDEpIn0pKSksZ2koIiogPT4gdm9pZCIsQ2koIjEwMG1zIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKSldKX0sdnE9MCx5cT1uZXcgaWUoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksUnllPW5ldyBpZSgiTUFUX1NFTEVDVF9DT05GSUciKSxQeWU9e3Byb3ZpZGU6eXEsZGVwczpbemldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxPeWU9bmV3IGllKCJNYXRTZWxlY3RUcmlnZ2VyIiksa3llPXVzKGt1KHNvKEIxKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBJZX19KSkpKSxGeWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGt5ZXtnZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVWwucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9UnQoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9UnQoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVJ0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1faShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYsbSxiKXtzdXBlcihzLG8sbCxjLHUpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD1kLHRoaXMuX2xpdmVBbm5vdW5jZXI9bSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1iLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oTSx5KT0+TT09PXksdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrdnErKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBJZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrdnErKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IEllLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9dGEoKCk9PntsZXQgTT10aGlzLm9wdGlvbnM7cmV0dXJuIE0/TS5jaGFuZ2VzLnBpcGUocW4oTSksSm4oKCk9PnRuKC4uLk0ubWFwKHk9Pnkub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFl0KDEpLEpuKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBGLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKGtlKE09Pk0pLE4oKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoa2UoTT0+IU0pLE4oKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEYsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRix0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9Yj8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9Yi50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9Zix0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBkZyh0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUoWW4oKSxvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pbml0S2V5TWFuYWdlcigpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGU9PntlLmFkZGVkLmZvckVhY2goaT0+aS5zZWxlY3QoKSksZS5yZW1vdmVkLmZvckVhY2goaT0+aS5kZXNlbGVjdCgpKX0pLHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUocW4obnVsbCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pfW5nRG9DaGVjaygpe2xldCBlPXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpLGk9dGhpcy5uZ0NvbnRyb2w7aWYoZSE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT1lLGU/ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSk6ci5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfWkmJih0aGlzLl9wcmV2aW91c0NvbnRyb2whPT1pLmNvbnRyb2wmJih2b2lkIDAhPT10aGlzLl9wcmV2aW91c0NvbnRyb2wmJm51bGwhPT1pLmRpc2FibGVkJiZpLmRpc2FibGVkIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9aS5kaXNhYmxlZCksdGhpcy5fcHJldmlvdXNDb250cm9sPWkuY29udHJvbCksdGhpcy51cGRhdGVFcnJvclN0YXRlKCkpfW5nT25DaGFuZ2VzKGUpeyhlLmRpc2FibGVkfHxlLnVzZXJBcmlhRGVzY3JpYmVkQnkpJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksZS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWkscz10aGlzLl9rZXlNYW5hZ2VyO2lmKCFzLmlzVHlwaW5nKCkmJm8mJiF2cihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IGE9dGhpcy5zZWxlY3RlZDtzLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJmEhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIscz1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKHN8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHx2cihlKSlpZighcyYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGE9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KGE/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgYT1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PWEmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX2tleU1hbmFnZXI/LmNhbmNlbFR5cGVhaGVhZCgpLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKFl0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMub3B0aW9ucy5mb3JFYWNoKGk9Pmkuc2V0SW5hY3RpdmVTdHlsZXMoKSksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLm11bHRpcGxlJiZlKUFycmF5LmlzQXJyYXkoZSksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoaSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2xldCBpPXRoaXMuX3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSk7aT90aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oaSk6dGhpcy5wYW5lbE9wZW58fHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgtMSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X3NlbGVjdE9wdGlvbkJ5VmFsdWUoZSl7bGV0IGk9dGhpcy5vcHRpb25zLmZpbmQocj0+e2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQocikpcmV0dXJuITE7dHJ5e3JldHVybiBudWxsIT1yLnZhbHVlJiZ0aGlzLl9jb21wYXJlV2l0aChyLnZhbHVlLGUpfWNhdGNoe3JldHVybiExfX0pO3JldHVybiBpJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaSksaX1fYXNzaWduVmFsdWUoZSl7cmV0dXJuISEoZSE9PXRoaXMuX3ZhbHVlfHx0aGlzLl9tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShlKSkmJih0aGlzLm9wdGlvbnMmJnRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy5fdmFsdWU9ZSwhMCl9X2luaXRLZXlNYW5hZ2VyKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgb2codGhpcy5vcHRpb25zKS53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKCkud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9pc1J0bCgpPyJydGwiOiJsdHIiKS53aXRoSG9tZUFuZEVuZCgpLndpdGhQYWdlVXBEb3duKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXRuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHRuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9vblNlbGVjdChlLGkpe2xldCByPXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSk7bnVsbCE9ZS52YWx1ZXx8dGhpcy5fbXVsdGlwbGU/KHIhPT1lLnNlbGVjdGVkJiYoZS5zZWxlY3RlZD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZSkpLGkmJnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShlKSx0aGlzLm11bHRpcGxlJiYodGhpcy5fc29ydFZhbHVlcygpLGkmJnRoaXMuZm9jdXMoKSkpOihlLmRlc2VsZWN0KCksdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSxudWxsIT10aGlzLnZhbHVlJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKGUudmFsdWUpKSxyIT09dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1fc29ydFZhbHVlcygpe2lmKHRoaXMubXVsdGlwbGUpe2xldCBlPXRoaXMub3B0aW9ucy50b0FycmF5KCk7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc29ydCgoaSxyKT0+dGhpcy5zb3J0Q29tcGFyYXRvcj90aGlzLnNvcnRDb21wYXJhdG9yKGkscixlKTplLmluZGV4T2YoaSktZS5pbmRleE9mKHIpKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9fV9wcm9wYWdhdGVDaGFuZ2VzKGUpe2xldCBpPW51bGw7aT10aGlzLm11bHRpcGxlP3RoaXMuc2VsZWN0ZWQubWFwKHI9PnIudmFsdWUpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTplLHRoaXMuX3ZhbHVlPWksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGkpLHRoaXMuX29uQ2hhbmdlKGkpLHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fZ2V0Q2hhbmdlRXZlbnQoaSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCl7dGhpcy5fa2V5TWFuYWdlciYmKHRoaXMuZW1wdHk/dGhpcy5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0pKX1fY2FuT3Blbigpe3JldHVybiF0aGlzLl9wYW5lbE9wZW4mJiF0aGlzLmRpc2FibGVkJiZ0aGlzLm9wdGlvbnM/Lmxlbmd0aD4wfWZvY3VzKGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X2dldEFyaWFBY3RpdmVEZXNjZW5kYW50KCl7cmV0dXJuIHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLmlkOm51bGx9X2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpe2lmKHRoaXMuYXJpYUxhYmVsKXJldHVybiBudWxsO2xldCBlPXRoaXMuX3BhcmVudEZvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpLGk9KGU/ZSsiICI6IiIpK3RoaXMuX3ZhbHVlSWQ7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnkmJihpKz0iICIrdGhpcy5hcmlhTGFiZWxsZWRieSksaX1fcGFuZWxEb25lQW5pbWF0aW5nKGUpe3RoaXMub3BlbmVkQ2hhbmdlLmVtaXQoZSl9c2V0RGVzY3JpYmVkQnlJZHMoZSl7ZS5sZW5ndGg/dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZS5qb2luKCIgIikpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiKX1vbkNvbnRhaW5lckNsaWNrKCl7dGhpcy5mb2N1cygpLHRoaXMub3BlbigpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuX2ZvY3VzZWQmJiEhdGhpcy5fcGxhY2Vob2xkZXJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoanMpLEMoJHQpLEMoYXQpLEMoSDEpLEMoTWUpLEMoWGksOCksQyh2Zyw4KSxDKHlnLDgpLEMoU2YsOCksQyhHcywxMCkseW8oInRhYmluZGV4IiksQyh5cSksQyhWdiksQyhSeWUsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKHl5ZSw1KSxHZSh4eWUsNSksR2UoQnUsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkudHJpZ2dlcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5fb3ZlcmxheURpcj1yLmZpcnN0KX19LGlucHV0czp7dXNlckFyaWFEZXNjcmliZWRCeTpbImFyaWEtZGVzY3JpYmVkYnkiLCJ1c2VyQXJpYURlc2NyaWJlZEJ5Il0scGFuZWxDbGFzczoicGFuZWxDbGFzcyIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixyZXF1aXJlZDoicmVxdWlyZWQiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZU9wdGlvbkNlbnRlcmluZzoiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsY29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIix2YWx1ZToidmFsdWUiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix0eXBlYWhlYWREZWJvdW5jZUludGVydmFsOiJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIixzb3J0Q29tcGFyYXRvcjoic29ydENvbXBhcmF0b3IiLGlkOiJpZCJ9LG91dHB1dHM6e29wZW5lZENoYW5nZToib3BlbmVkQ2hhbmdlIixfb3BlbmVkU3RyZWFtOiJvcGVuZWQiLF9jbG9zZWRTdHJlYW06ImNsb3NlZCIsc2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltLZSxHdF19KSxufSkoKSx6dT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnlle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wb3NpdGlvbnM9W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJ0b3AifSx7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOiJtYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSJ9XSx0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPz8hMX1nZXQgc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLnBhbmVsT3Blbnx8IXRoaXMuZW1wdHl8fHRoaXMuZm9jdXNlZCYmISF0aGlzLnBsYWNlaG9sZGVyfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFuZWxPcGVuJiYodGhpcy5fb3ZlcmxheVdpZHRoPXRoaXMuX2dldE92ZXJsYXlXaWR0aCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wYXJlbnRGb3JtRmllbGQmJih0aGlzLl9wcmVmZXJyZWRPdmVybGF5T3JpZ2luPXRoaXMuX3BhcmVudEZvcm1GaWVsZC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCkpfW9wZW4oKXt0aGlzLl9vdmVybGF5V2lkdGg9dGhpcy5fZ2V0T3ZlcmxheVdpZHRoKCksc3VwZXIub3BlbigpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1jbG9zZSgpe3N1cGVyLmNsb3NlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zY3JvbGxPcHRpb25JbnRvVmlldyhlKXtsZXQgaT10aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKGkpe2xldCByPXRoaXMucGFuZWwubmF0aXZlRWxlbWVudCxvPXoxKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxzPWkuX2dldEhvc3RFbGVtZW50KCk7ci5zY3JvbGxUb3A9MD09PWUmJjE9PT1vPzA6VTEocy5vZmZzZXRUb3Ascy5vZmZzZXRIZWlnaHQsci5zY3JvbGxUb3Asci5vZmZzZXRIZWlnaHQpfX1fcG9zaXRpb25pbmdTZXR0bGVkKCl7dGhpcy5fc2Nyb2xsT3B0aW9uSW50b1ZpZXcodGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXh8fDApfV9nZXRDaGFuZ2VFdmVudChlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSh0aGlzLGUpfV9nZXRPdmVybGF5V2lkdGgoKXtyZXR1cm4odGhpcy5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbiBpbnN0YW5jZW9mIHdkP3RoaXMuX3ByZWZlcnJlZE92ZXJsYXlPcmlnaW4uZWxlbWVudFJlZjp0aGlzLl9wcmVmZXJyZWRPdmVybGF5T3JpZ2lufHx0aGlzLl9lbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofWdldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKCl7cmV0dXJuIHRoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3J9c2V0IGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IoZSl7dGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj1SdChlKSx0aGlzLl9zeW5jUGFyZW50UHJvcGVydGllcygpfV9zeW5jUGFyZW50UHJvcGVydGllcygpe2lmKHRoaXMub3B0aW9ucylmb3IobGV0IGUgb2YgdGhpcy5vcHRpb25zKWUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoVGkocixPeWUsNSksVGkocixVcyw1KSxUaShyLFV2LDUpKSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksU2Uobz1FZSgpKSYmKGkub3B0aW9ucz1vKSxTZShvPUVlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwibGlzdGJveCIsMSwibWF0LW1kYy1zZWxlY3QiXSxob3N0VmFyczoxOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSwyJmUmJihCZSgiaWQiLGkuaWQpKCJ0YWJpbmRleCIsaS50YWJJbmRleCkoImFyaWEtY29udHJvbHMiLGkucGFuZWxPcGVuP2kuaWQrIi1wYW5lbCI6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGkucGFuZWxPcGVuKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkLnRvU3RyaW5nKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJhcmlhLWludmFsaWQiLGkuZXJyb3JTdGF0ZSkoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKSksbnQoIm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LW1kYy1zZWxlY3QtcmVxdWlyZWQiLGkucmVxdWlyZWQpKCJtYXQtbWRjLXNlbGVjdC1lbXB0eSIsaS5lbXB0eSkoIm1hdC1tZGMtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgiLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6UXYsdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6enYsdXNlRXhpc3Rpbmc6bn1dKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOkR5ZSxkZWNsczoxMSx2YXJzOjExLGNvbnN0czpbWyJjZGstb3ZlcmxheS1vcmlnaW4iLCIiLDEsIm1hdC1tZGMtc2VsZWN0LXRyaWdnZXIiLDMsImNsaWNrIl0sWyJmYWxsYmFja092ZXJsYXlPcmlnaW4iLCJjZGtPdmVybGF5T3JpZ2luIiwidHJpZ2dlciIsIiJdLFsxLCJtYXQtbWRjLXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXIgbWF0LW1kYy1zZWxlY3QtbWluLWxpbmUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtbWRjLXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXIiXSxbMSwibWF0LW1kYy1zZWxlY3QtYXJyb3ciXSxbInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJoZWlnaHQiLCIyNHB4IiwiZm9jdXNhYmxlIiwiZmFsc2UiXSxbImQiLCJNNyAxMGw1IDUgNS01eiJdLFsiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsIiIsImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AiLDMsImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsImJhY2tkcm9wQ2xpY2siLCJhdHRhY2giLCJkZXRhY2giXSxbMSwibWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSJdLFsxLCJtYXQtbWRjLXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtbWRjLXNlbGVjdC1taW4tbGluZSJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihEbihUeWUpLGgoMCwiZGl2IiwwLDEpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksaCgzLCJkaXYiLDIpLFMoNCxDeWUsMiwxLCJzcGFuIiwzKSxTKDUsU3llLDMsMiwic3BhbiIsNCksZygpLGgoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpLE5uKCksaCg4LCJzdmciLDcpLFAoOSwicGF0aCIsOCksZygpKCkoKSgpLFMoMTAsRXllLDMsOSwibmctdGVtcGxhdGUiLDkpLEkoImJhY2tkcm9wQ2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2UoKX0pKCJhdHRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQXR0YWNoZWQoKX0pKCJkZXRhY2giLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xvc2UoKX0pKSwyJmUpe2xldCByPWl0KDEpO0JlKCJhcmlhLW93bnMiLGkucGFuZWxPcGVuP2kuaWQrIi1wYW5lbCI6bnVsbCksdigzKSxfKCJuZ1N3aXRjaCIsaS5lbXB0eSksQmUoImlkIixpLl92YWx1ZUlkKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsITApLHYoMSksXygibmdTd2l0Y2hDYXNlIiwhMSksdig1KSxfKCJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsaS5fb3ZlcmxheVBhbmVsQ2xhc3MpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLGkuX3Njcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsaS5fcHJlZmVycmVkT3ZlcmxheU9yaWdpbnx8cikoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnBhbmVsT3BlbikoImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLGkuX3Bvc2l0aW9ucykoImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsaS5fb3ZlcmxheVdpZHRoKX19LGRlcGVuZGVuY2llczpbeW4sc3IsU3IsdXUsQnUsd2RdLHN0eWxlczpbJy5tZGMtbWVudS1zdXJmYWNle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOmNhbGMoMTAwdncgLSAzMnB4KTttYXgtd2lkdGg6dmFyKC0tbWRjLW1lbnUtbWF4LXdpZHRoLCBjYWxjKDEwMHZ3IC0gMzJweCkpO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDMycHgpO21heC1oZWlnaHQ6dmFyKC0tbWRjLW1lbnUtbWF4LWhlaWdodCwgY2FsYygxMDB2aCAtIDMycHgpKTttYXJnaW46MDtwYWRkaW5nOjA7dHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7b3BhY2l0eTowO292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHk7ei1pbmRleDo4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXNoYXBlLW1lZGl1bSwgNHB4KTt0cmFuc2Zvcm0tb3JpZ2luLWxlZnQ6dG9wIGxlZnQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgcmlnaHR9Lm1kYy1tZW51LXN1cmZhY2U6Zm9jdXN7b3V0bGluZTpub25lfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMC44KTtvcGFjaXR5OjB9Lm1kYy1tZW51LXN1cmZhY2UtLW9wZW57ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLW1lbnUtc3VyZmFjZS0tYW5pbWF0aW5nLWNsb3NlZHtkaXNwbGF5OmlubGluZS1ibG9jaztvcGFjaXR5OjB9W2Rpcj1ydGxdIC5tZGMtbWVudS1zdXJmYWNlLC5tZGMtbWVudS1zdXJmYWNlW2Rpcj1ydGxde3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgcmlnaHQ7dHJhbnNmb3JtLW9yaWdpbi1yaWdodDp0b3AgbGVmdH0ubWRjLW1lbnUtc3VyZmFjZS0tYW5jaG9ye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OnZpc2libGV9Lm1kYy1tZW51LXN1cmZhY2UtLWZpeGVke3Bvc2l0aW9uOmZpeGVkfS5tZGMtbWVudS1zdXJmYWNlLS1mdWxsd2lkdGh7d2lkdGg6MTAwJX0ubWF0LW1kYy1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1tZGMtc2VsZWN0LXRyaWdnZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5tYXQtbWRjLXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtbWRjLXNlbGVjdC12YWx1ZXt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LW1kYy1zZWxlY3QtdmFsdWUtdGV4dHt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1tZGMtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjI0cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtbWRjLXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC04cHgpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1kYy10ZXh0LWZpZWxkLS1uby1sYWJlbCAubWF0LW1kYy1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2Zvcm06bm9uZX0ubWF0LW1kYy1zZWxlY3QtYXJyb3d7d2lkdGg6MTBweDtoZWlnaHQ6NXB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLXNlbGVjdC1hcnJvdyBzdmd7ZmlsbDpjdXJyZW50Q29sb3I7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc2VsZWN0LWFycm93IHN2Z3tmaWxsOkNhbnZhc1RleHR9Lm1hdC1tZGMtc2VsZWN0LWRpc2FibGVkIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtc2VsZWN0LWFycm93IHN2Z3tmaWxsOkdyYXlUZXh0fS5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtc2VsZWN0LXBhbmVse3dpZHRoOjEwMCU7bWF4LWhlaWdodDoyNzVweDtwb3NpdGlvbjpzdGF0aWM7b3V0bGluZTowO21hcmdpbjowO3BhZGRpbmc6OHB4IDA7bGlzdC1zdHlsZS10eXBlOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWw6Zm9jdXN7b3V0bGluZTpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1vdmVybGF5LXBhbmU6bm90KC5tYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSkgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1zZWxlY3QtcGFuZWx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7dHJhbnNmb3JtLW9yaWdpbjp0b3AgY2VudGVyfS5tYXQtbWRjLXNlbGVjdC1wYW5lbC1hYm92ZSAubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLXNlbGVjdC1wYW5lbHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDt0cmFuc2Zvcm0tb3JpZ2luOmJvdHRvbSBjZW50ZXJ9Lm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1tZGMtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LW1kYy1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKTstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZTtkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LW1kYy1mbG9hdGluZy1sYWJlbHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMThweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tZGMtZmxvYXRpbmctbGFiZWwtLWZsb2F0LWFib3Zle21heC13aWR0aDpjYWxjKDEwMCUgLyAwLjc1IC0gMjRweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaHttYXgtd2lkdGg6Y2FsYygxMDAlIC0gNjBweCl9Lm1hdC1tZGMtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tZGMtdGV4dC1maWVsZC0tbGFiZWwtZmxvYXRpbmcgLm1kYy1ub3RjaGVkLW91dGxpbmVfX25vdGNoe21heC13aWR0aDpjYWxjKDEwMCUgLSAyNHB4KX0ubWF0LW1kYy1zZWxlY3QtbWluLWxpbmU6ZW1wdHk6OmJlZm9yZXtjb250ZW50OiIgIjt3aGl0ZS1zcGFjZTpwcmU7d2lkdGg6MXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Zpc2liaWxpdHk6aGlkZGVufSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0l5ZS50cmFuc2Zvcm1QYW5lbF19LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSmE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUHllXSxpbXBvcnRzOltQZSxDbyxjZyxmbixQYyxFZixjZyxmbl19KSxufSkoKTtmdW5jdGlvbiBOeWUobix0KXsxJm4mJihPdCgwKSxoKDEsImRpdiIsMSksVCgyLCIgVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gRGVmYXVsdCAtIChFbmFibGVkL0Rpc2FibGVkKSBhbmQgKEVuYWJsZWQvRGlzYWJsZWQpICIpLGcoKSxoKDMsImRpdiIsMSksVCg0LCIgT25seSBmbGFncyB3aXRoIG5vbiBkZWZhdWx0IHZhbHVlcyBhcmUgc2VudCB0byB0aGUgYmFja2VuZC4gIiksZygpLGt0KCkpfWZ1bmN0aW9uIEx5ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwiZGl2IiwxKSxUKDIpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXcoKTt2KDIpLEhlKCcgRmVhdHVyZSBGbGFncyBhcmUgZmlsdGVyZWQgdG8gb25seSBzaG93IGZlYXR1cmVzIGNvbnRhaW5pbmcgIicsZS5zaG93RmxhZ3NGaWx0ZXIsJyIgJyl9fWZ1bmN0aW9uIEJ5ZShuLHQpezEmbiYmKGgoMCwic3VwIiwxMSksVCgxLCIxIiksZygpKX1mdW5jdGlvbiBWeWUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIEh5ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zZWxlY3QiLDEyKSxJKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkuZmxhZ0NoYW5nZWQuZW1pdCh7ZmxhZzpvLmZsYWcsc3RhdHVzOnIudmFsdWV9KSl9KSxoKDEsIm1hdC1vcHRpb24iLDEzKSxUKDIpLGcoKSxoKDMsIm1hdC1vcHRpb24iLDE0KSxUKDQsIkVuYWJsZWQiKSxnKCksaCg1LCJtYXQtb3B0aW9uIiwxNSksVCg2LCJEaXNhYmxlZCIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKTtfKCJ2YWx1ZSIsZS5zdGF0dXMpLHYoMiksSGUoIiBEZWZhdWx0ICIsaS5mb3JtYXRGbGFnVmFsdWUoZS5kZWZhdWx0VmFsdWUpLCIgIil9fWZ1bmN0aW9uIHp5ZShuLHQpe2lmKDEmbiYmKGgoMCwidGQiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO3YoMSksSGUoIlVuc3VwcG9ydGVkIEJ5IFVJICIsaS5mb3JtYXRGbGFnVmFsdWUoZS52YWx1ZSksIiIpfX1mdW5jdGlvbiBVeWUobix0KXtpZigxJm4mJihPdCgwKSxoKDEsInRyIikoMiwidGQiKSgzLCJkaXYiKSxUKDQpLFMoNSxCeWUsMiwwLCJzdXAiLDcpLGcoKSgpLFMoNixWeWUsMSwwLCJuZy1jb250YWluZXIiLDgpLFMoNyxIeWUsNywyLCJuZy10ZW1wbGF0ZSIsbnVsbCw5LFd0KSxTKDksenllLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTAsV3QpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9aXQoOCkscj1pdCgxMCksbz13KCk7dig0KSxIZSgiICIsZS5mbGFnLCIgIiksdigxKSxfKCJuZ0lmIixlLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuKSx2KDEpLF8oIm5nSWYiLG8uaXNFZGl0YWJsZShlKSkoIm5nSWZUaGVuIixpKSgibmdJZkVsc2UiLHIpfX1mdW5jdGlvbiBqeWUobix0KXsxJm4mJihoKDAsImRpdiIsMTEpLFQoMSwiIDEuIFNlbnQgdG8gc2VydmVyIHdoZW4gb3ZlcnJpZGRlbiAiKSxnKCkpfXZhciBmRSx4cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlcj0hMSx0aGlzLmZsYWdDaGFuZ2VkPW5ldyBGLHRoaXMuYWxsRmxhZ3NSZXNldD1uZXcgRn1zZXJpYWxpemVGbGFnVmFsdWUoZSl7cmV0dXJuITA9PT1lPyJFbmFibGVkIjohMT09PWU/IkRpc2FibGVkIjpudWxsPT1lPyJudWxsIjpBcnJheS5pc0FycmF5KGUpP0pTT04uc3RyaW5naWZ5KGUpOmUudG9TdHJpbmcoKX1pc0VkaXRhYmxlKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGUuZGVmYXVsdFZhbHVlfWZvcm1hdEZsYWdWYWx1ZShlKXtsZXQgaT10aGlzLnNlcmlhbGl6ZUZsYWdWYWx1ZShlKTtyZXR1cm4gMD09PWkubGVuZ3RoPyIiOmAtICR7aX1gfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZlYXR1cmVGbGFnU3RhdHVzZXM6ImZlYXR1cmVGbGFnU3RhdHVzZXMiLGhhc0ZsYWdzU2VudFRvU2VydmVyOiJoYXNGbGFnc1NlbnRUb1NlcnZlciIsc2hvd0ZsYWdzRmlsdGVyOiJzaG93RmxhZ3NGaWx0ZXIifSxvdXRwdXRzOntmbGFnQ2hhbmdlZDoiZmxhZ0NoYW5nZWQiLGFsbEZsYWdzUmVzZXQ6ImFsbEZsYWdzUmVzZXQifSxkZWNsczoxMix2YXJzOjQsY29uc3RzOltbMSwic2Nyb2xsaW5nLXBhZ2UiXSxbMSwibWVzc2FnZSJdLFsxLCJ3YXJuaW5nIl0sWzQsIm5nSWYiXSxbMSwiZmVhdHVyZS1mbGFnLXRhYmxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siXSxbImNsYXNzIiwibm90ZS0xIiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl0sWyJzZWxlY3RCbG9jayIsIiJdLFsidW5zdXBwb3J0ZWRCbG9jayIsIiJdLFsxLCJub3RlLTEiXSxbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbInZhbHVlIiwiZGVmYXVsdCJdLFsidmFsdWUiLCJlbmFibGVkIl0sWyJ2YWx1ZSIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDIiLDIpLFQoMywiV0FSTklORzogRVhQRVJJTUVOVEFMIEZFQVRVUkVTIEFIRUFEISIpLGcoKSxUKDQsIiBCeSBlbmFibGluZyB0aGVzZSBmZWF0dXJlcywgeW91IGNvdWxkIHB1dCB0aGUgYXBwbGljYXRpb24gaW4gYW4gdW51c2FibGUgc3RhdGUgb3IgZXhwb3NlIHlvdXJzZWxmIHRvIHVudGVzdGVkIGZlYXR1cmVzIG9yIHBvdGVudGlhbCBidWdzLiAiKSxnKCksUyg1LE55ZSw1LDAsIm5nLWNvbnRhaW5lciIsMyksUyg2LEx5ZSwzLDEsIm5nLWNvbnRhaW5lciIsMyksaCg3LCJ0YWJsZSIsNCksUyg4LFV5ZSwxMSw1LCJuZy1jb250YWluZXIiLDUpLGcoKSxoKDksImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuYWxsRmxhZ3NSZXNldC5lbWl0KCl9KSxUKDEwLCJSZXNldCBBbGwiKSxnKCksUygxMSxqeWUsMiwwLCJkaXYiLDcpLGcoKSksMiZlJiYodig1KSxfKCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSx2KDEpLF8oIm5nSWYiLGkuc2hvd0ZsYWdzRmlsdGVyKSx2KDIpLF8oIm5nRm9yT2YiLGkuZmVhdHVyZUZsYWdTdGF0dXNlcyksdigzKSxfKCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSl9LGRlcGVuZGVuY2llczpbbm4sRmUsSmksenUsVXNdLHN0eWxlczpbIi5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNDQzMzZ9Lm5vdGUtMVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmOTgwMH0uc2Nyb2xsaW5nLXBhZ2VbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6OTB2aH0uZmVhdHVyZS1mbGFnLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfSJdfSksbn0pKCksQ3E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaG93RmxhZ3NGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KGl2KS5waXBlKE4oaT0+aS5zaG93RmxhZ3M/LnRvTG93ZXJDYXNlKCkpKSx0aGlzLmhhc0ZsYWdzU2VudFRvU2VydmVyJD10aGlzLnN0b3JlLnNlbGVjdChjZikucGlwZShOKGk9Pk9iamVjdC52YWx1ZXMoaSkuc29tZShyPT5yLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuKSkpLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChpdikucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChtNiksdGhpcy5zdG9yZS5zZWxlY3QoY2YpLHRoaXMuc2hvd0ZsYWdzRmlsdGVyJCksTigoW2kscixvLHNdKT0+T2JqZWN0LmVudHJpZXMocikuZmlsdGVyKChbYV0pPT4hc3x8YS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHMpKS5tYXAoKFthLGxdKT0+e2xldCBjPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHZvaWQgMD09PXRbbl0/ImRlZmF1bHQiOnRbbl0/ImVuYWJsZWQiOiJkaXNhYmxlZCJ9KGEsaSk7cmV0dXJue2ZsYWc6YSxkZWZhdWx0VmFsdWU6bCxzdGF0dXM6YyxzZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbjpvW2FdLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVufX0pKSl9b25GbGFnQ2hhbmdlZCh7ZmxhZzplLHN0YXR1czppfSl7c3dpdGNoKGkpe2Nhc2UiZGVmYXVsdCI6dGhpcy5zdG9yZS5kaXNwYXRjaCh4dSh7ZmxhZ3M6W2VdfSkpO2JyZWFrO2Nhc2UiZW5hYmxlZCI6dGhpcy5zdG9yZS5kaXNwYXRjaChtZih7ZmxhZ3M6e1tlXTohMH19KSk7YnJlYWs7Y2FzZSJkaXNhYmxlZCI6dGhpcy5zdG9yZS5kaXNwYXRjaChtZih7ZmxhZ3M6e1tlXTohMX19KSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkZsYWcgY2hhbmdlZCB0byBpbnZhbGlkIHN0YXR1cyIpfX1vbkFsbEZsYWdzUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGpoKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLWRpYWxvZyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmZWF0dXJlRmxhZ1N0YXR1c2VzIiwiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLCJzaG93RmxhZ3NGaWx0ZXIiLCJmbGFnQ2hhbmdlZCIsImFsbEZsYWdzUmVzZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImZlYXR1cmUtZmxhZy1kaWFsb2ctY29tcG9uZW50IiwwKSxJKCJmbGFnQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GbGFnQ2hhbmdlZChvKX0pKCJhbGxGbGFnc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQWxsRmxhZ3NSZXNldCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksZygpKSwyJmUmJl8oImZlYXR1cmVGbGFnU3RhdHVzZXMiLFcoMSwzLGkuZmVhdHVyZUZsYWdzJCkpKCJoYXNGbGFnc1NlbnRUb1NlcnZlciIsVygyLDUsaS5oYXNGbGFnc1NlbnRUb1NlcnZlciQpKSgic2hvd0ZsYWdzRmlsdGVyIixXKDMsNyxpLnNob3dGbGFnc0ZpbHRlciQpKX0sZGVwZW5kZW5jaWVzOlt4cSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksTXE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRpYWxvZz1pLHRoaXMuZmVhdHVyZUZsYWdEaWFsb2dUeXBlPUNxLHRoaXMuc2hvd0ZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoYjYpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLnNob3dGZWF0dXJlRmxhZ3MkLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntpZihlKXJldHVybiB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZz10aGlzLmRpYWxvZy5vcGVuKHRoaXMuZmVhdHVyZUZsYWdEaWFsb2dUeXBlKSx2b2lkIHRoaXMuZmVhdHVyZUZsYWdzRGlhbG9nLmFmdGVyQ2xvc2VkKCkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHh1KHtmbGFnczpbInNob3dGbGFncyJdfSkpLHNldFRpbWVvdXQoKCk9Pnt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LDEpfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoemwpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctbW9kYWwtdHJpZ2dlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWHllPVsicm91dGVDb250YWluZXIiXSx3cT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWV9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5hY3RpdmVOZ0NvbXBvbmVudDtpZihpJiYodGhpcy5yb3V0ZUNvbnRhaW5lci5jbGVhcigpLGkuY3VycmVudFZhbHVlKSl7bGV0IHI9dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoaS5jdXJyZW50VmFsdWUpO3RoaXMucm91dGVDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KHIpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbykpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoWHllLDcsc2kpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkucm91dGVDb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZU5nQ29tcG9uZW50OiJhY3RpdmVOZ0NvbXBvbmVudCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvdXRlQ29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZsaSgwLG51bGwsMCl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFNxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWdpc3RyeT1pLHRoaXMuYWN0aXZlTmdDb21wb25lbnQkPWRuKFt0aGlzLnN0b3JlLnNlbGVjdChObyksdGhpcy5zdG9yZS5zZWxlY3QoejgpXSkucGlwZShOKChbcixvXSk9PnImJihudWxsPT09b3x8Rm8ocixvKSk/dGhpcy5yZWdpc3RyeS5nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHIucm91dGVLaW5kKTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoRGwpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImFjdGl2ZU5nQ29tcG9uZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJl8oImFjdGl2ZU5nQ29tcG9uZW50IixXKDEsMSxpLmFjdGl2ZU5nQ29tcG9uZW50JCkpfSxkZXBlbmRlbmNpZXM6W3dxLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxFcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2Uuc2VsZWN0KFJsKS5zdWJzY3JpYmUoaT0+e2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIixpKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGFyay1tb2RlLXN1cHBvcnRlciJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxDZz0oKCk9PihmdW5jdGlvbihuKXtuW24uQUNUSVZFX1BMVUdJTj0wXT0iQUNUSVZFX1BMVUdJTiJ9KENnfHwoQ2c9e30pKSxDZykpKCksVHE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZXBMaW5rZXI9ZSx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLm9uSGFzaENoYW5nZT1taSh3aW5kb3csInBvcHN0YXRlIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSl9bmdPbkluaXQoKXt0aGlzLm9uSGFzaENoYW5nZS5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLmRlZXBMaW5rZXIuZ2V0UGx1Z2luSWQoKTtlIT09dGhpcy5hY3RpdmVQbHVnaW5JZCYmdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3Byb3A6Q2cuQUNUSVZFX1BMVUdJTix2YWx1ZTplfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5hY3RpdmVQbHVnaW5JZCl7bGV0IGk9ZS5hY3RpdmVQbHVnaW5JZDt0aGlzLmRlZXBMaW5rZXIuc2V0UGx1Z2luSWQobnVsbD09PWkuY3VycmVudFZhbHVlPyIiOmkuY3VycmVudFZhbHVlLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYXRpb25SZXBsYWNlOm51bGw9PT1pLnByZXZpb3VzVmFsdWV8fGkuZmlyc3RDaGFuZ2V9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoX3UpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUGx1Z2luSWQ6ImFjdGl2ZVBsdWdpbklkIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLERxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luSWQkPXRoaXMuc3RvcmUucGlwZSh1bihXbykpfW9uVmFsdWVDaGFuZ2VkKGUpe2UucHJvcD09PUNnLkFDVElWRV9QTFVHSU4mJnRoaXMuc3RvcmUuZGlzcGF0Y2gocFMoe3BsdWdpbjplLnZhbHVlfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbklkIiwib25WYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiaGFzaC1zdG9yYWdlLWNvbXBvbmVudCIsMCksSSgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZWQobyl9KSxqKDEsImFzeW5jIiksZygpKSwyJmUmJl8oImFjdGl2ZVBsdWdpbklkIixXKDEsMSxpLmFjdGl2ZVBsdWdpbklkJCkpfSxkZXBlbmRlbmNpZXM6W1RxLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGV4ZT1bIioiXTtmdW5jdGlvbiBpeShuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1mRSYmKGZFPW51bGwsdHlwZW9mIHdpbmRvdzwidSIpKXtsZXQgbj13aW5kb3c7dm9pZCAwIT09bi50cnVzdGVkVHlwZXMmJihmRT1uLnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjY29tcG9uZW50cyIse2NyZWF0ZUhUTUw6dD0+dH0pKX1yZXR1cm4gZkV9KCk/LmNyZWF0ZUhUTUwobil8fG59ZnVuY3Rpb24gSXEobil7cmV0dXJuIEVycm9yKGBVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIiR7bn0iYCl9ZnVuY3Rpb24gQXEobil7cmV0dXJuIEVycm9yKGBUaGUgVVJMIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgYSByZXNvdXJjZSBVUkwgdmlhIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBVUkwgd2FzICIke259Ii5gKX1mdW5jdGlvbiBScShuKXtyZXR1cm4gRXJyb3IoYFRoZSBsaXRlcmFsIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgc2FmZSBIVE1MIGJ5IEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBsaXRlcmFsIHdhcyAiJHtufSIuYCl9dmFyIFRkPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnVybD10LHRoaXMuc3ZnVGV4dD1lLHRoaXMub3B0aW9ucz1pfX0sTWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9odHRwQ2xpZW50PWUsdGhpcy5fc2FuaXRpemVyPWksdGhpcy5fZXJyb3JIYW5kbGVyPW8sdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX3Jlc29sdmVycz1bXSx0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPVsibWF0ZXJpYWwtaWNvbnMiLCJtYXQtbGlnYXR1cmUtZm9udCJdLHRoaXMuX2RvY3VtZW50PXJ9YWRkU3ZnSWNvbihlLGkscil7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLGUsaSxyKX1hZGRTdmdJY29uTGl0ZXJhbChlLGkscil7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIixlLGkscil9YWRkU3ZnSWNvbkluTmFtZXNwYWNlKGUsaSxyLG8pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKGUsaSxuZXcgVGQocixudWxsLG8pKX1hZGRTdmdJY29uUmVzb2x2ZXIoZSl7cmV0dXJuIHRoaXMuX3Jlc29sdmVycy5wdXNoKGUpLHRoaXN9YWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZShlLGkscixvKXtsZXQgcz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoanIuSFRNTCxyKTtpZighcyl0aHJvdyBScShyKTtsZXQgYT1peShzKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IFRkKCIiLGEsbykpfWFkZFN2Z0ljb25TZXQoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0TGl0ZXJhbChlLGkpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoZSxpLHIpe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IFRkKGksbnVsbCxyKSl9YWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZShlLGkscil7bGV0IG89dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLkhUTUwsaSk7aWYoIW8pdGhyb3cgUnEoaSk7bGV0IHM9aXkobyk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcoZSxuZXcgVGQoIiIscyxyKSl9cmVnaXN0ZXJGb250Q2xhc3NBbGlhcyhlLGk9ZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQoZSxpKSx0aGlzfWNsYXNzTmFtZUZvckZvbnRBbGlhcyhlKXtyZXR1cm4gdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzLmdldChlKXx8ZX1zZXREZWZhdWx0Rm9udFNldENsYXNzKC4uLmUpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPWUsdGhpc31nZXREZWZhdWx0Rm9udFNldENsYXNzKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9Z2V0U3ZnSWNvbkZyb21VcmwoZSl7bGV0IGk9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLlJFU09VUkNFX1VSTCxlKTtpZighaSl0aHJvdyBBcShlKTtsZXQgcj10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChpKTtyZXR1cm4gcj9IdChtRShyKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKG5ldyBUZChlLG51bGwpKS5waXBlKE50KG89PnRoaXMuX2NhY2hlZEljb25zQnlVcmwuc2V0KGksbykpLE4obz0+bUUobykpKX1nZXROYW1lZFN2Z0ljb24oZSxpPSIiKXtsZXQgcj1QcShpLGUpLG89dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KHIpO2lmKG8pcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7aWYobz10aGlzLl9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyhpLGUpLG8pcmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChyLG8pLHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7bGV0IHM9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGkpO3JldHVybiBzP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyhlLHMpOmVhKElxKHIpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc29sdmVycz1bXSx0aGlzLl9zdmdJY29uQ29uZmlncy5jbGVhcigpLHRoaXMuX2ljb25TZXRDb25maWdzLmNsZWFyKCksdGhpcy5fY2FjaGVkSWNvbnNCeVVybC5jbGVhcigpfV9nZXRTdmdGcm9tQ29uZmlnKGUpe3JldHVybiBlLnN2Z1RleHQ/SHQobUUodGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcoZSkpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcoZSkucGlwZShOKGk9Pm1FKGkpKSl9X2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyhlLGkpe2xldCByPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSk7cmV0dXJuIHI/SHQocik6Y28oaS5maWx0ZXIocz0+IXMuc3ZnVGV4dCkubWFwKHM9PnRoaXMuX2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyhzKS5waXBlKHpyKGE9PntsZXQgYz1gTG9hZGluZyBpY29uIHNldCBVUkw6ICR7dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLlJFU09VUkNFX1VSTCxzLnVybCl9IGZhaWxlZDogJHthLm1lc3NhZ2V9YDtyZXR1cm4gdGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihjKSksSHQobnVsbCl9KSkpKS5waXBlKE4oKCk9PntsZXQgcz10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO2lmKCFzKXRocm93IElxKGUpO3JldHVybiBzfSkpfV9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpe2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+PTA7ci0tKXtsZXQgbz1pW3JdO2lmKG8uc3ZnVGV4dCYmby5zdmdUZXh0LnRvU3RyaW5nKCkuaW5kZXhPZihlKT4tMSl7bGV0IHM9dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcobyksYT10aGlzLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQocyxlLG8ub3B0aW9ucyk7aWYoYSlyZXR1cm4gYX19cmV0dXJuIG51bGx9X2xvYWRTdmdJY29uRnJvbUNvbmZpZyhlKXtyZXR1cm4gdGhpcy5fZmV0Y2hJY29uKGUpLnBpcGUoTnQoaT0+ZS5zdmdUZXh0PWkpLE4oKCk9PnRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSl9X2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P0h0KG51bGwpOnRoaXMuX2ZldGNoSWNvbihlKS5waXBlKE50KGk9PmUuc3ZnVGV4dD1pKSl9X2V4dHJhY3RTdmdJY29uRnJvbVNldChlLGkscil7bGV0IG89ZS5xdWVyeVNlbGVjdG9yKGBbaWQ9IiR7aX0iXWApO2lmKCFvKXJldHVybiBudWxsO2xldCBzPW8uY2xvbmVOb2RlKCEwKTtpZihzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhzLHIpO2lmKCJzeW1ib2wiPT09cy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHRoaXMuX3RvU3ZnRWxlbWVudChzKSxyKTtsZXQgYT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhpeSgiPHN2Zz48L3N2Zz4iKSk7cmV0dXJuIGEuYXBwZW5kQ2hpbGQocyksdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhhLHIpfV9zdmdFbGVtZW50RnJvbVN0cmluZyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtpLmlubmVySFRNTD1lO2xldCByPWkucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIXIpdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gcn1fdG9TdmdFbGVtZW50KGUpe2xldCBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGl5KCI8c3ZnPjwvc3ZnPiIpKSxyPWUuYXR0cmlidXRlcztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0e25hbWU6cyx2YWx1ZTphfT1yW29dOyJpZCIhPT1zJiZpLnNldEF0dHJpYnV0ZShzLGEpfWZvcihsZXQgbz0wO288ZS5jaGlsZE5vZGVzLmxlbmd0aDtvKyspZS5jaGlsZE5vZGVzW29dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZpLmFwcGVuZENoaWxkKGUuY2hpbGROb2Rlc1tvXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gaX1fc2V0U3ZnQXR0cmlidXRlcyhlLGkpe3JldHVybiBlLnNldEF0dHJpYnV0ZSgiZml0IiwiIiksZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksZS5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiksZS5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIiksaSYmaS52aWV3Qm94JiZlLnNldEF0dHJpYnV0ZSgidmlld0JveCIsaS52aWV3Qm94KSxlfV9mZXRjaEljb24oZSl7bGV0e3VybDppLG9wdGlvbnM6cn09ZSxvPXI/LndpdGhDcmVkZW50aWFscz8/ITE7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIEh0dHBDbGllbnQgcHJvdmlkZXIgZm9yIHVzZSB3aXRoIEFuZ3VsYXIgTWF0ZXJpYWwgaWNvbnMuIFBsZWFzZSBpbmNsdWRlIHRoZSBIdHRwQ2xpZW50TW9kdWxlIGZyb20gQGFuZ3VsYXIvY29tbW9uL2h0dHAgaW4geW91ciBhcHAgaW1wb3J0cy4iKTtpZihudWxsPT1pKXRocm93IEVycm9yKGBDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJHtpfSIuYCk7bGV0IHM9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKGpyLlJFU09VUkNFX1VSTCxpKTtpZighcyl0aHJvdyBBcShpKTtsZXQgYT10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQocyk7aWYoYSlyZXR1cm4gYTtsZXQgbD10aGlzLl9odHRwQ2xpZW50LmdldChzLHtyZXNwb25zZVR5cGU6InRleHQiLHdpdGhDcmVkZW50aWFsczpvfSkucGlwZShOKGM9Pml5KGMpKSxmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9Pnt0cnl7dC5zdWJzY3JpYmUoZSl9ZmluYWxseXtlLmFkZChuKX19KX0oKCk9PnRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShzKSksQ3MoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChzLGwpLGx9X2FkZFN2Z0ljb25Db25maWcoZSxpLHIpe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoUHEoZSxpKSxyKSx0aGlzfV9hZGRTdmdJY29uU2V0Q29uZmlnKGUsaSl7bGV0IHI9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiByP3IucHVzaChpKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQoZSxbaV0pLHRoaXN9X3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpe2lmKCFlLnN2Z0VsZW1lbnQpe2xldCBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGUuc3ZnVGV4dCk7dGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhpLGUub3B0aW9ucyksZS5zdmdFbGVtZW50PWl9cmV0dXJuIGUuc3ZnRWxlbWVudH1fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoZSxpKXtmb3IobGV0IHI9MDtyPHRoaXMuX3Jlc29sdmVycy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLl9yZXNvbHZlcnNbcl0oaSxlKTtpZihvKXJldHVybiByeGUobyk/bmV3IFRkKG8udXJsLG51bGwsby5vcHRpb25zKTpuZXcgVGQobyxudWxsKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsobGYsOCksayhacCksayhMdCw4KSxrKHJzKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gbUUobil7cmV0dXJuIG4uY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBQcShuLHQpe3JldHVybiBuKyI6Iit0fWZ1bmN0aW9uIHJ4ZShuKXtyZXR1cm4hKCFuLnVybHx8IW4ub3B0aW9ucyl9bmV3IFRzLG5ldyBzZCxuZXcgVHMsbmV3IFRzO3ZhciBveGU9enMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLHN4ZT1uZXcgaWUoIk1BVF9JQ09OX0RFRkFVTFRfT1BUSU9OUyIpLGF4ZT1uZXcgaWUoIm1hdC1pY29uLWxvY2F0aW9uIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe2xldCBuPWFpKEx0KSx0PW4/bi5sb2NhdGlvbjpudWxsO3JldHVybntnZXRQYXRobmFtZTooKT0+dD90LnBhdGhuYW1lK3Quc2VhcmNoOiIifX19KSxPcT1bImNsaXAtcGF0aCIsImNvbG9yLXByb2ZpbGUiLCJzcmMiLCJjdXJzb3IiLCJmaWxsIiwiZmlsdGVyIiwibWFya2VyIiwibWFya2VyLXN0YXJ0IiwibWFya2VyLW1pZCIsIm1hcmtlci1lbmQiLCJtYXNrIiwic3Ryb2tlIl0sY3hlPU9xLm1hcChuPT5gWyR7bn1dYCkuam9pbigiLCAiKSxkeGU9L151cmxcKFsnIl0/IyguKj8pWyciXT9cKSQvLEVuPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBveGV7Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9UnQoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPU1uLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9X3NwbGl0SWNvbk5hbWUoZSl7aWYoIWUpcmV0dXJuWyIiLCIiXTtsZXQgaT1lLnNwbGl0KCI6Iik7c3dpdGNoKGkubGVuZ3RoKXtjYXNlIDE6cmV0dXJuWyIiLGlbMF1dO2Nhc2UgMjpyZXR1cm4gaTtkZWZhdWx0OnRocm93IEVycm9yKGBJbnZhbGlkIGljb24gbmFtZTogIiR7ZX0iYCl9fW5nT25Jbml0KCl7dGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9bmdBZnRlclZpZXdDaGVja2VkKCl7bGV0IGU9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2lmKGUmJmUuc2l6ZSl7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTtpIT09dGhpcy5fcHJldmlvdXNQYXRoJiYodGhpcy5fcHJldmlvdXNQYXRoPWksdGhpcy5fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMoaSkpfX1uZ09uRGVzdHJveSgpe3RoaXMuX2N1cnJlbnRJY29uRmV0Y2gudW5zdWJzY3JpYmUoKSx0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMmJnRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcy5jbGVhcigpfV91c2luZ0ZvbnRJY29uKCl7cmV0dXJuIXRoaXMuc3ZnSWNvbn1fc2V0U3ZnRWxlbWVudChlKXt0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTtsZXQgaT10aGlzLl9sb2NhdGlvbi5nZXRQYXRobmFtZSgpO3RoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX2NhY2hlQ2hpbGRyZW5XaXRoRXh0ZXJuYWxSZWZlcmVuY2VzKGUpLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlKX1fY2xlYXJTdmdFbGVtZW50KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9ZS5jaGlsZE5vZGVzLmxlbmd0aDtmb3IodGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKTtpLS07KXtsZXQgcj1lLmNoaWxkTm9kZXNbaV07KDEhPT1yLm5vZGVUeXBlfHwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJnIucmVtb3ZlKCl9fV91cGRhdGVGb250SWNvbkNsYXNzZXMoKXtpZighdGhpcy5fdXNpbmdGb250SWNvbigpKXJldHVybjtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT0odGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KS5zcGxpdCgvICsvKTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpKS5maWx0ZXIocj0+ci5sZW5ndGg+MCk7dGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MuZm9yRWFjaChyPT5lLmNsYXNzTGlzdC5yZW1vdmUocikpLGkuZm9yRWFjaChyPT5lLmNsYXNzTGlzdC5hZGQocikpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWksdGhpcy5mb250SWNvbiE9PXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmIWkuaW5jbHVkZXMoIm1hdC1saWdhdHVyZS1mb250IikmJih0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJmUuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MpLHRoaXMuZm9udEljb24mJmUuY2xhc3NMaXN0LmFkZCh0aGlzLmZvbnRJY29uKSx0aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3M9dGhpcy5mb250SWNvbil9X2NsZWFudXBGb250VmFsdWUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2UudHJpbSgpLnNwbGl0KCIgIilbMF06ZX1fcHJlcGVuZFBhdGhUb1JlZmVyZW5jZXMoZSl7bGV0IGk9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzO2kmJmkuZm9yRWFjaCgocixvKT0+e3IuZm9yRWFjaChzPT57by5zZXRBdHRyaWJ1dGUocy5uYW1lLGB1cmwoJyR7ZX0jJHtzLnZhbHVlfScpYCl9KX0pfV9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKXtsZXQgaT1lLnF1ZXJ5U2VsZWN0b3JBbGwoY3hlKSxyPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcz10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXN8fG5ldyBNYXA7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspT3EuZm9yRWFjaChzPT57bGV0IGE9aVtvXSxsPWEuZ2V0QXR0cmlidXRlKHMpLGM9bD9sLm1hdGNoKGR4ZSk6bnVsbDtpZihjKXtsZXQgZD1yLmdldChhKTtkfHwoZD1bXSxyLnNldChhLGQpKSxkLnB1c2goe25hbWU6cyx2YWx1ZTpjWzFdfSl9fSl9X3VwZGF0ZVN2Z0ljb24oZSl7aWYodGhpcy5fc3ZnTmFtZXNwYWNlPW51bGwsdGhpcy5fc3ZnTmFtZT1udWxsLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2gudW5zdWJzY3JpYmUoKSxlKXtsZXRbaSxyXT10aGlzLl9zcGxpdEljb25OYW1lKGUpO2kmJih0aGlzLl9zdmdOYW1lc3BhY2U9aSksciYmKHRoaXMuX3N2Z05hbWU9ciksdGhpcy5fY3VycmVudEljb25GZXRjaD10aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKHIsaSkucGlwZShZdCgxKSkuc3Vic2NyaWJlKG89PnRoaXMuX3NldFN2Z0VsZW1lbnQobyksbz0+e3RoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYEVycm9yIHJldHJpZXZpbmcgaWNvbiAke2l9OiR7cn0hICR7by5tZXNzYWdlfWApKX0pfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhNZykseW8oImFyaWEtaGlkZGVuIiksQyhheGUpLEMocnMpLEMoc3hlLDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaWNvbiJdXSxob3N0QXR0cnM6WyJyb2xlIiwiaW1nIiwxLCJtYXQtaWNvbiIsIm5vdHJhbnNsYXRlIl0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiZGF0YS1tYXQtaWNvbi10eXBlIixpLl91c2luZ0ZvbnRJY29uKCk/ImZvbnQiOiJzdmciKSgiZGF0YS1tYXQtaWNvbi1uYW1lIixpLl9zdmdOYW1lfHxpLmZvbnRJY29uKSgiZGF0YS1tYXQtaWNvbi1uYW1lc3BhY2UiLGkuX3N2Z05hbWVzcGFjZXx8aS5mb250U2V0KSgiZm9udEljb24iLGkuX3VzaW5nRm9udEljb24oKT9pLmZvbnRJY29uOm51bGwpLG50KCJtYXQtaWNvbi1pbmxpbmUiLGkuaW5saW5lKSgibWF0LWljb24tbm8tY29sb3IiLCJwcmltYXJ5IiE9PWkuY29sb3ImJiJhY2NlbnQiIT09aS5jb2xvciYmIndhcm4iIT09aS5jb2xvcikpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsaW5saW5lOiJpbmxpbmUiLHN2Z0ljb246InN2Z0ljb24iLGZvbnRTZXQ6ImZvbnRTZXQiLGZvbnRJY29uOiJmb250SWNvbiJ9LGV4cG9ydEFzOlsibWF0SWNvbiJdLGZlYXR1cmVzOltLZV0sbmdDb250ZW50U2VsZWN0b3JzOmV4ZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksenQoMCkpfSxzdHlsZXM6WyIubWF0LWljb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7b3ZlcmZsb3c6aGlkZGVufS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fS5tYXQtaWNvbi5tYXQtbGlnYXR1cmUtZm9udFtmb250SWNvbl06OmJlZm9yZXtjb250ZW50OmF0dHIoZm9udEljb24pfVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsIDEpfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257ZGlzcGxheTpibG9ja30ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbnttYXJnaW46YXV0b30iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxkaT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sZm5dfSksbn0pKCksdXhlPVsiKiIsW1sibWF0LXRvb2xiYXItcm93Il1dXSxweGU9WyIqIiwibWF0LXRvb2xiYXItcm93Il0sZnhlPXpzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSxteGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyLXJvdyJdXSxob3N0QXR0cnM6WzEsIm1hdC10b29sYmFyLXJvdyJdLGV4cG9ydEFzOlsibWF0VG9vbGJhclJvdyJdfSksbn0pKCksa3E9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZ4ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1yfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpKSl9X2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoR24pLEMoTHQpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZUaShyLG14ZSw1KSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl90b29sYmFyUm93cz1vKX19LGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLGkuX3Rvb2xiYXJSb3dzLmxlbmd0aD4wKSgibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsMD09PWkuX3Rvb2xiYXJSb3dzLmxlbmd0aCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl0sZmVhdHVyZXM6W0tlXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cHhlLGRlY2xzOjIsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4odXhlKSx6dCgwKSx6dCgxLDEpKX0sc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyIC5tYXQtbWRjLWJ1dHRvbi1iYXNlLm1hdC11bnRoZW1lZHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiBpbmhlcml0Oy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiBpbmhlcml0fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRnE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZuLGZuXX0pLG59KSgpO2Z1bmN0aW9uIEoyKG4pe3JldHVybiBuLnN0YXRlIT09VGUuTk9UX0xPQURFRCYmbi5zdGF0ZSE9PVRlLkxPQURJTkd9dmFyIGd4ZT1icihYVyx5ZSh5MSxuPT5KMihuKT97Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxyZWxvYWRFbmFibGVkOiFuLnNldHRpbmdzLnJlbG9hZEVuYWJsZWR9fTpuKSx5ZSh4MSwobix7cGVyaW9kSW5Nczp0fSk9PntpZighSjIobikpcmV0dXJuIG47bGV0IGU9dD49M2U0P3Q6bi5zZXR0aW5ncy5yZWxvYWRQZXJpb2RJbk1zO3JldHVybnsuLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZFBlcmlvZEluTXM6ZX19fSkseWUoQzEsKG4se3NpemU6dH0pPT57aWYoIUoyKG4pKXJldHVybiBuO2xldCBlPXQ+MD90Om4uc2V0dGluZ3MucGFnZVNpemU7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscGFnZVNpemU6ZX19fSkseWUoSWwsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntsZXQgZT17fTtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQucGFnZVNpemUpJiZ0LnBhZ2VTaXplPjAmJihlLnBhZ2VTaXplPU51bWJlcih0LnBhZ2VTaXplKSksImJvb2xlYW4iPT10eXBlb2YgdC5hdXRvUmVsb2FkJiYoZS5yZWxvYWRFbmFibGVkPXQuYXV0b1JlbG9hZCksTnVtYmVyLmlzRmluaXRlKHQuYXV0b1JlbG9hZFBlcmlvZEluTXMpJiZ0LmF1dG9SZWxvYWRQZXJpb2RJbk1zPjNlNCYmKGUucmVsb2FkUGVyaW9kSW5Ncz1OdW1iZXIodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykpLHsuLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pKTtmdW5jdGlvbiBOcShuLHQpe3JldHVybiBneGUobix0KX12YXIgX3hlPVsiaW5wdXQiXSxieGU9WyJsYWJlbCJdLHZ4ZT1bIioiXSx5eGU9bmV3IGllKCJtYXQtY2hlY2tib3gtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntjb2xvcjoiYWNjZW50IixjbGlja0FjdGlvbjoiY2hlY2staW5kZXRlcm1pbmF0ZSJ9fX0pO3ZhciB4eGU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9PmhhKSxtdWx0aTohMH0sQ3hlPTAsTHE9e2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn0sTXhlPWt1KHpzKHVzKHNvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSx3eGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE14ZXtnZXQgaW5wdXRJZCgpe3JldHVybmAke3RoaXMuaWR8fHRoaXMuX3VuaXF1ZUlkfS1pbnB1dGB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vcHRpb25zPWwsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMubGFiZWxQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMubmFtZT1udWxsLHRoaXMuY2hhbmdlPW5ldyBGLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgRix0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fExxLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9dGhpcy5fb3B0aW9ucy5jb2xvcnx8THEuY29sb3IsdGhpcy50YWJJbmRleD1wYXJzZUludChzKXx8MCx0aGlzLmlkPXRoaXMuX3VuaXF1ZUlkPWAke2V9JHsrK0N4ZX1gfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfWdldCBjaGVja2VkKCl7cmV0dXJuIHRoaXMuX2NoZWNrZWR9c2V0IGNoZWNrZWQoZSl7bGV0IGk9UnQoZSk7aSE9dGhpcy5jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe2xldCBpPVJ0KGUpO2khPT10aGlzLmRpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGluZGV0ZXJtaW5hdGUoKXtyZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZX1zZXQgaW5kZXRlcm1pbmF0ZShlKXtsZXQgaT1lIT10aGlzLl9pbmRldGVybWluYXRlO3RoaXMuX2luZGV0ZXJtaW5hdGU9UnQoZSksaSYmKHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2luZGV0ZXJtaW5hdGU/Mzp0aGlzLmNoZWNrZWQ/MToyKSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKSksdGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9X2lzUmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfV9vbkxhYmVsVGV4dENoYW5nZSgpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX13cml0ZVZhbHVlKGUpe3RoaXMuY2hlY2tlZD0hIWV9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9X3RyYW5zaXRpb25DaGVja1N0YXRlKGUpe2xldCBpPXRoaXMuX2N1cnJlbnRDaGVja1N0YXRlLHI9dGhpcy5fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpO2lmKGkhPT1lJiZyJiYodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzJiZyLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzKSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9dGhpcy5fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihpLGUpLHRoaXMuX2N1cnJlbnRDaGVja1N0YXRlPWUsdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzLmxlbmd0aD4wKSl7ci5jbGFzc0xpc3QuYWRkKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyk7bGV0IG89dGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PntyLmNsYXNzTGlzdC5yZW1vdmUobyl9LDFlMyl9KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy5jaGVja2VkKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHRoaXMuY2hlY2tlZCkpLHRoaXMuX2lucHV0RWxlbWVudCYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCl9X2hhbmRsZUlucHV0Q2xpY2soKXtsZXQgZT10aGlzLl9vcHRpb25zPy5jbGlja0FjdGlvbjt0aGlzLmRpc2FibGVkfHwibm9vcCI9PT1lPyF0aGlzLmRpc2FibGVkJiYibm9vcCI9PT1lJiYodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT10aGlzLmluZGV0ZXJtaW5hdGUpOih0aGlzLmluZGV0ZXJtaW5hdGUmJiJjaGVjayIhPT1lJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKX0pLHRoaXMuX2NoZWNrZWQ9IXRoaXMuX2NoZWNrZWQsdGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5fY2hlY2tlZD8xOjIpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnRlcmFjdGlvbkV2ZW50KGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9X29uQmx1cigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9nZXRBbmltYXRpb25DbGFzc0ZvckNoZWNrU3RhdGVUcmFuc2l0aW9uKGUsaSl7aWYoIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGUpcmV0dXJuIiI7c3dpdGNoKGUpe2Nhc2UgMDppZigxPT09aSlyZXR1cm4gdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ7aWYoMz09aSlyZXR1cm4gdGhpcy5fY2hlY2tlZD90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7YnJlYWs7Y2FzZSAyOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDE6cmV0dXJuIDI9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvVW5jaGVja2VkOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDM6cmV0dXJuIDE9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb1VuY2hlY2tlZH1yZXR1cm4iIn1fc3luY0luZGV0ZXJtaW5hdGUoZSl7bGV0IGk9dGhpcy5faW5wdXRFbGVtZW50O2kmJihpLm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoX3hlLDUpLEdlKGJ4ZSw1KSxHZShtbyw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5faW5wdXRFbGVtZW50PXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLl9sYWJlbEVsZW1lbnQ9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkucmlwcGxlPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSxpZDoiaWQiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQiLGluZGV0ZXJtaW5hdGU6ImluZGV0ZXJtaW5hdGUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5kZXRlcm1pbmF0ZUNoYW5nZToiaW5kZXRlcm1pbmF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltLZV19KSxufSkoKSxoYT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd3hle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcigibWF0LW1kYy1jaGVja2JveC0iLGUsaSxyLG8scyxhKSx0aGlzLl9hbmltYXRpb25DbGFzc2VzPXt1bmNoZWNrZWRUb0NoZWNrZWQ6Im1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCIsdW5jaGVja2VkVG9JbmRldGVybWluYXRlOiJtZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGNoZWNrZWRUb1VuY2hlY2tlZDoibWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtdW5jaGVja2VkIixjaGVja2VkVG9JbmRldGVybWluYXRlOiJtZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIixpbmRldGVybWluYXRlVG9DaGVja2VkOiJtZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIixpbmRldGVybWluYXRlVG9VbmNoZWNrZWQ6Im1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCJ9fWZvY3VzKCl7dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS5jaGVja2VkPWUsaX1fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnR9X29uSW5wdXRDbGljaygpe3N1cGVyLl9oYW5kbGVJbnB1dENsaWNrKCl9X29uVG91Y2hUYXJnZXRDbGljaygpe3N1cGVyLl9oYW5kbGVJbnB1dENsaWNrKCksdGhpcy5kaXNhYmxlZHx8dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1fcHJldmVudEJ1YmJsaW5nRnJvbUxhYmVsKGUpe2UudGFyZ2V0JiZ0aGlzLl9sYWJlbEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkmJmUuc3RvcFByb3BhZ2F0aW9uKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoYXQpLHlvKCJ0YWJpbmRleCIpLEMoaGksOCksQyh5eGUsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtY2hlY2tib3giXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihqbygiaWQiLGkuaWQpLEJlKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLG50KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtZGMtY2hlY2tib3gtLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LW1kYy1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1tZGMtY2hlY2tib3gtY2hlY2tlZCIsaS5jaGVja2VkKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdENoZWNrYm94Il0sZmVhdHVyZXM6W1F0KFt4eGVdKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOnZ4ZSxkZWNsczoxNSx2YXJzOjE5LGNvbnN0czpbWzEsIm1kYy1mb3JtLWZpZWxkIiwzLCJjbGljayJdLFsxLCJtZGMtY2hlY2tib3giXSxbImNoZWNrYm94IiwiIl0sWzEsIm1hdC1tZGMtY2hlY2tib3gtdG91Y2gtdGFyZ2V0IiwzLCJjbGljayJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sIiwzLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImRpc2FibGVkIiwiaWQiLCJyZXF1aXJlZCIsInRhYkluZGV4IiwiYmx1ciIsImNsaWNrIiwiY2hhbmdlIl0sWyJpbnB1dCIsIiJdLFsxLCJtZGMtY2hlY2tib3hfX3JpcHBsZSJdLFsxLCJtZGMtY2hlY2tib3hfX2JhY2tncm91bmQiXSxbImZvY3VzYWJsZSIsImZhbHNlIiwidmlld0JveCIsIjAgMCAyNCAyNCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNoZWNrYm94X19jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwiZCIsIk0xLjczLDEyLjkxIDguMSwxOS4yOCAyMi43OSw0LjU5IiwxLCJtZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoIl0sWzEsIm1kYy1jaGVja2JveF9fbWl4ZWRtYXJrIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtbWRjLWNoZWNrYm94LXJpcHBsZSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCJdLFszLCJmb3IiXSxbImxhYmVsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoRG4oKSxoKDAsImRpdiIsMCksSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9wcmV2ZW50QnViYmxpbmdGcm9tTGFiZWwobyl9KSxoKDEsImRpdiIsMSwyKSgzLCJkaXYiLDMpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vblRvdWNoVGFyZ2V0Q2xpY2soKX0pLGcoKSxoKDQsImlucHV0Iiw0LDUpLEkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vbklucHV0Q2xpY2soKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSxnKCksUCg2LCJkaXYiLDYpLGgoNywiZGl2Iiw3KSxObigpLGgoOCwic3ZnIiw4KSxQKDksInBhdGgiLDkpLGcoKSxPbygpLFAoMTAsImRpdiIsMTApLGcoKSxQKDExLCJkaXYiLDExKSxnKCksaCgxMiwibGFiZWwiLDEyLDEzKSx6dCgxNCksZygpKCkpLDImZSl7bGV0IHI9aXQoMik7bnQoIm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pLHYoNCksbnQoIm1kYy1jaGVja2JveC0tc2VsZWN0ZWQiLGkuY2hlY2tlZCksXygiY2hlY2tlZCIsaS5jaGVja2VkKSgiaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJpZCIsaS5pbnB1dElkKSgicmVxdWlyZWQiLGkucmVxdWlyZWQpKCJ0YWJJbmRleCIsaS50YWJJbmRleCksQmUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpKCJuYW1lIixpLm5hbWUpKCJ2YWx1ZSIsaS52YWx1ZSksdig3KSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZUNlbnRlcmVkIiwhMCksdigxKSxfKCJmb3IiLGkuaW5wdXRJZCl9fSxkZXBlbmRlbmNpZXM6W21vXSxzdHlsZXM6WycubWRjLXRvdWNoLXRhcmdldC13cmFwcGVye2Rpc3BsYXk6aW5saW5lfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyOS43ODMzMzg1fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrezAlLDY4LjIle3RyYW5zZm9ybTpzY2FsZVgoMCl9NjguMiV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMCwgMSl9MTAwJXt0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aHtmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSk7b3BhY2l0eToxO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97b3BhY2l0eTowO3N0cm9rZS1kYXNob2Zmc2V0Oi0yOS43ODMzMzg1fX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO29wYWNpdHk6MX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bWRjLWFuaW1hdGlvbi1kZWNlbGVyYXRpb24tY3VydmUtdGltaW5nLWZ1bmN0aW9uO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1pbmRldGVybWluYXRlLXVuY2hlY2tlZC1taXhlZG1hcmt7MCV7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXI7dHJhbnNmb3JtOnNjYWxlWCgxKTtvcGFjaXR5OjF9MzIuOCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVYKDApO29wYWNpdHk6MH19Lm1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCAxOHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjpib3R0b219Lm1kYy1jaGVja2JveFtoaWRkZW5de2Rpc3BsYXk6bm9uZX0ubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5nLC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19mb2N1cy1yaW5ne3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZywubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tib3JkZXItY29sb3I6Q2FudmFzVGV4dH19Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC01MCUpO2hlaWdodDpjYWxjKDEwMCUgKyA0cHgpO3dpZHRoOmNhbGMoMTAwJSArIDRweCl9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZzo6YWZ0ZXIsLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX2ZvY3VzLXJpbmc6OmFmdGVye2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpey5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fZm9jdXMtcmluZ3tkaXNwbGF5Om5vbmV9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWRjLWNoZWNrYm94X19taXhlZG1hcmt7bWFyZ2luOjAgMXB4fX0ubWRjLWNoZWNrYm94LS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjphYnNvbHV0ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtib3JkZXI6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9pbnRlci1ldmVudHM6bm9uZTt3aWxsLWNoYW5nZTpiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSxib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKX0ubWRjLWNoZWNrYm94X19jaGVja21hcmt7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDE4MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3tvcGFjaXR5OjF9Lm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDozLjEycHg7c3Ryb2tlLWRhc2hvZmZzZXQ6MjkuNzgzMzM4NTtzdHJva2UtZGFzaGFycmF5OjI5Ljc4MzMzODV9Lm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre3dpZHRoOjEwMCU7aGVpZ2h0OjA7dHJhbnNmb3JtOnNjYWxlWCgwKSByb3RhdGUoMGRlZyk7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpLHRyYW5zZm9ybSA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tZHVyYXRpb246MTgwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpsaW5lYXJ9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aHthbmltYXRpb246bWRjLWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoIDE4MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7YW5pbWF0aW9uOm1kYy1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmsgOTBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOm1kYy1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aCA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFyayA5MG1zIGxpbmVhciAwczt0cmFuc2l0aW9uOm5vbmV9Lm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2FuaW1hdGlvbjptZGMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLWNoZWNrbWFyayA1MDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3gtLWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmsgNTAwbXMgbGluZWFyIDBzO3RyYW5zaXRpb246bm9uZX0ubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX21peGVkbWFya3thbmltYXRpb246bWRjLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFyayAzMDBtcyBsaW5lYXIgMHM7dHJhbnNpdGlvbjpub25lfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLXBhdGgsLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7cGFkZGluZzowO29wYWNpdHk6MDtjdXJzb3I6aW5oZXJpdH0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtY2hlY2tib3gtLXRvdWNoe21hcmdpbjpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMil9Lm1kYy1jaGVja2JveC0tdG91Y2ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2x7dG9wOmNhbGMoKHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KSAtIHZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0OHB4KSkgLyAyKTtyaWdodDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7bGVmdDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCkpIC8gMik7d2lkdGg6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQ4cHgpO2hlaWdodDp2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDhweCl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2l0aW9uOm9wYWNpdHkgMTgwbXMgMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpLHRyYW5zZm9ybSAxODBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoLTQ1ZGVnKX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJrLC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFya3t0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSksdHJhbnNmb3JtIDkwbXMgMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSl9Lm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIC5tZGMtY2hlY2tib3hfX21peGVkbWFyaywubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV1+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyk7b3BhY2l0eToxfS5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19jaGVja21hcmssLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLXVwZ3JhZGVkIC5tZGMtY2hlY2tib3hfX2NoZWNrbWFyay1wYXRoLC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS11cGdyYWRlZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7dHJhbnNpdGlvbjpub25lfS5tZGMtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1kYy1mb3JtLWZpZWxkW2hpZGRlbl17ZGlzcGxheTpub25lfS5tZGMtZm9ybS1maWVsZD5sYWJlbHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDphdXRvO3BhZGRpbmctbGVmdDo0cHg7cGFkZGluZy1yaWdodDowO29yZGVyOjB9W2Rpcj1ydGxdIC5tZGMtZm9ybS1maWVsZD5sYWJlbCwubWRjLWZvcm0tZmllbGQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkPmxhYmVsLC5tZGMtZm9ybS1maWVsZD5sYWJlbFtkaXI9cnRsXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweH0ubWRjLWZvcm0tZmllbGQtLW5vd3JhcD5sYWJlbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWx7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjRweDtvcmRlcjotMX1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6YXV0b31bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWwsLm1kYy1mb3JtLWZpZWxkLS1hbGlnbi1lbmQ+bGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjB9Lm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbHttYXJnaW46MH1bZGlyPXJ0bF0gLm1kYy1mb3JtLWZpZWxkLS1zcGFjZS1iZXR3ZWVuPmxhYmVsLC5tZGMtZm9ybS1maWVsZC0tc3BhY2UtYmV0d2Vlbj5sYWJlbFtkaXI9cnRsXXttYXJnaW46MH0ubWF0LW1kYy1jaGVja2JveHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94e3BhZGRpbmc6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKTttYXJnaW46Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGlzYWJsZWRdOm5vdCg6Y2hlY2tlZCk6bm90KDppbmRldGVybWluYXRlKTpub3QoW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXSl+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjM4KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2Rpc2FibGVkXTpjaGVja2Vkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkaXNhYmxlZF06aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdW2Rpc2FibGVkXX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMzgpKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7Y29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvciwgI2ZmZil9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fbWl4ZWRtYXJre2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yLCAjZmZmKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmRpc2FibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQgLm1kYy1jaGVja2JveF9fY2hlY2ttYXJre2NvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZGlzYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCAubWRjLWNoZWNrYm94X19taXhlZG1hcmt7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3IsICNmZmYpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6aW5kZXRlcm1pbmF0ZX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2xbZGF0YS1pbmRldGVybWluYXRlPXRydWVdOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2FuaW1hdGlvbi1uYW1lOm1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLWNoZWNrYm94LS1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3ZlciAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX1Aa2V5ZnJhbWVzIG1kYy1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fTUwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX0xMDAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH19Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpob3Zlci5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZHthbmltYXRpb24tbmFtZTptZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLUZGMDE4Nzg2RkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2fS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIubWRjLWNoZWNrYm94LS1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94OmhvdmVyLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveC5tZGMtcmlwcGxlLXVwZ3JhZGVkLS1iYWNrZ3JvdW5kLWZvY3VzZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KC5tZGMtcmlwcGxlLXVwZ3JhZGVkKTpmb2N1cyAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCgubWRjLXJpcHBsZS11cGdyYWRlZCk6Zm9jdXMgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDppbmRldGVybWluYXRlfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzIC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sW2RhdGEtaW5kZXRlcm1pbmF0ZT10cnVlXTplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKX19QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4NnswJSw4MCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvciwgdmFyKC0tbWRjLXRoZW1lLXNlY29uZGFyeSwgIzAxODc4NikpfTEwMCV7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3IsIHZhcigtLW1kYy10aGVtZS1zZWNvbmRhcnksICMwMTg3ODYpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC1GRjAxODc4NkZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Lm1kYy1yaXBwbGUtdXBncmFkZWQtLWJhY2tncm91bmQtZm9jdXNlZC5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3gubWRjLXJpcHBsZS11cGdyYWRlZC0tYmFja2dyb3VuZC1mb2N1c2VkLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmQsLm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoLm1kYy1yaXBwbGUtdXBncmFkZWQpOmZvY3VzLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtRkYwMTg3ODZGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveDpub3QoOmRpc2FibGVkKTphY3RpdmUgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZDpub3QoOmNoZWNrZWQpOm5vdCg6aW5kZXRlcm1pbmF0ZSk6bm90KFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV0pfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7Ym9yZGVyLWNvbG9yOnZhcigtLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjU0KSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmluZGV0ZXJtaW5hdGV+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCwubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFtkYXRhLWluZGV0ZXJtaW5hdGU9dHJ1ZV06ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9QGtleWZyYW1lcyBtZGMtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kLThBMDAwMDAwRkYwMTg3ODYwMDAwMDAwMEZGMDE4Nzg2ezAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3IsIHJnYmEoMCwgMCwgMCwgMC41NCkpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9NTAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9fUBrZXlmcmFtZXMgbWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ7MCUsODAle2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCB2YXIoLS1tZGMtdGhlbWUtc2Vjb25kYXJ5LCAjMDE4Nzg2KSl9MTAwJXtib3JkZXItY29sb3I6dmFyKC0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuNTQpKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZC04QTAwMDAwMEZGMDE4Nzg2MDAwMDAwMDBGRjAxODc4Nn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpOmFjdGl2ZS5tZGMtY2hlY2tib3gtLWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6ZW5hYmxlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kLC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6bm90KDpkaXNhYmxlZCk6YWN0aXZlLm1kYy1jaGVja2JveC0tYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkfi5tZGMtY2hlY2tib3hfX2JhY2tncm91bmR7YW5pbWF0aW9uLW5hbWU6bWRjLWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmQtOEEwMDAwMDBGRjAxODc4NjAwMDAwMDAwRkYwMTg3ODZ9Lm1hdC1tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSAxOHB4KSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gMThweCkgLyAyKX0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9se3RvcDpjYWxjKCh2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkgLSB2YXIoLS1tZGMtY2hlY2tib3gtc3RhdGUtbGF5ZXItc2l6ZSwgNDBweCkpIC8gMik7cmlnaHQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO2xlZnQ6Y2FsYygodmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpIC0gdmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpKSAvIDIpO3dpZHRoOnZhcigtLW1kYy1jaGVja2JveC1zdGF0ZS1sYXllci1zaXplLCA0MHB4KTtoZWlnaHQ6dmFyKC0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemUsIDQwcHgpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3g6aG92ZXIgLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4wNDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNpdGlvbjpvcGFjaXR5IDgwbXMgMCBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSx0cmFuc2Zvcm0gODBtcyAwIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2w6bm90KFtkaXNhYmxlZF0pOmZvY3Vzfi5tZGMtY2hlY2tib3hfX3JpcHBsZXtvcGFjaXR5Oi4xNn0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5key13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0ubWF0LW1kYy1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAqLC5tYXQtbWRjLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlICo6OmJlZm9yZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWRjLWNoZWNrYm94IGxhYmVse2N1cnNvcjpwb2ludGVyfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1tZGMtY2hlY2tib3gtZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1tZGMtY2hlY2tib3ggbGFiZWw6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmZvY3VzOmVuYWJsZWQ6bm90KDpjaGVja2VkKTpub3QoOmluZGV0ZXJtaW5hdGUpOm5vdChbZGF0YS1pbmRldGVybWluYXRlPXRydWVdKX4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5ke2JvcmRlci1jb2xvcjp2YXIoLS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yLCBibGFjayl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveC5tYXQtbWRjLWNoZWNrYm94LWRpc2FibGVke29wYWNpdHk6LjV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19jaGVja21hcmt7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiBDYW52YXNUZXh0Oy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjogQ2FudmFzVGV4dH0ubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19yaXBwbGV7b3BhY2l0eTowfS5tYXQtbWRjLWNoZWNrYm94LXJpcHBsZSwubWRjLWNoZWNrYm94X19yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6bm90KDplbXB0eSksLm1kYy1jaGVja2JveF9fcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtbWRjLWNoZWNrYm94LXRvdWNoLXRhcmdldHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2hlaWdodDo0OHB4O2xlZnQ6NTAlO3dpZHRoOjQ4cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtNTAlKX0ubWF0LW1kYy1jaGVja2JveC1yaXBwbGU6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJX0ubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDpmb2N1c34ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFN4ZT17cHJvdmlkZTp3byx1c2VFeGlzdGluZzokbigoKT0+RXhlKSxtdWx0aTohMH0sRXhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaMnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOltRdChbU3hlXSksS2VdfSksbn0pKCksQnE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLEZjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltmbixCbCxCcSxmbixCcV19KSxufSkoKSxIcT1xbyh7cGFzc2l2ZTohMH0pLHpxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzPW5ldyBNYXB9bW9uaXRvcihlKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiBKcjtsZXQgaT1IcyhlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtpZihyKXJldHVybiByLnN1YmplY3Q7bGV0IG89bmV3IEllLHM9ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsZWQiLGE9bD0+eyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCIhPT1sLmFuaW1hdGlvbk5hbWV8fGkuY2xhc3NMaXN0LmNvbnRhaW5zKHMpPyJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQiPT09bC5hbmltYXRpb25OYW1lJiZpLmNsYXNzTGlzdC5jb250YWlucyhzKSYmKGkuY2xhc3NMaXN0LnJlbW92ZShzKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITF9KSkpOihpLmNsYXNzTGlzdC5hZGQocyksdGhpcy5fbmdab25lLnJ1bigoKT0+by5uZXh0KHt0YXJnZXQ6bC50YXJnZXQsaXNBdXRvZmlsbGVkOiEwfSkpKX07cmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2kuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLGEsSHEpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxIcSl9fSksb31zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1IcyhlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtyJiYoci51bmxpc3RlbigpLHIuc3ViamVjdC5jb21wbGV0ZSgpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKEduKSxrKGF0KSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksVXE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLER4ZT1uZXcgaWUoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLEl4ZT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sQXhlPTAsUnhlPUIxKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj1uLHRoaXMuX3BhcmVudEZvcm09dCx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9ZSx0aGlzLm5nQ29udHJvbD1pLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBJZX19KSxVdT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUnhle2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9UnQoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFVsLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVJ0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJm8yKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9UnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQsdSl7c3VwZXIoYSxvLHMsciksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5fYXV0b2ZpbGxNb25pdG9yPWMsdGhpcy5fZm9ybUZpZWxkPXUsdGhpcy5fdWlkPSJtYXQtaW5wdXQtIitBeGUrKyx0aGlzLmZvY3VzZWQ9ITEsdGhpcy5zdGF0ZUNoYW5nZXM9bmV3IEllLHRoaXMuY29udHJvbFR5cGU9Im1hdC1pbnB1dCIsdGhpcy5hdXRvZmlsbGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3R5cGU9InRleHQiLHRoaXMuX3JlYWRvbmx5PSExLHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzPVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIl0uZmlsdGVyKG09Pm8yKCkuaGFzKG0pKSx0aGlzLl9pT1NLZXl1cExpc3RlbmVyPW09PntsZXQgYj1tLnRhcmdldDshYi52YWx1ZSYmMD09PWIuc2VsZWN0aW9uU3RhcnQmJjA9PT1iLnNlbGVjdGlvbkVuZCYmKGIuc2V0U2VsZWN0aW9uUmFuZ2UoMSwxKSxiLnNldFNlbGVjdGlvblJhbmdlKDAsMCkpfTtsZXQgcD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZj1wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yPWx8fHAsdGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT10aGlzLnZhbHVlLHRoaXMuaWQ9dGhpcy5pZCxpLklPUyYmZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2UubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5faU9TS2V5dXBMaXN0ZW5lcil9KSx0aGlzLl9pc1NlcnZlcj0hdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyLHRoaXMuX2lzTmF0aXZlU2VsZWN0PSJzZWxlY3QiPT09Zix0aGlzLl9pc1RleHRhcmVhPSJ0ZXh0YXJlYSI9PT1mLHRoaXMuX2lzSW5Gb3JtRmllbGQ9ISF1LHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYodGhpcy5jb250cm9sVHlwZT1wLm11bHRpcGxlPyJtYXQtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSI6Im1hdC1uYXRpdmUtc2VsZWN0Iil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpLG51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCYmdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLmRpc2FibGVkJiYodGhpcy5kaXNhYmxlZD10aGlzLm5nQ29udHJvbC5kaXNhYmxlZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2ZvY3VzQ2hhbmdlZChlKXtlIT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja05hdGl2ZVZhbHVlKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO3RoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUhPT1lJiYodGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2dldFBsYWNlaG9sZGVyKCk7aWYoZSE9PXRoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXIpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyPWUsZT9pLnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLGUpOmkucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfX1fZ2V0UGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8bnVsbH1fdmFsaWRhdGVUeXBlKCl7SXhlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKEduKSxDKEdzLDEwKSxDKHZnLDgpLEMoeWcsOCksQyhIMSksQyhEeGUsMTApLEMoenEpLEMoYXQpLEMoU2YsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtaW5wdXQtZWxlbWVudCJdLGhvc3RWYXJzOjE4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKCExKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSksMiZlJiYoam8oImlkIixpLmlkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCksQmUoIm5hbWUiLGkubmFtZXx8bnVsbCkoInJlYWRvbmx5IixpLnJlYWRvbmx5JiYhaS5faXNOYXRpdmVTZWxlY3R8fG51bGwpKCJhcmlhLWludmFsaWQiLGkuZW1wdHkmJmkucmVxdWlyZWQ/bnVsbDppLmVycm9yU3RhdGUpKCJhcmlhLXJlcXVpcmVkIixpLnJlcXVpcmVkKSgiaWQiLGkuaWQpLG50KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0YXJlYS1jb250cm9sIixpLl9pc0luRm9ybUZpZWxkJiZpLl9pc1RleHRhcmVhKSgibWF0LW1kYy1mb3JtLWZpZWxkLWlucHV0LWNvbnRyb2wiLGkuX2lzSW5Gb3JtRmllbGQpKCJtZGMtdGV4dC1maWVsZF9faW5wdXQiLGkuX2lzSW5Gb3JtRmllbGQpKCJtYXQtbWRjLW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIix0eXBlOiJ0eXBlIixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHVzZXJBcmlhRGVzY3JpYmVkQnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwidXNlckFyaWFEZXNjcmliZWRCeSJdLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5In0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6UXYsdXNlRXhpc3Rpbmc6bn1dKSxLZSxHdF19KSxufSkoKSwkYT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sRWYsRWYsVXEsZm5dfSksbn0pKCk7ZnVuY3Rpb24gUHhlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtZXJyb3IiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiIFJlbG9hZCBwZXJpb2QgaGFzIHRvIGJlIG1pbmltdW0gb2YgIixlLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsIiBzZWNvbmRzLiAiKX19ZnVuY3Rpb24gT3hlKG4sdCl7MSZuJiYoaCgwLCJtYXQtZXJyb3IiKSxUKDEsIiBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIiksZygpKX12YXIganE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucmVsb2FkVG9nZ2xlZD1uZXcgRix0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkPW5ldyBGLHRoaXMucGFnZVNpemVDaGFuZ2VkPW5ldyBGLHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUz0zMCx0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2w9bmV3IHR5KHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyxbVWwucmVxdWlyZWQsVWwubWluKHRoaXMuTUlOX1JFTE9BRF9QRVJJT0RfSU5fUyldKSx0aGlzLnBhZ2luYXRpb25Db250cm9sPW5ldyB0eSgxLFtVbC5yZXF1aXJlZCxVbC5taW4oMSksbj0+e2xldCB0PU51bWJlcihuLnZhbHVlKTtyZXR1cm4gTWF0aC5yb3VuZCh0KT09PW4udmFsdWU/bnVsbDp7aW50ZWdlcjp7dmFsdWU6bi52YWx1ZX19fV0pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx3cig1MDApLGtlKCgpPT50aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsaWQmJnRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQuZW1pdCgxZTMqdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlKX0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx3cig1MDApLGtlKCgpPT50aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbGlkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdCh0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uQ2hhbmdlcyhlKXtpZihlLnJlbG9hZFBlcmlvZEluTXMpe2xldCBpPWUucmVsb2FkUGVyaW9kSW5NcztpLnByZXZpb3VzVmFsdWUhPT1pLmN1cnJlbnRWYWx1ZSYmdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlLzFlMyl9aWYoZS5yZWxvYWRFbmFibGVkJiYoZS5yZWxvYWRFbmFibGVkLmN1cnJlbnRWYWx1ZT90aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZW5hYmxlKCk6dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmRpc2FibGUoKSksZS5wYWdlU2l6ZSl7bGV0IGk9ZS5wYWdlU2l6ZTtpLnByZXZpb3VzVmFsdWUhPT1pLmN1cnJlbnRWYWx1ZSYmdGhpcy5wYWdpbmF0aW9uQ29udHJvbC5zZXRWYWx1ZShpLmN1cnJlbnRWYWx1ZSl9fW9uUmVsb2FkVG9nZ2xlKCl7dGhpcy5yZWxvYWRUb2dnbGVkLmVtaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JlbG9hZEVuYWJsZWQ6InJlbG9hZEVuYWJsZWQiLHJlbG9hZFBlcmlvZEluTXM6InJlbG9hZFBlcmlvZEluTXMiLHBhZ2VTaXplOiJwYWdlU2l6ZSJ9LG91dHB1dHM6e3JlbG9hZFRvZ2dsZWQ6InJlbG9hZFRvZ2dsZWQiLHJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkOiJyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZCIscGFnZVNpemVDaGFuZ2VkOiJwYWdlU2l6ZUNoYW5nZWQifSxmZWF0dXJlczpbR3RdLGRlY2xzOjE4LHZhcnM6NSxjb25zdHM6W1sxLCJyZWxvYWQtdG9nZ2xlIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbIm1hdElucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJoMyIpLFQoMSwiU2V0dGluZ3MiKSxnKCksaCgyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksSSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxUKDUsIlJlbG9hZCBkYXRhIiksZygpKCksaCg2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpKDgsIm1hdC1sYWJlbCIpLFQoOSwiUmVsb2FkIFBlcmlvZCAoc2Vjb25kcykiKSxnKCksUCgxMCwiaW5wdXQiLDIpLGcoKSxTKDExLFB4ZSwyLDEsIm1hdC1lcnJvciIsMyksZygpKCksaCgxMiwiZGl2IikoMTMsIm1hdC1mb3JtLWZpZWxkIikoMTQsIm1hdC1sYWJlbCIpLFQoMTUsIlBhZ2luYXRpb24gTGltaXQiKSxnKCksUCgxNiwiaW5wdXQiLDQpLGcoKSxTKDE3LE94ZSwyLDAsIm1hdC1lcnJvciIsMyksZygpKSwyJmUmJih2KDQpLF8oImNoZWNrZWQiLGkucmVsb2FkRW5hYmxlZCksdig2KSxfKCJmb3JtQ29udHJvbCIsaS5yZWxvYWRQZXJpb2RDb250cm9sKSx2KDEpLF8oIm5nSWYiLGkucmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcigibWluIil8fGkucmVsb2FkUGVyaW9kQ29udHJvbC5oYXNFcnJvcigicmVxdWlyZWQiKSksdig1KSxfKCJmb3JtQ29udHJvbCIsaS5wYWdpbmF0aW9uQ29udHJvbCksdigxKSxfKCJuZ0lmIixpLnBhZ2luYXRpb25Db250cm9sLmludmFsaWQpKX0sZGVwZW5kZW5jaWVzOltGZSxiZyxZMixjRSxRMixoYSxVdSxLYSxrYyxNOV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTVweDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICA+IGRpdltfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW46IDE2cHg7XG59XG5cbmgzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgbWFyZ2luOiAxNnB4O1xufVxuXG4ucmVsb2FkLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufSJdfSksbn0pKCksR3E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChJdiksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChBdiksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoX2YpfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeTEoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHgxKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChDMSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLEkoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJyZWxvYWRFbmFibGVkIixXKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFcoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFcoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbanEsY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFdxPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kaWFsb2c9ZX1pc0J1dHRvbkRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1UZS5OT1RfTE9BREVEfHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09VGUuTE9BRElOR31vcGVuRGlhbG9nKCl7dGhpcy5kaWFsb2cub3BlbihHcSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHpsKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJidXR0b24iLDApLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLFAoMSwibWF0LWljb24iLDEpLGcoKSksMiZlJiZfKCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6WyRpLEVuXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxxcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNldHRpbmdzTG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdCh0Mil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1idXR0b24iXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywic2V0dGluZ3NMb2FkU3RhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInNldHRpbmdzLWJ1dHRvbi1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZfKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVygxLDEsaS5zZXR0aW5nc0xvYWRTdGF0ZSQpKX0sZGVwZW5kZW5jaWVzOltXcSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksQnhlPVsibWF0LW1lbnUtaXRlbSIsIiJdO2Z1bmN0aW9uIFZ4ZShuLHQpezEmbiYmKE5uKCksaCgwLCJzdmciLDMpLFAoMSwicG9seWdvbiIsNCksZygpKX12YXIgSHhlPVtbWyJtYXQtaWNvbiJdLFsiIiwibWF0TWVudUl0ZW1JY29uIiwiIl1dLCIqIl0senhlPVsibWF0LWljb24sIFttYXRNZW51SXRlbUljb25dIiwiKiJdO2Z1bmN0aW9uIFV4ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMCksSSgia2V5ZG93biIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX2hhbmRsZUtleWRvd24ocikpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuX29uQW5pbWF0aW9uU3RhcnQocikpfSkoIkB0cmFuc2Zvcm1NZW51LmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9vbkFuaW1hdGlvbkRvbmUocikpfSksaCgxLCJkaXYiLDEpLHp0KDIpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO18oImlkIixlLnBhbmVsSWQpKCJuZ0NsYXNzIixlLl9jbGFzc0xpc3QpKCJAdHJhbnNmb3JtTWVudSIsZS5fcGFuZWxBbmltYXRpb25TdGF0ZSksQmUoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixlLmFyaWFMYWJlbGxlZGJ5fHxudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsZS5hcmlhRGVzY3JpYmVkYnl8fG51bGwpfX12YXIganhlPVsiKiJdLGVOPW5ldyBpZSgiTUFUX01FTlVfUEFORUwiKSxHeGU9dXMoc28oY2xhc3N7fSkpLGpsPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBHeGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX3BhcmVudE1lbnU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMucm9sZT0ibWVudWl0ZW0iLHRoaXMuX2hvdmVyZWQ9bmV3IEllLHRoaXMuX2ZvY3VzZWQ9bmV3IEllLHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvPy5hZGRJdGVtPy4odGhpcyl9Zm9jdXMoZSxpKXt0aGlzLl9mb2N1c01vbml0b3ImJmU/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksZSxpKTp0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKGkpLHRoaXMuX2ZvY3VzZWQubmV4dCh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITEpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fcGFyZW50TWVudSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtJiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyksdGhpcy5faG92ZXJlZC5jb21wbGV0ZSgpLHRoaXMuX2ZvY3VzZWQuY29tcGxldGUoKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fV9jaGVja0Rpc2FibGVkKGUpe3RoaXMuZGlzYWJsZWQmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9X2hhbmRsZU1vdXNlRW50ZXIoKXt0aGlzLl9ob3ZlcmVkLm5leHQodGhpcyl9Z2V0TGFiZWwoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxpPWUucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0ucmVtb3ZlKCk7cmV0dXJuIGUudGV4dENvbnRlbnQ/LnRyaW0oKXx8IiJ9X3NldEhpZ2hsaWdodGVkKGUpe3RoaXMuX2hpZ2hsaWdodGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9zZXRUcmlnZ2Vyc1N1Ym1lbnUoZSl7dGhpcy5fdHJpZ2dlcnNTdWJtZW51PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9oYXNGb2N1cygpe3JldHVybiB0aGlzLl9kb2N1bWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuX2dldEhvc3RFbGVtZW50KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoTHQpLEMoWHIpLEMoZU4sOCksQygkdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LWl0ZW0iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtbWRjLW1lbnUtaXRlbSIsIm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yIiwibWRjLWxpc3QtaXRlbSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NoZWNrRGlzYWJsZWQobyl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlTW91c2VFbnRlcigpfSksMiZlJiYoQmUoInJvbGUiLGkucm9sZSkoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxudCgibWF0LW1kYy1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLGkuX2hpZ2hsaWdodGVkKSgibWF0LW1kYy1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2VyIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLHJvbGU6InJvbGUifSxleHBvcnRBczpbIm1hdE1lbnVJdGVtIl0sZmVhdHVyZXM6W0tlXSxhdHRyczpCeGUsbmdDb250ZW50U2VsZWN0b3JzOnp4ZSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJtZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1kYy1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24iLCJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsNCwibmdJZiJdLFsidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDEsIm1hdC1tZGMtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKEh4ZSksenQoMCksaCgxLCJzcGFuIiwwKSx6dCgyLDEpLGcoKSxQKDMsImRpdiIsMSksUyg0LFZ4ZSwyLDAsInN2ZyIsMikpLDImZSYmKHYoMyksXygibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZVJpcHBsZXx8aS5kaXNhYmxlZCkoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpLHYoMSksXygibmdJZiIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGRlcGVuZGVuY2llczpbRmUsbW9dLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFd4ZT1uZXcgaWUoIk1hdE1lbnVDb250ZW50IiksX0U9e3RyYW5zZm9ybU1lbnU6X3IoInRyYW5zZm9ybU1lbnUiLFt3aSgidm9pZCIscm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDAuOCkifSkpLGdpKCJ2b2lkID0+IGVudGVyIixDaSgiMTIwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSkpLGdpKCIqID0+IHZvaWQiLENpKCIxMDBtcyAyNW1zIGxpbmVhciIscm4oe29wYWNpdHk6MH0pKSldKSxmYWRlSW5JdGVtczpfcigiZmFkZUluSXRlbXMiLFt3aSgic2hvd2luZyIscm4oe29wYWNpdHk6MX0pKSxnaSgidm9pZCA9PiAqIixbcm4oe29wYWNpdHk6MH0pLENpKCI0MDBtcyAxMDBtcyBjdWJpYy1iZXppZXIoMC41NSwgMCwgMC41NSwgMC4yKSIpXSldKX0scXhlPTAsWHE9bmV3IGllKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSkscnk9KCgpPT57Y2xhc3MgbntnZXQgeFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3hQb3NpdGlvbn1zZXQgeFBvc2l0aW9uKGUpe3RoaXMuX3hQb3NpdGlvbj1lLHRoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9Z2V0IHlQb3NpdGlvbigpe3JldHVybiB0aGlzLl95UG9zaXRpb259c2V0IHlQb3NpdGlvbihlKXt0aGlzLl95UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCBvdmVybGFwVHJpZ2dlcigpe3JldHVybiB0aGlzLl9vdmVybGFwVHJpZ2dlcn1zZXQgb3ZlcmxhcFRyaWdnZXIoZSl7dGhpcy5fb3ZlcmxhcFRyaWdnZXI9UnQoZSl9Z2V0IGhhc0JhY2tkcm9wKCl7cmV0dXJuIHRoaXMuX2hhc0JhY2tkcm9wfXNldCBoYXNCYWNrZHJvcChlKXt0aGlzLl9oYXNCYWNrZHJvcD1SdChlKX1zZXQgcGFuZWxDbGFzcyhlKXtsZXQgaT10aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M7aSYmaS5sZW5ndGgmJmkuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITF9KSx0aGlzLl9wcmV2aW91c1BhbmVsQ2xhc3M9ZSxlJiZlLmxlbmd0aCYmKGUuc3BsaXQoIiAiKS5mb3JFYWNoKHI9Pnt0aGlzLl9jbGFzc0xpc3Rbcl09ITB9KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIiKX1nZXQgY2xhc3NMaXN0KCl7cmV0dXJuIHRoaXMucGFuZWxDbGFzc31zZXQgY2xhc3NMaXN0KGUpe3RoaXMucGFuZWxDbGFzcz1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW8sdGhpcy5feFBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnhQb3NpdGlvbix0aGlzLl95UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueVBvc2l0aW9uLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcz1uZXcgT2EsdGhpcy5fY2xhc3NMaXN0PXt9LHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2FuaW1hdGlvbkRvbmU9bmV3IEllLHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBGLHRoaXMuY2xvc2U9dGhpcy5jbG9zZWQsdGhpcy5wYW5lbElkPSJtYXQtbWVudS1wYW5lbC0iK3F4ZSsrfW5nT25Jbml0KCl7dGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpLHRoaXMuX2tleU1hbmFnZXI9bmV3IHNnKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkud2l0aEhvbWVBbmRFbmQoKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKHFuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksSm4oZT0+dG4oLi4uZS5tYXAoaT0+aS5fZm9jdXNlZCkpKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCJlbnRlciI9PT10aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlJiZpLmFjdGl2ZUl0ZW0/Ll9oYXNGb2N1cygpKXtsZXQgcj1lLnRvQXJyYXkoKSxvPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxpLmFjdGl2ZUl0ZW1JbmRleHx8MCkpO3Jbb10mJiFyW29dLmRpc2FibGVkP2kuc2V0QWN0aXZlSXRlbShvKTppLnNldE5leHRJdGVtQWN0aXZlKCl9fSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmRlc3Ryb3koKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfV9ob3ZlcmVkKCl7cmV0dXJuIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUocW4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSxKbihpPT50biguLi5pLm1hcChyPT5yLl9ob3ZlcmVkKSkpKX1hZGRJdGVtKGUpe31yZW1vdmVJdGVtKGUpe31faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj10aGlzLl9rZXlNYW5hZ2VyO3N3aXRjaChpKXtjYXNlIDI3OnZyKGUpfHwoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKSk7YnJlYWs7Y2FzZSAzNzp0aGlzLnBhcmVudE1lbnUmJiJsdHIiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztjYXNlIDM5OnRoaXMucGFyZW50TWVudSYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuKDM4PT09aXx8NDA9PT1pKSYmci5zZXRGb2N1c09yaWdpbigia2V5Ym9hcmQiKSx2b2lkIHIub25LZXlkb3duKGUpfWUuc3RvcFByb3BhZ2F0aW9uKCl9Zm9jdXNGaXJzdEl0ZW0oZT0icHJvZ3JhbSIpe3RoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX2ZpcnN0SXRlbUZvY3VzU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFl0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT1udWxsO2lmKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5sZW5ndGgmJihpPXRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5maXJzdC5fZ2V0SG9zdEVsZW1lbnQoKS5jbG9zZXN0KCdbcm9sZT0ibWVudSJdJykpLCFpfHwhaS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSl7bGV0IHI9dGhpcy5fa2V5TWFuYWdlcjtyLnNldEZvY3VzT3JpZ2luKGUpLnNldEZpcnN0SXRlbUFjdGl2ZSgpLCFyLmFjdGl2ZUl0ZW0mJmkmJmkuZm9jdXMoKX19KX1yZXNldEFjdGl2ZUl0ZW0oKXt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfXNldEVsZXZhdGlvbihlKXtsZXQgaT1NYXRoLm1pbih0aGlzLl9iYXNlRWxldmF0aW9uK2UsMjQpLHI9YCR7dGhpcy5fZWxldmF0aW9uUHJlZml4fSR7aX1gLG89T2JqZWN0LmtleXModGhpcy5fY2xhc3NMaXN0KS5maW5kKHM9PnMuc3RhcnRzV2l0aCh0aGlzLl9lbGV2YXRpb25QcmVmaXgpKTsoIW98fG89PT10aGlzLl9wcmV2aW91c0VsZXZhdGlvbikmJih0aGlzLl9wcmV2aW91c0VsZXZhdGlvbiYmKHRoaXMuX2NsYXNzTGlzdFt0aGlzLl9wcmV2aW91c0VsZXZhdGlvbl09ITEpLHRoaXMuX2NsYXNzTGlzdFtyXT0hMCx0aGlzLl9wcmV2aW91c0VsZXZhdGlvbj1yKX1zZXRQb3NpdGlvbkNsYXNzZXMoZT10aGlzLnhQb3NpdGlvbixpPXRoaXMueVBvc2l0aW9uKXtsZXQgcj10aGlzLl9jbGFzc0xpc3Q7clsibWF0LW1lbnUtYmVmb3JlIl09ImJlZm9yZSI9PT1lLHJbIm1hdC1tZW51LWFmdGVyIl09ImFmdGVyIj09PWUsclsibWF0LW1lbnUtYWJvdmUiXT0iYWJvdmUiPT09aSxyWyJtYXQtbWVudS1iZWxvdyJdPSJiZWxvdyI9PT1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX1fc3RhcnRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJlbnRlciJ9X3Jlc2V0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCJ9X29uQW5pbWF0aW9uRG9uZShlKXt0aGlzLl9hbmltYXRpb25Eb25lLm5leHQoZSksdGhpcy5faXNBbmltYXRpbmc9ITF9X29uQW5pbWF0aW9uU3RhcnQoZSl7dGhpcy5faXNBbmltYXRpbmc9ITAsImVudGVyIj09PWUudG9TdGF0ZSYmMD09PXRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4JiYoZS5lbGVtZW50LnNjcm9sbFRvcD0wKX1fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKXt0aGlzLl9hbGxJdGVtcy5jaGFuZ2VzLnBpcGUocW4odGhpcy5fYWxsSXRlbXMpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldChlLmZpbHRlcihpPT5pLl9wYXJlbnRNZW51PT09dGhpcykpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSxDKFhxKSxDKCR0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsV3hlLDUpLFRpKHIsamwsNSksVGkocixqbCw0KSksMiZlKXtsZXQgbztTZShvPUVlKCkpJiYoaS5sYXp5Q29udGVudD1vLmZpcnN0KSxTZShvPUVlKCkpJiYoaS5fYWxsSXRlbXM9byksU2Uobz1FZSgpKSYmKGkuaXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFNpLDUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkudGVtcGxhdGVSZWY9ci5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCJ9LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLG59KSgpLE5jPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByeXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLl9lbGV2YXRpb25QcmVmaXg9Im1hdC1lbGV2YXRpb24teiIsdGhpcy5fYmFzZUVsZXZhdGlvbj04fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKGF0KSxDKFhxKSxDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6ZU4sdXNlRXhpc3Rpbmc6bn1dKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOmp4ZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWRjLW1lbnUtcGFuZWwiLCJtZGMtbWVudS1zdXJmYWNlIiwibWRjLW1lbnUtc3VyZmFjZS0tb3BlbiIsIm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljIiwzLCJpZCIsIm5nQ2xhc3MiLCJrZXlkb3duIiwiY2xpY2siXSxbMSwibWF0LW1kYy1tZW51LWNvbnRlbnQiLCJtZGMtbGlzdCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUygwLFV4ZSwzLDYsIm5nLXRlbXBsYXRlIikpfSxkZXBlbmRlbmNpZXM6W3luXSxzdHlsZXM6WycubWRjLW1lbnUtc3VyZmFjZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O21heC13aWR0aDp2YXIoLS1tZGMtbWVudS1tYXgtd2lkdGgsIGNhbGMoMTAwdncgLSAzMnB4KSk7bWF4LWhlaWdodDp2YXIoLS1tZGMtbWVudS1tYXgtaGVpZ2h0LCBjYWxjKDEwMHZoIC0gMzJweCkpO21hcmdpbjowO3BhZGRpbmc6MDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDtvcGFjaXR5OjA7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eTt6LWluZGV4Ojg7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtbWVkaXVtLCA0cHgpO3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCByaWdodH0ubWRjLW1lbnUtc3VyZmFjZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UtLWFuaW1hdGluZy1vcGVue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLW1lbnUtc3VyZmFjZS0tb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctY2xvc2Vke2Rpc3BsYXk6aW5saW5lLWJsb2NrO29wYWNpdHk6MH1bZGlyPXJ0bF0gLm1kYy1tZW51LXN1cmZhY2UsLm1kYy1tZW51LXN1cmZhY2VbZGlyPXJ0bF17dHJhbnNmb3JtLW9yaWdpbi1sZWZ0OnRvcCByaWdodDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCBsZWZ0fS5tZGMtbWVudS1zdXJmYWNlLS1hbmNob3J7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS0tZml4ZWR7cG9zaXRpb246Zml4ZWR9Lm1kYy1tZW51LXN1cmZhY2UtLWZ1bGx3aWR0aHt3aWR0aDoxMDAlfW1hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1tZW51LWNvbnRlbnR7bWFyZ2luOjA7cGFkZGluZzo4cHggMDtsaXN0LXN0eWxlLXR5cGU6bm9uZX0ubWF0LW1kYy1tZW51LWNvbnRlbnQ6Zm9jdXN7b3V0bGluZTpub25lfS5tYXQtbWRjLW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWRjLW1lbnUtcGFuZWwubWF0LW1kYy1tZW51LXBhbmVse21pbi13aWR0aDoxMTJweDttYXgtd2lkdGg6MjgwcHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1tZW51LWl0ZW17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7YmFja2dyb3VuZDpub25lO3RleHQtZGVjb3JhdGlvbjpub25lO21hcmdpbjowO21pbi1oZWlnaHQ6NDhweH0ubWF0LW1kYy1tZW51LWl0ZW06Zm9jdXN7b3V0bGluZTpub25lfVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0sLm1hdC1tZGMtbWVudS1pdGVtW2Rpcj1ydGxde3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MTZweH0ubWF0LW1kYy1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZGMtbWVudS1pdGVtLm1kYy1saXN0LWl0ZW17YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbWRjLW1lbnUtaXRlbVtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7b3BhY2l0eTouMzh9Lm1hdC1tZGMtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0gLm1hdC1pY29ue21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1tZGMtbWVudS1pdGVtIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsfS5tYXQtbWRjLW1lbnUtaXRlbS5tYXQtbWRjLW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXJ7cGFkZGluZy1yaWdodDozMnB4fVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LWl0ZW0ubWF0LW1kYy1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLW1lbnUtaXRlbXttYXJnaW4tdG9wOjFweH0ubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6NXB4O2hlaWdodDoxMHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LW1kYy1tZW51LXN1Ym1lbnUtaWNvbntyaWdodDphdXRvO2xlZnQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSBzY2FsZVgoLTEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fS5tYXQtbWRjLW1lbnUtaXRlbSAubWF0LW1kYy1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W19FLnRyYW5zZm9ybU1lbnUsX0UuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFFxPW5ldyBpZSgibWF0LW1lbnUtc2Nyb2xsLXN0cmF0ZWd5IiksUXhlPXtwcm92aWRlOlFxLGRlcHM6W3ppXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sWXE9cW8oe3Bhc3NpdmU6ITB9KSxaeGU9KCgpPT57Y2xhc3MgbntnZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoZSl7dGhpcy5tZW51PWV9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudShlKXtlIT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9ZSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxlJiYodGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPWUuY2xvc2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLl9kZXN0cm95TWVudShpKSwoImNsaWNrIj09PWl8fCJ0YWIiPT09aSkmJnRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZC5lbWl0KGkpfSkpLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U/Ll9zZXRUcmlnZ2Vyc1N1Ym1lbnUodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudD1pLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9cix0aGlzLl9tZW51SXRlbUluc3RhbmNlPWEsdGhpcy5fZGlyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fbmdab25lPWQsdGhpcy5fb3ZlcmxheVJlZj1udWxsLHRoaXMuX21lbnVPcGVuPSExLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1haSgkdCksdGhpcy5faGFuZGxlVG91Y2hTdGFydD11PT57QnYodSl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRix0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRix0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1zIGluc3RhbmNlb2Ygcnk/czp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsWXEpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxZcSksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWdldCBtZW51T3Blbigpe3JldHVybiB0aGlzLl9tZW51T3Blbn1nZXQgZGlyKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9dHJpZ2dlcnNTdWJtZW51KCl7cmV0dXJuISEodGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLm1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2YgcnkmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygcnk/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoa2Uocj0+InZvaWQiPT09ci50b1N0YXRlKSxZdCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXtlIT09dGhpcy5fbWVudU9wZW4mJih0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWYpe2xldCBpPXRoaXMuX2dldE92ZXJsYXlDb25maWcoZSk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoZSxpLnBvc2l0aW9uU3RyYXRlZ3kpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoaSksdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCl9cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9X2dldE92ZXJsYXlDb25maWcoZSl7cmV0dXJuIG5ldyBRYSh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczplLmJhY2tkcm9wQ2xhc3N8fCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIscGFuZWxDbGFzczplLm92ZXJsYXlQYW5lbENsYXNzLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksZGlyZWN0aW9uOnRoaXMuX2Rpcn0pfV9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkpe2Uuc2V0UG9zaXRpb25DbGFzc2VzJiZpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocj0+e2xldCBvPSJzdGFydCI9PT1yLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYPyJhZnRlciI6ImJlZm9yZSIscz0idG9wIj09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVk/ImJlbG93IjoiYWJvdmUiO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpKTplLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpfSl9X3NldFBvc2l0aW9uKGUsaSl7bGV0W3Isb109ImJlZm9yZSI9PT1lLnhQb3NpdGlvbj9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdLFtzLGFdPSJhYm92ZSI9PT1lLnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2wsY109W3MsYV0sW2QsdV09W3Isb10scD0wO2lmKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpe2lmKHU9cj0iYmVmb3JlIj09PWUueFBvc2l0aW9uPyJzdGFydCI6ImVuZCIsbz1kPSJlbmQiPT09cj8ic3RhcnQiOiJlbmQiLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl7aWYobnVsbD09dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nKXtsZXQgZj10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuaXRlbXMuZmlyc3Q7dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nPWY/Zi5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3A6MH1wPSJib3R0b20iPT09cz90aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc6LXRoaXMuX3BhcmVudElubmVyUGFkZGluZ319ZWxzZSBlLm92ZXJsYXBUcmlnZ2VyfHwobD0idG9wIj09PXM/ImJvdHRvbSI6InRvcCIsYz0idG9wIj09PWE/ImJvdHRvbSI6InRvcCIpO2kud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6cixvcmlnaW5ZOmwsb3ZlcmxheVg6ZCxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6byxvcmlnaW5ZOmwsb3ZlcmxheVg6dSxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6cixvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6LXB9LHtvcmlnaW5YOm8sb3JpZ2luWTpjLG92ZXJsYXlYOnUsb3ZlcmxheVk6YSxvZmZzZXRZOi1wfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxpPXRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKTtyZXR1cm4gdG4oZSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZDpIdCgpLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKGtlKHM9PnMhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSxrZSgoKT0+dGhpcy5fbWVudU9wZW4pKTpIdCgpLGkpfV9oYW5kbGVNb3VzZWRvd24oZSl7THYoZSl8fCh0aGlzLl9vcGVuZWRCeT0wPT09ZS5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGU7KDEzPT09aXx8MzI9PT1pKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWkmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09aSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXshdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8KHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoa2UoZT0+ZT09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiFlLmRpc2FibGVkKSxTYSgwLEFtKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiByeSYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZShZdCgxKSxTYSgwLEFtKSxvdCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5vcGVuTWVudSgpKTp0aGlzLm9wZW5NZW51KCl9KSl9X2dldFBvcnRhbChlKXtyZXR1cm4oIXRoaXMuX3BvcnRhbHx8dGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmIT09ZS50ZW1wbGF0ZVJlZikmJih0aGlzLl9wb3J0YWw9bmV3IFlvKGUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6aSksQyhNZSksQyhzaSksQyhRcSksQyhlTiw4KSxDKGpsLDEwKSxDKFhpLDgpLEMoWHIpLEMoYXQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJkJlKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVuKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLExjPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaeGV7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1kYy1tZW51LXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLGp1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1F4ZV0saW1wb3J0czpbUGUsQmwsZm4sQ28sUGMsZm5dfSksbn0pKCk7ZnVuY3Rpb24gS3hlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBKeGUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uICR4ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsMTApfXZhciBXcz0oKCk9PihmdW5jdGlvbihuKXtuW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkRBUktfTU9ERV9PTj0xXT0iREFSS19NT0RFX09OIixuW24uREFSS19NT0RFX09GRj0yXT0iREFSS19NT0RFX09GRiJ9KFdzfHwoV3M9e30pKSxXcykpKCksWnE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1Xcyx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBGfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBXcy5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBXcy5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIFdzLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJidXR0b24iLDApLFMoMSxLeGUsMSwwLCJtYXQtaWNvbiIsMSksUygyLEp4ZSwxLDAsIm1hdC1pY29uIiwyKSxTKDMsJHhlLDEsMCwibWF0LWljb24iLDMpLGcoKSxoKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxoKDcsImxhYmVsIiksVCg4LCJCcm93c2VyIGRlZmF1bHQiKSxnKCkoKSxoKDksImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxoKDEwLCJsYWJlbCIpLFQoMTEsIkxpZ2h0IiksZygpKCksaCgxMiwiYnV0dG9uIiw3KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksaCgxMywibGFiZWwiKSxUKDE0LCJEYXJrIiksZygpKCkoKSksMiZlJiYoXygibWF0TWVudVRyaWdnZXJGb3IiLGl0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6WyRpLEVuLE5jLGpsLExjLHNyLFNyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxLcT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmRhcmtNb2RlT3ZlcnJpZGUkPXRoaXMuc3RvcmUuc2VsZWN0KGxTKS5waXBlKE4oaT0+bnVsbD09PWk/V3MuREVGQVVMVDppP1dzLkRBUktfTU9ERV9PTjpXcy5EQVJLX01PREVfT0ZGKSl9Y2hhbmdlRGFya01vZGUoZSl7bGV0IGk9bnVsbDtzd2l0Y2goZSl7Y2FzZSBXcy5ERUZBVUxUOmk9bnVsbDticmVhaztjYXNlIFdzLkRBUktfTU9ERV9PRkY6aT0hMTticmVhaztjYXNlIFdzLkRBUktfTU9ERV9PTjppPSEwfXRoaXMuc3RvcmUuZGlzcGF0Y2goV1Moe2VuYWJsZURhcmtNb2RlOml9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywiZGFya01vZGVPdmVycmlkZSIsIm9uT3ZlcnJpZGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50IiwwKSxJKCJvbk92ZXJyaWRlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2hhbmdlRGFya01vZGUobyl9KSxqKDEsImFzeW5jIiksZygpKSwyJmUmJl8oImRhcmtNb2RlT3ZlcnJpZGUiLFcoMSwxLGkuZGFya01vZGVPdmVycmlkZSQpKX0sZGVwZW5kZW5jaWVzOltacSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gbkNlKG4sdCl7fXZhciBpQ2U9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxyQ2U9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19O2Z1bmN0aW9uIG9DZShuLHQpezEmbiYmenQoMCl9dmFyIGVZPVsiKiJdLHNDZT1bInRhYkxpc3RDb250YWluZXIiXSxhQ2U9WyJ0YWJMaXN0Il0sbENlPVsidGFiTGlzdElubmVyIl0sY0NlPVsibmV4dFBhZ2luYXRvciJdLGRDZT1bInByZXZpb3VzUGFnaW5hdG9yIl0sdUNlPVsidGFiQm9keVdyYXBwZXIiXSxwQ2U9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiBmQ2Uobix0KXt9ZnVuY3Rpb24gbUNlKG4sdCl7MSZuJiZTKDAsZkNlLDAsMCwibmctdGVtcGxhdGUiLDE0KSwyJm4mJl8oImNka1BvcnRhbE91dGxldCIsdygpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiBoQ2Uobix0KXsxJm4mJlQoMCksMiZuJiZidCh3KCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gZ0NlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw2LDcpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCByPVgoZSksbz1yLiRpbXBsaWNpdCxzPXIuaW5kZXgsYT13KCksbD1pdCgxKTtyZXR1cm4gUShhLl9oYW5kbGVDbGljayhvLGwscykpfSkoImNka0ZvY3VzQ2hhbmdlIixmdW5jdGlvbihyKXtsZXQgcz1YKGUpLmluZGV4O3JldHVybiBRKHcoKS5fdGFiRm9jdXNDaGFuZ2VkKHIscykpfSksUCgyLCJzcGFuIiw4KSgzLCJkaXYiLDkpLGgoNCwic3BhbiIsMTApKDUsInNwYW4iLDExKSxTKDYsbUNlLDEsMSwibmctdGVtcGxhdGUiLDEyKSxTKDcsaENlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTMsV3QpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1pdCgxKSxvPWl0KDgpLHM9dygpO250KCJtZGMtdGFiLS1hY3RpdmUiLHMuc2VsZWN0ZWRJbmRleD09PWkpLF8oImlkIixzLl9nZXRUYWJMYWJlbElkKGkpKSgibmdDbGFzcyIsZS5sYWJlbENsYXNzKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJmaXRJbmtCYXJUb0NvbnRlbnQiLHMuZml0SW5rQmFyVG9Db250ZW50KSxCZSgidGFiSW5kZXgiLHMuX2dldFRhYkluZGV4KGkpKSgiYXJpYS1wb3NpbnNldCIsaSsxKSgiYXJpYS1zZXRzaXplIixzLl90YWJzLmxlbmd0aCkoImFyaWEtY29udHJvbHMiLHMuX2dldFRhYkNvbnRlbnRJZChpKSkoImFyaWEtc2VsZWN0ZWQiLHMuc2VsZWN0ZWRJbmRleD09PWkpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsIWUuYXJpYUxhYmVsJiZlLmFyaWFMYWJlbGxlZGJ5P2UuYXJpYUxhYmVsbGVkYnk6bnVsbCksdigzKSxfKCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGUuZGlzYWJsZWR8fHMuZGlzYWJsZVJpcHBsZSksdigzKSxfKCJuZ0lmIixlLnRlbXBsYXRlTGFiZWwpKCJuZ0lmRWxzZSIsbyl9fWZ1bmN0aW9uIF9DZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC10YWItYm9keSIsMTUpLEkoIl9vbkNlbnRlcmVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLl9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpKX0pKCJfb25DZW50ZXJpbmciLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KCk7bnQoIm1hdC1tZGMtdGFiLWJvZHktYWN0aXZlIixyLnNlbGVjdGVkSW5kZXg9PT1pKSxfKCJpZCIsci5fZ2V0VGFiQ29udGVudElkKGkpKSgibmdDbGFzcyIsZS5ib2R5Q2xhc3MpKCJjb250ZW50IixlLmNvbnRlbnQpKCJwb3NpdGlvbiIsZS5wb3NpdGlvbikoIm9yaWdpbiIsZS5vcmlnaW4pKCJhbmltYXRpb25EdXJhdGlvbiIsci5hbmltYXRpb25EdXJhdGlvbikoInByZXNlcnZlQ29udGVudCIsci5wcmVzZXJ2ZUNvbnRlbnQpLEJlKCJ0YWJpbmRleCIsbnVsbCE9ci5jb250ZW50VGFiSW5kZXgmJnIuc2VsZWN0ZWRJbmRleD09PWk/ci5jb250ZW50VGFiSW5kZXg6bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsci5fZ2V0VGFiTGFiZWxJZChpKSl9fXZhciBiQ2U9e3RyYW5zbGF0ZVRhYjpfcigidHJhbnNsYXRlVGFiIixbd2koImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSx3aSgibGVmdCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSx3aSgicmlnaHQiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxnaSgiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixDaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxnaSgidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxDaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksZ2koInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksQ2koInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LHZDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcHN7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLG8pLHRoaXMuX2hvc3Q9cix0aGlzLl9jZW50ZXJpbmdTdWI9TW4uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj1Nbi5FTVBUWX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fY2VudGVyaW5nU3ViPXRoaXMuX2hvc3QuX2JlZm9yZUNlbnRlcmluZy5waXBlKHFuKHRoaXMuX2hvc3QuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5faG9zdC5fcG9zaXRpb24pKSkuc3Vic2NyaWJlKGU9PntlJiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pLHRoaXMuX2xlYXZpbmdTdWI9dGhpcy5faG9zdC5fYWZ0ZXJMZWF2aW5nQ2VudGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hvc3QucHJlc2VydmVDb250ZW50fHx0aGlzLmRldGFjaCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2NlbnRlcmluZ1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX2xlYXZpbmdTdWIudW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbyksQyhzaSksQygkbigoKT0+dFkpKSxDKEx0KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkJvZHlIb3N0IiwiIl1dLGZlYXR1cmVzOltLZV19KSxufSkoKSx5Q2U9KCgpPT57Y2xhc3MgbntzZXQgcG9zaXRpb24oZSl7dGhpcy5fcG9zaXRpb25JbmRleD1lLHRoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKCl9Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaXI9aSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249TW4uRU1QVFksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGU9bmV3IEllLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBGLHRoaXMuX2JlZm9yZUNlbnRlcmluZz1uZXcgRix0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXI9bmV3IEYsdGhpcy5fb25DZW50ZXJlZD1uZXcgRighMCksdGhpcy5hbmltYXRpb25EdXJhdGlvbj0iNTAwbXMiLHRoaXMucHJlc2VydmVDb250ZW50PSExLGkmJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249aS5jaGFuZ2Uuc3Vic2NyaWJlKG89Pnt0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShvKSxyLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoWW4oKG8scyk9Pm8uZnJvbVN0YXRlPT09cy5mcm9tU3RhdGUmJm8udG9TdGF0ZT09PXMudG9TdGF0ZSkpLnN1YnNjcmliZShvPT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pfW5nT25Jbml0KCl7ImNlbnRlciI9PXRoaXMuX3Bvc2l0aW9uJiZudWxsIT10aGlzLm9yaWdpbiYmKHRoaXMuX3Bvc2l0aW9uPXRoaXMuX2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4odGhpcy5vcmlnaW4pKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLmNvbXBsZXRlKCl9X29uVHJhbnNsYXRlVGFiU3RhcnRlZChlKXtsZXQgaT10aGlzLl9pc0NlbnRlclBvc2l0aW9uKGUudG9TdGF0ZSk7dGhpcy5fYmVmb3JlQ2VudGVyaW5nLmVtaXQoaSksaSYmdGhpcy5fb25DZW50ZXJpbmcuZW1pdCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KX1fZ2V0TGF5b3V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9X2lzQ2VudGVyUG9zaXRpb24oZSl7cmV0dXJuImNlbnRlciI9PWV8fCJsZWZ0LW9yaWdpbi1jZW50ZXIiPT1lfHwicmlnaHQtb3JpZ2luLWNlbnRlciI9PWV9X2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpe3RoaXMuX3Bvc2l0aW9uPXRoaXMuX3Bvc2l0aW9uSW5kZXg8MD8ibHRyIj09ZT8ibGVmdCI6InJpZ2h0Ijp0aGlzLl9wb3NpdGlvbkluZGV4PjA/Imx0ciI9PWU/InJpZ2h0IjoibGVmdCI6ImNlbnRlciJ9X2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4oZSl7bGV0IGk9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWkmJmU8PTB8fCJydGwiPT1pJiZlPjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKFhpLDgpLEMoJHQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixpbnB1dHM6e19jb250ZW50OlsiY29udGVudCIsIl9jb250ZW50Il0sb3JpZ2luOiJvcmlnaW4iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLHBvc2l0aW9uOiJwb3NpdGlvbiJ9LG91dHB1dHM6e19vbkNlbnRlcmluZzoiX29uQ2VudGVyaW5nIixfYmVmb3JlQ2VudGVyaW5nOiJfYmVmb3JlQ2VudGVyaW5nIixfYWZ0ZXJMZWF2aW5nQ2VudGVyOiJfYWZ0ZXJMZWF2aW5nQ2VudGVyIixfb25DZW50ZXJlZDoiX29uQ2VudGVyZWQifX0pLG59KSgpLHRZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5Q2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSxyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyhYaSw4KSxDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1ib2R5Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UocHMsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fcG9ydGFsSG9zdD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy10YWItYm9keSJdLGZlYXR1cmVzOltLZV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbImNka1Njcm9sbGFibGUiLCIiLDEsIm1hdC1tZGMtdGFiLWJvZHktY29udGVudCJdLFsiY29udGVudCIsIiJdLFsibWF0VGFiQm9keUhvc3QiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCwxKSxJKCJAdHJhbnNsYXRlVGFiLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25UcmFuc2xhdGVUYWJTdGFydGVkKG8pfSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQobyl9KSxTKDIsbkNlLDAsMCwibmctdGVtcGxhdGUiLDIpLGcoKSksMiZlJiZfKCJAdHJhbnNsYXRlVGFiIixxcigzLHJDZSxpLl9wb3NpdGlvbixJbigxLGlDZSxpLmFuaW1hdGlvbkR1cmF0aW9uKSkpfSxkZXBlbmRlbmNpZXM6W3ZDZV0sc3R5bGVzOlsnLm1hdC1tZGMtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LW1kYy10YWItYm9keS5tYXQtbWRjLXRhYi1ib2R5LWFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87ei1pbmRleDoxO2ZsZXgtZ3JvdzoxfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtbWRjLXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LW1kYy10YWItYm9keS5tYXQtbWRjLXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0ubWF0LW1kYy10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC1tZGMtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtbWRjLXRhYi1ib2R5LWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtbWRjLXRhYi1ib2R5LWNvbnRlbnRbc3R5bGUqPSJ2aXNpYmlsaXR5OiBoaWRkZW4iXXtkaXNwbGF5Om5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYkNlLnRyYW5zbGF0ZVRhYl19fSksbn0pKCkseENlPW5ldyBpZSgiTWF0VGFiQ29udGVudCIpLENDZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudGVtcGxhdGU9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJDb250ZW50IiwiIl1dLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6eENlLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksTUNlPW5ldyBpZSgiTWF0VGFiTGFiZWwiKSxuWT1uZXcgaWUoIk1BVF9UQUIiKSxyTj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgazd7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY2xvc2VzdFRhYj1yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKFNpKSxDKHNpKSxDKG5ZLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LXRhYi1sYWJlbCIsIiJdLFsiIiwibWF0VGFiTGFiZWwiLCIiXV0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpNQ2UsdXNlRXhpc3Rpbmc6bn1dKSxLZV19KSxufSkoKSx0Tj0ibWRjLXRhYi1pbmRpY2F0b3ItLWFjdGl2ZSIsSnE9Im1kYy10YWItaW5kaWNhdG9yLS1uby10cmFuc2l0aW9uIjtmdW5jdGlvbiBpWShuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2ZpdFRvQ29udGVudD0hMX1nZXQgZml0SW5rQmFyVG9Db250ZW50KCl7cmV0dXJuIHRoaXMuX2ZpdFRvQ29udGVudH1zZXQgZml0SW5rQmFyVG9Db250ZW50KHQpe2xldCBlPVJ0KHQpO3RoaXMuX2ZpdFRvQ29udGVudCE9PWUmJih0aGlzLl9maXRUb0NvbnRlbnQ9ZSx0aGlzLl9pbmtCYXJFbGVtZW50JiZ0aGlzLl9hcHBlbmRJbmtCYXJFbGVtZW50KCkpfWFjdGl2YXRlSW5rQmFyKHQpe2xldCBlPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCF0fHwhZS5nZXRCb3VuZGluZ0NsaWVudFJlY3R8fCF0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudClyZXR1cm4gdm9pZCBlLmNsYXNzTGlzdC5hZGQodE4pO2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10LndpZHRoL2kud2lkdGgsbz10LmxlZnQtaS5sZWZ0O2UuY2xhc3NMaXN0LmFkZChKcSksdGhpcy5faW5rQmFyQ29udGVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInRyYW5zZm9ybSIsYHRyYW5zbGF0ZVgoJHtvfXB4KSBzY2FsZVgoJHtyfSlgKSxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGUuY2xhc3NMaXN0LnJlbW92ZShKcSksZS5jbGFzc0xpc3QuYWRkKHROKSx0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgidHJhbnNmb3JtIiwiIil9ZGVhY3RpdmF0ZUlua0Jhcigpe3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodE4pfW5nT25Jbml0KCl7dGhpcy5fY3JlYXRlSW5rQmFyRWxlbWVudCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW5rQmFyRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5faW5rQmFyRWxlbWVudD10aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudD1udWxsfV9jcmVhdGVJbmtCYXJFbGVtZW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7dGhpcy5faW5rQmFyRWxlbWVudD10LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudD10LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx0aGlzLl9pbmtCYXJFbGVtZW50LmNsYXNzTmFtZT0ibWRjLXRhYi1pbmRpY2F0b3IiLHRoaXMuX2lua0JhckNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZT0ibWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQgbWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZSIsdGhpcy5faW5rQmFyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9pbmtCYXJDb250ZW50RWxlbWVudCksdGhpcy5fYXBwZW5kSW5rQmFyRWxlbWVudCgpfV9hcHBlbmRJbmtCYXJFbGVtZW50KCl7KHRoaXMuX2ZpdFRvQ29udGVudD90aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWRjLXRhYl9fY29udGVudCIpOnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLl9pbmtCYXJFbGVtZW50KX19fW5ldyBpZSgiTWF0SW5rQmFyUG9zaXRpb25lciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gdD0+KHtsZWZ0OnQ/KHQub2Zmc2V0TGVmdHx8MCkrInB4IjoiMCIsd2lkdGg6dD8odC5vZmZzZXRXaWR0aHx8MCkrInB4IjoiMCJ9KX19KTt2YXIgU0NlPXNvKGNsYXNze30pLEVDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgU0Nle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGZlYXR1cmVzOltLZV19KSxufSkoKSxUQ2U9aVkoRUNlKSxyWT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVENle31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKEJlKCJhcmlhLWRpc2FibGVkIiwhIWkuZGlzYWJsZWQpLG50KCJtYXQtbWRjLXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZml0SW5rQmFyVG9Db250ZW50OiJmaXRJbmtCYXJUb0NvbnRlbnQifSxmZWF0dXJlczpbS2VdfSksbn0pKCksRENlPXNvKGNsYXNze30pLG9ZPW5ldyBpZSgiTUFUX1RBQl9HUk9VUCIpLElDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRENle2dldCBjb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRQb3J0YWx9Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl9jbG9zZXN0VGFiR3JvdXA9aSx0aGlzLnRleHRMYWJlbD0iIix0aGlzLl9jb250ZW50UG9ydGFsPW51bGwsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBJZSx0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy5vcmlnaW49bnVsbCx0aGlzLmlzQWN0aXZlPSExfW5nT25DaGFuZ2VzKGUpeyhlLmhhc093blByb3BlcnR5KCJ0ZXh0TGFiZWwiKXx8ZS5oYXNPd25Qcm9wZXJ0eSgiZGlzYWJsZWQiKSkmJnRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1uZ09uSW5pdCgpe3RoaXMuX2NvbnRlbnRQb3J0YWw9bmV3IFlvKHRoaXMuX2V4cGxpY2l0Q29udGVudHx8dGhpcy5faW1wbGljaXRDb250ZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpfV9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl7ZSYmZS5fY2xvc2VzdFRhYj09PXRoaXMmJih0aGlzLl90ZW1wbGF0ZUxhYmVsPWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSxDKG9ZLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bix2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFNpLDcpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX2ltcGxpY2l0Q29udGVudD1yLmZpcnN0KX19LGlucHV0czp7dGV4dExhYmVsOlsibGFiZWwiLCJ0ZXh0TGFiZWwiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGxhYmVsQ2xhc3M6ImxhYmVsQ2xhc3MiLGJvZHlDbGFzczoiYm9keUNsYXNzIn0sZmVhdHVyZXM6W0tlLEd0XX0pLG59KSgpLHN5PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBJQ2V7Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9WG4obikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihUaShyLENDZSw3LFNpKSxUaShyLHJOLDUpKSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9leHBsaWNpdENvbnRlbnQ9by5maXJzdCksU2Uobz1FZSgpKSYmKGkudGVtcGxhdGVMYWJlbD1vLmZpcnN0KX19LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sZXhwb3J0QXM6WyJtYXRUYWIiXSxmZWF0dXJlczpbUXQoW3twcm92aWRlOm5ZLHVzZUV4aXN0aW5nOm59XSksS2VdLG5nQ29udGVudFNlbGVjdG9yczplWSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUygwLG9DZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSwkcT1xbyh7cGFzc2l2ZTohMH0pLHNZPSgoKT0+e2NsYXNzIG57Z2V0IGRpc2FibGVQYWdpbmF0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVQYWdpbmF0aW9ufXNldCBkaXNhYmxlUGFnaW5hdGlvbihlKXt0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj1SdChlKX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KGUpe2U9X2koZSksdGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSEwLHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZSkpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3ZpZXdwb3J0UnVsZXI9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2FuaW1hdGlvbk1vZGU9bCx0aGlzLl9zY3JvbGxEaXN0YW5jZT0wLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSWUsdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9ITAsdGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMCx0aGlzLl9zdG9wU2Nyb2xsaW5nPW5ldyBJZSx0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9zZWxlY3RlZEluZGV4PTAsdGhpcy5zZWxlY3RGb2N1c2VkSW5kZXg9bmV3IEYsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEYscy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e21pKGUubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe21pKHRoaXMuX3ByZXZpb3VzUGFnaW5hdG9yLm5hdGl2ZUVsZW1lbnQsInRvdWNoc3RhcnQiLCRxKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLG1pKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIsJHEpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIil9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtsZXQgZT10aGlzLl9kaXI/dGhpcy5fZGlyLmNoYW5nZTpIdCgibHRyIiksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLHI9KCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX07dGhpcy5fa2V5TWFuYWdlcj1uZXcgc2codGhpcy5faXRlbXMpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpLndpdGhIb21lQW5kRW5kKCkud2l0aFdyYXAoKS5za2lwUHJlZGljYXRlKCgpPT4hMSksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFl0KDEpKS5zdWJzY3JpYmUociksdG4oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuaW5kZXhGb2N1c2VkLmVtaXQobyksdGhpcy5fc2V0VGFiRm9jdXMobyl9KX1faXRlbXNSZXNpemVkKCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIFJlc2l6ZU9ic2VydmVyP0pyOnRoaXMuX2l0ZW1zLmNoYW5nZXMucGlwZShxbih0aGlzLl9pdGVtcyksSm4oZT0+bmV3IEt0KGk9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPW5ldyBSZXNpemVPYnNlcnZlcihvPT5pLm5leHQobykpO3JldHVybiBlLmZvckVhY2gobz0+ci5vYnNlcnZlKG8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSksKCk9PntyLmRpc2Nvbm5lY3QoKX19KSkpLGlhKDEpLGtlKGU9PmUuc29tZShpPT5pLmNvbnRlbnRSZWN0LndpZHRoPjAmJmkuY29udGVudFJlY3QuaGVpZ2h0PjApKSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdGFiTGFiZWxDb3VudCE9dGhpcy5faXRlbXMubGVuZ3RoJiYodGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fdGFiTGFiZWxDb3VudD10aGlzLl9pdGVtcy5sZW5ndGgsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkJiYodGhpcy5fc2Nyb2xsVG9MYWJlbCh0aGlzLl9zZWxlY3RlZEluZGV4KSx0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCYmKHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2tleU1hbmFnZXI/LmRlc3Ryb3koKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bihlKXtpZighdnIoZSkpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDMyOmlmKHRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCl7bGV0IGk9dGhpcy5faXRlbXMuZ2V0KHRoaXMuZm9jdXNJbmRleCk7aSYmIWkuZGlzYWJsZWQmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKX1icmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7cmV0dXJuIXRoaXMuX2l0ZW1zfHwhIXRoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXX1fc2V0VGFiRm9jdXMoZSl7aWYodGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fc2Nyb2xsVG9MYWJlbChlKSx0aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoKXt0aGlzLl9pdGVtcy50b0FycmF5KClbZV0uZm9jdXMoKTtsZXQgaT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7aS5zY3JvbGxMZWZ0PSJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8wOmkuc2Nyb2xsV2lkdGgtaS5vZmZzZXRXaWR0aH19X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2xldCBlPXRoaXMuc2Nyb2xsRGlzdGFuY2UsaT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy1lOmU7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoaSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKGUpe3RoaXMuX3Njcm9sbFRvKGUpfV9zY3JvbGxIZWFkZXIoZSl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09ZT8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKGUpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcihlKX1fc2Nyb2xsVG9MYWJlbChlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgaT10aGlzLl9pdGVtcz90aGlzLl9pdGVtcy50b0FycmF5KClbZV06bnVsbDtpZighaSlyZXR1cm47bGV0IGEsbCxyPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOnN9PWkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8oYT1vLGw9YStzKToobD10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLGE9bC1zKTtsZXQgYz10aGlzLnNjcm9sbERpc3RhbmNlLGQ9dGhpcy5zY3JvbGxEaXN0YW5jZStyO2E8Yz90aGlzLnNjcm9sbERpc3RhbmNlLT1jLWE6bD5kJiYodGhpcy5zY3JvbGxEaXN0YW5jZSs9TWF0aC5taW4obC1kLGEtYykpfV9jaGVja1BhZ2luYXRpb25FbmFibGVkKCl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbil0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPSExO2Vsc2V7bGV0IGU9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO2V8fCh0aGlzLnNjcm9sbERpc3RhbmNlPTApLGUhPT10aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzJiZ0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzPWV9fV9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCl7dGhpcy5kaXNhYmxlUGFnaW5hdGlvbj90aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMDoodGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0wPT10aGlzLnNjcm9sbERpc3RhbmNlLHRoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLnNjcm9sbERpc3RhbmNlPT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGgtdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwwfV9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKXtsZXQgZT10aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVt0aGlzLnNlbGVjdGVkSW5kZXhdOm51bGwsaT1lP2UuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Om51bGw7aT90aGlzLl9pbmtCYXIuYWxpZ25Ub0VsZW1lbnQoaSk6dGhpcy5faW5rQmFyLmhpZGUoKX1fc3RvcEludGVydmFsKCl7dGhpcy5fc3RvcFNjcm9sbGluZy5uZXh0KCl9X2hhbmRsZVBhZ2luYXRvclByZXNzKGUsaSl7aSYmbnVsbCE9aS5idXR0b24mJjAhPT1pLmJ1dHRvbnx8KHRoaXMuX3N0b3BJbnRlcnZhbCgpLG5hKDY1MCwxMDApLnBpcGUob3QodG4odGhpcy5fc3RvcFNjcm9sbGluZyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKCgpPT57bGV0e21heFNjcm9sbERpc3RhbmNlOnIsZGlzdGFuY2U6b309dGhpcy5fc2Nyb2xsSGVhZGVyKGUpOygwPT09b3x8bz49cikmJnRoaXMuX3N0b3BJbnRlcnZhbCgpfSkpfV9zY3JvbGxUbyhlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybnttYXhTY3JvbGxEaXN0YW5jZTowLGRpc3RhbmNlOjB9O2xldCBpPXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4oaSxlKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkPSEwLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx7bWF4U2Nyb2xsRGlzdGFuY2U6aSxkaXN0YW5jZTp0aGlzLl9zY3JvbGxEaXN0YW5jZX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoanMpLEMoWGksOCksQyhhdCksQyhHbiksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24ifX0pLG59KSgpLFBDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgc1l7Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZShlKXt0aGlzLl9kaXNhYmxlUmlwcGxlPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITF9X2l0ZW1TZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoanMpLEMoWGksOCksQyhhdCksQyhHbiksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLE9DZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUENle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2lua0Jhcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faXRlbXM9dH1oaWRlKCl7dGhpcy5faXRlbXMuZm9yRWFjaCh0PT50LmRlYWN0aXZhdGVJbmtCYXIoKSl9YWxpZ25Ub0VsZW1lbnQodCl7bGV0IGU9dGhpcy5faXRlbXMuZmluZChyPT5yLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD09PXQpLGk9dGhpcy5fY3VycmVudEl0ZW07aWYoaT8uZGVhY3RpdmF0ZUlua0JhcigpLGUpe2xldCByPWk/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/LigpO2UuYWN0aXZhdGVJbmtCYXIociksdGhpcy5fY3VycmVudEl0ZW09ZX19fSh0aGlzLl9pdGVtcyksc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoanMpLEMoWGksOCksQyhhdCksQyhHbiksQyhoaSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1oZWFkZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmVGkocixyWSw0KSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKHNDZSw3KSxHZShhQ2UsNyksR2UobENlLDcpLEdlKGNDZSw1KSxHZShkQ2UsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX3RhYkxpc3RDb250YWluZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RhYkxpc3Q9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RhYkxpc3RJbm5lcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5fbmV4dFBhZ2luYXRvcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5fcHJldmlvdXNQYWdpbmF0b3I9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtdGFiLWhlYWRlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsaS5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC1tZGMtdGFiLWhlYWRlci1ydGwiLCJydGwiPT1pLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9LGlucHV0czp7c2VsZWN0ZWRJbmRleDoic2VsZWN0ZWRJbmRleCJ9LG91dHB1dHM6e3NlbGVjdEZvY3VzZWRJbmRleDoic2VsZWN0Rm9jdXNlZEluZGV4IixpbmRleEZvY3VzZWQ6ImluZGV4Rm9jdXNlZCJ9LGZlYXR1cmVzOltLZV0sbmdDb250ZW50U2VsZWN0b3JzOmVZLGRlY2xzOjEzLHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJjbGljayIsIm1vdXNlZG93biIsInRvdWNoZW5kIl0sWyJwcmV2aW91c1BhZ2luYXRvciIsIiJdLFsxLCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIl0sWzEsIm1hdC1tZGMtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC1tZGMtdGFiLWxpc3QiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJ0YWJMaXN0IiwiIl0sWzEsIm1hdC1tZGMtdGFiLWxhYmVscyJdLFsidGFiTGlzdElubmVyIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwibWF0LXJpcHBsZSIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXIiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxoKDAsImJ1dHRvbiIsMCwxKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLFAoMiwiZGl2IiwyKSxnKCksaCgzLCJkaXYiLDMsNCksSSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxoKDUsImRpdiIsNSw2KSxJKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksaCg3LCJkaXYiLDcsOCksenQoOSksZygpKCkoKSxoKDEwLCJidXR0b24iLDksMTApLEkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIsbyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLFAoMTIsImRpdiIsMiksZygpKSwyJmUmJihudCgibWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLF8oIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCksdigzKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSx2KDcpLG50KCJtYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEFmdGVyKSxfKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEFmdGVyfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEFmdGVyfHxudWxsKSl9LGRlcGVuZGVuY2llczpbbW8sUDFdLHN0eWxlczpbIi5tYXQtbWRjLXRhYi1oZWFkZXJ7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RvdWNoLWFjdGlvbjpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3g7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjB9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjEyfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LW1kYy10YWItaGVhZGVyLXJ0bCAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbnt0cmFuc2Zvcm06cm90YXRlKC0xMzVkZWcpfS5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctcmlnaHQ6NHB4fS5tYXQtbWRjLXRhYi1oZWFkZXItcnRsIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4IDJweCAwIDA7aGVpZ2h0OjhweDt3aWR0aDo4cHh9Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntvcGFjaXR5Oi40fS5tYXQtbWRjLXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1tZGMtdGFiLWxpc3R7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzcGFuLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50LC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzcGFuLm1kYy10YWJfX3RleHQtbGFiZWx7dHJhbnNpdGlvbjpub25lfS5tYXQtbWRjLXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC1tZGMtdGFiLWxhYmVsc3tkaXNwbGF5OmZsZXg7ZmxleDoxIDAgYXV0b31bbWF0LWFsaWduLXRhYnM9Y2VudGVyXT4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtbWRjLXRhYjo6YmVmb3Jle21hcmdpbjo1cHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1kYy10YWJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpHcmF5VGV4dH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxhWT1uZXcgaWUoIk1BVF9UQUJTX0NPTkZJRyIpLGtDZT0wLEZDZT16cyh1cyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxOQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZDZXtnZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9UnQoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PV9pKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9X2koZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVJ0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVJ0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtpLnJlbW92ZSgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmFkZCgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1vLHRoaXMuX3RhYnM9bmV3IE9hLHRoaXMuX2luZGV4VG9TZWxlY3Q9MCx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPU1uLkVNUFRZLHRoaXMuX2R5bmFtaWNIZWlnaHQ9ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD1udWxsLHRoaXMuaGVhZGVyUG9zaXRpb249ImFib3ZlIix0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9ITEsdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlPW5ldyBGLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEYsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBGLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2U9bmV3IEYoITApLHRoaXMuX2dyb3VwSWQ9a0NlKyssdGhpcy5hbmltYXRpb25EdXJhdGlvbj1yJiZyLmFuaW1hdGlvbkR1cmF0aW9uP3IuYW5pbWF0aW9uRHVyYXRpb246IjUwMG1zIix0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSEoIXJ8fG51bGw9PXIuZGlzYWJsZVBhZ2luYXRpb24pJiZyLmRpc2FibGVQYWdpbmF0aW9uLHRoaXMuZHluYW1pY0hlaWdodD0hKCFyfHxudWxsPT1yLmR5bmFtaWNIZWlnaHQpJiZyLmR5bmFtaWNIZWlnaHQsdGhpcy5jb250ZW50VGFiSW5kZXg9cj8uY29udGVudFRhYkluZGV4Pz9udWxsLHRoaXMucHJlc2VydmVDb250ZW50PSEhcj8ucHJlc2VydmVDb250ZW50fW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT1lKXtsZXQgaT1udWxsPT10aGlzLl9zZWxlY3RlZEluZGV4O2lmKCFpKXt0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpO2xldCByPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ci5zdHlsZS5taW5IZWlnaHQ9ci5jbGllbnRIZWlnaHQrInB4In1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fdGFicy5mb3JFYWNoKChyLG8pPT5yLmlzQWN0aXZlPW89PT1lKSxpfHwodGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoZSksdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQ9IiIpfSl9dGhpcy5fdGFicy5mb3JFYWNoKChpLHIpPT57aS5wb3NpdGlvbj1yLWUsbnVsbCE9dGhpcy5fc2VsZWN0ZWRJbmRleCYmMD09aS5wb3NpdGlvbiYmIWkub3JpZ2luJiYoaS5vcmlnaW49ZS10aGlzLl9zZWxlY3RlZEluZGV4KX0pLHRoaXMuX3NlbGVjdGVkSW5kZXghPT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCksdGhpcy5fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPXRoaXMuX3RhYnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKGU9PT10aGlzLl9zZWxlY3RlZEluZGV4KXtsZXQgcixpPXRoaXMuX3RhYnMudG9BcnJheSgpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb10uaXNBY3RpdmUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fc2VsZWN0ZWRJbmRleD1vLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCxyPWlbb107YnJlYWt9IXImJmlbZV0mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpW2VdLmlzQWN0aXZlPSEwLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9KX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKXt0aGlzLl9hbGxUYWJzLmNoYW5nZXMucGlwZShxbih0aGlzLl9hbGxUYWJzKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl90YWJzLnJlc2V0KGUuZmlsdGVyKGk9PmkuX2Nsb3Nlc3RUYWJHcm91cD09PXRoaXN8fCFpLl9jbG9zZXN0VGFiR3JvdXApKSx0aGlzLl90YWJzLm5vdGlmeU9uQ2hhbmdlcygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci51cGRhdGVQYWdpbmF0aW9uKCl9Zm9jdXNUYWIoZSl7bGV0IGk9dGhpcy5fdGFiSGVhZGVyO2kmJihpLmZvY3VzSW5kZXg9ZSl9X2ZvY3VzQ2hhbmdlZChlKXt0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PWUsdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGlOO3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj10biguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2kuZm9jdXNJbmRleD1yLGUuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9cil9X2dldFRhYkluZGV4KGUpe3JldHVybiBlPT09KHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg/P3RoaXMuc2VsZWN0ZWRJbmRleCk/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKGUsaSl7ZSYmIm1vdXNlIiE9PWUmJiJ0b3VjaCIhPT1lJiYodGhpcy5fdGFiSGVhZGVyLmZvY3VzSW5kZXg9aSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoJHQpLEMoYVksOCksQyhoaSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntkeW5hbWljSGVpZ2h0OiJkeW5hbWljSGVpZ2h0IixzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4IixoZWFkZXJQb3NpdGlvbjoiaGVhZGVyUG9zaXRpb24iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIsY29udGVudFRhYkluZGV4OiJjb250ZW50VGFiSW5kZXgiLGRpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLGJhY2tncm91bmRDb2xvcjoiYmFja2dyb3VuZENvbG9yIn0sb3V0cHV0czp7c2VsZWN0ZWRJbmRleENoYW5nZToic2VsZWN0ZWRJbmRleENoYW5nZSIsZm9jdXNDaGFuZ2U6ImZvY3VzQ2hhbmdlIixhbmltYXRpb25Eb25lOiJhbmltYXRpb25Eb25lIixzZWxlY3RlZFRhYkNoYW5nZToic2VsZWN0ZWRUYWJDaGFuZ2UifSxmZWF0dXJlczpbS2VdfSksbn0pKCksYkU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5DZXtnZXQgZml0SW5rQmFyVG9Db250ZW50KCl7cmV0dXJuIHRoaXMuX2ZpdElua0JhclRvQ29udGVudH1zZXQgZml0SW5rQmFyVG9Db250ZW50KGUpe3RoaXMuX2ZpdElua0JhclRvQ29udGVudD1SdChlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgc3RyZXRjaFRhYnMoKXtyZXR1cm4gdGhpcy5fc3RyZXRjaFRhYnN9c2V0IHN0cmV0Y2hUYWJzKGUpe3RoaXMuX3N0cmV0Y2hUYWJzPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2ZpdElua0JhclRvQ29udGVudD0hMSx0aGlzLl9zdHJldGNoVGFicz0hMCx0aGlzLmZpdElua0JhclRvQ29udGVudD0hKCFyfHxudWxsPT1yLmZpdElua0JhclRvQ29udGVudCkmJnIuZml0SW5rQmFyVG9Db250ZW50fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKCR0KSxDKGFZLDgpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmVGkocixzeSw1KSwyJmUpe2xldCBvO1NlKG89RWUoKSkmJihpLl9hbGxUYWJzPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UodUNlLDUpLEdlKHBDZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fdGFiQm9keVdyYXBwZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuX3RhYkhlYWRlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy10YWItZ3JvdXAiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoIm1hdC1tZGMtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IixpLmR5bmFtaWNIZWlnaHQpKCJtYXQtbWRjLXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIiLCJiZWxvdyI9PT1pLmhlYWRlclBvc2l0aW9uKSgibWF0LW1kYy10YWItZ3JvdXAtc3RyZXRjaC10YWJzIixpLnN0cmV0Y2hUYWJzKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGZpdElua0JhclRvQ29udGVudDoiZml0SW5rQmFyVG9Db250ZW50IixzdHJldGNoVGFiczpbIm1hdC1zdHJldGNoLXRhYnMiLCJzdHJldGNoVGFicyJdfSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpvWSx1c2VFeGlzdGluZzpufV0pLEtlXSxkZWNsczo2LHZhcnM6Nyxjb25zdHM6W1szLCJzZWxlY3RlZEluZGV4IiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiaW5kZXhGb2N1c2VkIiwic2VsZWN0Rm9jdXNlZEluZGV4Il0sWyJ0YWJIZWFkZXIiLCIiXSxbImNsYXNzIiwibWRjLXRhYiBtYXQtbWRjLXRhYiBtYXQtbWRjLWZvY3VzLWluZGljYXRvciIsInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwzLCJpZCIsIm1kYy10YWItLWFjdGl2ZSIsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsImZpdElua0JhclRvQ29udGVudCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXIiXSxbInRhYkJvZHlXcmFwcGVyIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwibWF0LW1kYy10YWItYm9keS1hY3RpdmUiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMSwibWRjLXRhYiIsIm1hdC1tZGMtdGFiIiwibWF0LW1kYy1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwibmdDbGFzcyIsImRpc2FibGVkIiwiZml0SW5rQmFyVG9Db250ZW50IiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSJdLFsidGFiTm9kZSIsIiJdLFsxLCJtZGMtdGFiX19yaXBwbGUiXSxbIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC1tZGMtdGFiLXJpcHBsZSIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1kYy10YWJfX2NvbnRlbnQiXSxbMSwibWRjLXRhYl9fdGV4dC1sYWJlbCJdLFszLCJuZ0lmIiwibmdJZkVsc2UiXSxbInRhYlRleHRMYWJlbCIsIiJdLFszLCJjZGtQb3J0YWxPdXRsZXQiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWF0LXRhYi1oZWFkZXIiLDAsMSksSSgiaW5kZXhGb2N1c2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKG8pfSkoInNlbGVjdEZvY3VzZWRJbmRleCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0ZWRJbmRleD1vfSksUygyLGdDZSw5LDE3LCJkaXYiLDIpLGcoKSxoKDMsImRpdiIsMyw0KSxTKDUsX0NlLDEsMTEsIm1hdC10YWItYm9keSIsNSksZygpKSwyJmUmJihfKCJzZWxlY3RlZEluZGV4IixpLnNlbGVjdGVkSW5kZXh8fDApKCJkaXNhYmxlUmlwcGxlIixpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlUGFnaW5hdGlvbiIsaS5kaXNhYmxlUGFnaW5hdGlvbiksdigyKSxfKCJuZ0Zvck9mIixpLl90YWJzKSx2KDEpLG50KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpLHYoMiksXygibmdGb3JPZiIsaS5fdGFicykpfSxkZXBlbmRlbmNpZXM6W3luLG5uLEZlLHBzLG1vLHk3LHRZLHJZLE9DZV0sc3R5bGVzOlsnLm1kYy10YWJ7bWluLXdpZHRoOjkwcHg7cGFkZGluZy1yaWdodDoyNHB4O3BhZGRpbmctbGVmdDoyNHB4O2Rpc3BsYXk6ZmxleDtmbGV4OjEgMCBhdXRvO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3otaW5kZXg6MX0ubWRjLXRhYjo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9Lm1kYy10YWJbaGlkZGVuXXtkaXNwbGF5Om5vbmV9Lm1kYy10YWItLW1pbi13aWR0aHtmbGV4OjAgMSBhdXRvfS5tZGMtdGFiX19jb250ZW50e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lfS5tZGMtdGFiX190ZXh0LWxhYmVse3RyYW5zaXRpb246MTUwbXMgY29sb3IgbGluZWFyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7ei1pbmRleDoyfS5tZGMtdGFiX19pY29ue3RyYW5zaXRpb246MTUwbXMgY29sb3IgbGluZWFyO3otaW5kZXg6Mn0ubWRjLXRhYi0tc3RhY2tlZCAubWRjLXRhYl9fY29udGVudHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1kYy10YWItLXN0YWNrZWQgLm1kYy10YWJfX3RleHQtbGFiZWx7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjRweH0ubWRjLXRhYi0tYWN0aXZlIC5tZGMtdGFiX190ZXh0LWxhYmVsLC5tZGMtdGFiLS1hY3RpdmUgLm1kYy10YWJfX2ljb257dHJhbnNpdGlvbi1kZWxheToxMDBtc30ubWRjLXRhYjpub3QoLm1kYy10YWItLXN0YWNrZWQpIC5tZGMtdGFiX19pY29uKy5tZGMtdGFiX190ZXh0LWxhYmVse3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDowfVtkaXI9cnRsXSAubWRjLXRhYjpub3QoLm1kYy10YWItLXN0YWNrZWQpIC5tZGMtdGFiX19pY29uKy5tZGMtdGFiX190ZXh0LWxhYmVsLC5tZGMtdGFiOm5vdCgubWRjLXRhYi0tc3RhY2tlZCkgLm1kYy10YWJfX2ljb24rLm1kYy10YWJfX3RleHQtbGFiZWxbZGlyPXJ0bF17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDo4cHh9Lm1kYy10YWItaW5kaWNhdG9yIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci10b3Atd2lkdGg6MnB4fS5tZGMtdGFiLWluZGljYXRvciAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLWljb257aGVpZ2h0OjM0cHg7Zm9udC1zaXplOjM0cHh9Lm1kYy10YWItaW5kaWNhdG9ye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxfS5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudHt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQ7b3BhY2l0eTowfS5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2FsaWduLXNlbGY6ZmxleC1lbmQ7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLWljb257YWxpZ24tc2VsZjpjZW50ZXI7bWFyZ2luOjAgYXV0b30ubWRjLXRhYi1pbmRpY2F0b3ItLWFjdGl2ZSAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7b3BhY2l0eToxfS5tZGMtdGFiLWluZGljYXRvciAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnR7dHJhbnNpdGlvbjoyNTBtcyB0cmFuc2Zvcm0gY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWRjLXRhYi1pbmRpY2F0b3ItLW5vLXRyYW5zaXRpb24gLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zaXRpb246bm9uZX0ubWRjLXRhYi1pbmRpY2F0b3ItLWZhZGUgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zaXRpb246MTUwbXMgb3BhY2l0eSBsaW5lYXJ9Lm1kYy10YWItaW5kaWNhdG9yLS1hY3RpdmUubWRjLXRhYi1pbmRpY2F0b3ItLWZhZGUgLm1kYy10YWItaW5kaWNhdG9yX19jb250ZW50e3RyYW5zaXRpb24tZGVsYXk6MTAwbXN9Lm1hdC1tZGMtdGFiLXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbWRjLXRhYnstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW1kYy10YWIubWRjLXRhYntoZWlnaHQ6NDhweDtmbGV4LWdyb3c6MH0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3JpcHBsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWx7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1tZGMtdGFiIC5tZGMtdGFiX19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3BvaW50ZXItZXZlbnRzOmF1dG99Lm1hdC1tZGMtdGFiOmhvdmVyIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4wNH0ubWF0LW1kYy10YWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWRjLXRhYl9fcmlwcGxlOjpiZWZvcmUsLm1hdC1tZGMtdGFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZXtvcGFjaXR5Oi4xMn0ubWF0LW1kYy10YWIgLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xMn0ubWF0LW1kYy10YWItZ3JvdXAubWF0LW1kYy10YWItZ3JvdXAtc3RyZXRjaC10YWJzPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFie2ZsZXgtZ3JvdzoxfS5tYXQtbWRjLXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtbWRjLXRhYi1ncm91cHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21heC13aWR0aDoxMDAlfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciAubWF0LW1kYy10YWIgLm1kYy10YWJfX3RleHQtbGFiZWwsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1saW5rIC5tZGMtdGFiX190ZXh0LWxhYmVse2NvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlciAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXIgLm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZSwubWF0LW1kYy10YWItZ3JvdXAubWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tZGMtdGFiX19yaXBwbGU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1tZGMtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtZm9yZWdyb3VuZC1jb2xvciwgaW5oZXJpdCl9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC10YWJzLXdpdGgtYmFja2dyb3VuZD4ubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtbWRjLXRhYi1ncm91cC5tYXQtdGFicy13aXRoLWJhY2tncm91bmQ+Lm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjp2YXIoLS1tYXQtbWRjLXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3IsIGluaGVyaXQpfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtbWRjLXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1tZGMtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9Lm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246aGVpZ2h0IDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LW1kYy10YWItYm9keS13cmFwcGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9J10sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksaU49Y2xhc3N7fSxMQ2U9MCxCQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHNZe2dldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtpLnJlbW92ZSgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmFkZCgibWF0LXRhYnMtd2l0aC1iYWNrZ3JvdW5kIixgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9c2V0IGRpc2FibGVSaXBwbGUoZSl7dGhpcy5fZGlzYWJsZVJpcHBsZT1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlLG8scyxpLHIsYSxsKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExLHRoaXMuY29sb3I9InByaW1hcnkifV9pdGVtU2VsZWN0ZWQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKHFuKG51bGwpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlQWN0aXZlTGluaygpfSksc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCl9dXBkYXRlQWN0aXZlTGluaygpe2lmKCF0aGlzLl9pdGVtcylyZXR1cm47bGV0IGU9dGhpcy5faXRlbXMudG9BcnJheSgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV0uYWN0aXZlKXJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXg9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx2b2lkKHRoaXMudGFiUGFuZWwmJih0aGlzLnRhYlBhbmVsLl9hY3RpdmVUYWJJZD1lW2ldLmlkKSk7dGhpcy5zZWxlY3RlZEluZGV4PS0xLHRoaXMuX2lua0Jhci5oaWRlKCl9X2dldFJvbGUoKXtyZXR1cm4gdGhpcy50YWJQYW5lbD8idGFibGlzdCI6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicm9sZSIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKFhpLDgpLEMoYXQpLEMoJHQpLEMoanMpLEMoR24pLEMoaGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGlucHV0czp7YmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiUGFuZWw6InRhYlBhbmVsIn0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLFZDZT1rdSh1cyhzbyhjbGFzc3t9KSkpLEhDZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVkNle2dldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9c2V0IGFjdGl2ZShlKXtsZXQgaT1SdChlKTtpIT09dGhpcy5faXNBY3RpdmUmJih0aGlzLl9pc0FjdGl2ZT1pLHRoaXMuX3RhYk5hdkJhci51cGRhdGVBY3RpdmVMaW5rKCkpfWdldCByaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuX3RhYk5hdkJhci5kaXNhYmxlUmlwcGxlfHwhIXRoaXMucmlwcGxlQ29uZmlnLmRpc2FibGVkfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcigpLHRoaXMuX3RhYk5hdkJhcj1lLHRoaXMuZWxlbWVudFJlZj1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2lzQWN0aXZlPSExLHRoaXMuaWQ9Im1hdC10YWItbGluay0iK0xDZSsrLHRoaXMucmlwcGxlQ29uZmlnPXJ8fHt9LHRoaXMudGFiSW5kZXg9cGFyc2VJbnQobyl8fDAsIk5vb3BBbmltYXRpb25zIj09PWEmJih0aGlzLnJpcHBsZUNvbmZpZy5hbmltYXRpb249e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH0pfWZvY3VzKCl7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZil9X2hhbmRsZUZvY3VzKCl7dGhpcy5fdGFiTmF2QmFyLmZvY3VzSW5kZXg9dGhpcy5fdGFiTmF2QmFyLl9pdGVtcy50b0FycmF5KCkuaW5kZXhPZih0aGlzKX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLl90YWJOYXZCYXIudGFiUGFuZWwmJjMyPT09ZS5rZXlDb2RlJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpfV9nZXRBcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsP3RoaXMuX3RhYk5hdkJhci50YWJQYW5lbD8uaWQ6dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLl90YWJOYXZCYXIudGFiUGFuZWw/dGhpcy5hY3RpdmU/InRydWUiOiJmYWxzZSI6dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIil9X2dldEFyaWFDdXJyZW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsPyJwYWdlIjpudWxsfV9nZXRSb2xlKCl7cmV0dXJuIHRoaXMuX3RhYk5hdkJhci50YWJQYW5lbD8idGFiIjp0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJvbGUiKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5fdGFiTmF2QmFyLnRhYlBhbmVsP3RoaXMuX2lzQWN0aXZlJiYhdGhpcy5kaXNhYmxlZD8wOi0xOnRoaXMudGFiSW5kZXh9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQkNlKSxDKE1lKSxDKHkyLDgpLHlvKCJ0YWJpbmRleCIpLEMoWHIpLEMoaGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGlucHV0czp7YWN0aXZlOiJhY3RpdmUiLGlkOiJpZCJ9LGZlYXR1cmVzOltLZV19KSxufSkoKSx2RT0oaVkoSENlKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZm4sSGwsQmwsbmcsbGcsZm5dfSksbn0pKCkpO2Z1bmN0aW9uIHpDZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iLDUpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLm9uQWN0aXZlUGx1Z2luU2VsZWN0aW9uKHIsby5pZCkpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0O0JlKCJkYXRhLXBsdWdpbi1pZCIsZS5pZCksdigxKSxIZSgiICIsZS50YWJfbmFtZSwiICIpfX1mdW5jdGlvbiBVQ2Uobix0KXsxJm4mJihoKDAsIm1hdC10YWIiLDMpLFMoMSx6Q2UsMiwyLCJuZy10ZW1wbGF0ZSIsNCksZygpKSwyJm4mJl8oImRpc2FibGVkIiwhdC4kaW1wbGljaXQuZW5hYmxlZCl9ZnVuY3Rpb24gakNlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtb3B0aW9uIiw5KSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJ2YWx1ZSIsZS5pZCksQmUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSx2KDEpLEhlKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIEdDZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1mb3JtLWZpZWxkIiw2KSgxLCJtYXQtbGFiZWwiKSxUKDIsIkluYWN0aXZlIiksZygpLGgoMywibWF0LXNlbGVjdCIsNyksSSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRpc2FibGVkUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZChyKSl9KSxTKDQsakNlLDIsMywibWF0LW9wdGlvbiIsOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digzKSxfKCJ2YWx1ZSIsZS5zZWxlY3RlZFBsdWdpbikoImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCEwKSx2KDEpLF8oIm5nRm9yT2YiLGUuZGlzYWJsZWRQbHVnaW5zKX19dmFyIGNZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRn1nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXQtc3RyZXRjaC10YWJzIiwiZmFsc2UiLCJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiwic3Vic2NyaXB0U2l6aW5nIiwiZHluYW1pYyIsNCwibmdJZiJdLFszLCJkaXNhYmxlZCJdLFsibWF0LXRhYi1sYWJlbCIsIiJdLFsxLCJwbHVnaW4tbmFtZSIsMywiY2xpY2siXSxbImZsb2F0TGFiZWwiLCJuZXZlciIsInN1YnNjcmlwdFNpemluZyIsImR5bmFtaWMiXSxbMywidmFsdWUiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1hdC10YWItZ3JvdXAiLDApLFMoMSxVQ2UsMiwxLCJtYXQtdGFiIiwxKSxnKCksUygyLEdDZSw1LDMsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoXygic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx2KDEpLF8oIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucyksdigxKSxfKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W3JOLHN5LGJFLEthLGtjLHp1LFVzLG5uLEZlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7d2lkdGg6MTQ0cHh9W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1kYy10ZXh0LWZpZWxke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtwYWRkaW5nOjAgNHB4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1kYy10ZXh0LWZpZWxke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1bX25naG9zdC0lQ09NUCVdICAgbWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbC5tZGMtZmxvYXRpbmctbGFiZWwubWF0LW1kYy1mbG9hdGluZy1sYWJlbCwgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1tZGMtc2VsZWN0LCBbX25naG9zdC0lQ09NUCVdICAgbWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgICAubWF0LW1kYy1zZWxlY3QtdmFsdWUsIFtfbmdob3N0LSVDT01QJV0gICBtYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtbWRjLXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fVtfbmdob3N0LSVDT01QJV0gICBtYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOm5vdCgubWRjLXRleHQtZmllbGQtLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOmluaGVyaXR9bWF0LWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0sIG1hdC1vcHRpb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LmFjdGl2ZS1wbHVnaW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpzdHJldGNoO2ZsZXg6MSAxIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5wbHVnaW4tbmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjAgMTJweDt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5le2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LW1kYy10YWI6bm90KC5tYXQtbWRjLXRhYi1kaXNhYmxlZCkgLm1kYy10YWJfX3RleHQtbGFiZWx7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiOm5vdCgubWF0LW1kYy10YWItZGlzYWJsZWQpLm1kYy10YWItLWFjdGl2ZSAubWRjLXRhYl9fdGV4dC1sYWJlbHtjb2xvcjppbmhlcml0O29wYWNpdHk6MX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntjb2xvcjppbmhlcml0fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1kaXNhYmxlZHtkaXNwbGF5Om5vbmV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtbWRjLXRhYi1saXN0LCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC1tZGMtdGFiLWxhYmVscywgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LW1kYy10YWItaGVhZGVyIC5tYXQtbWRjLXRhYiwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWRjLXRhYl9fdGV4dC1sYWJlbHtoZWlnaHQ6MTAwJX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtbWRjLXRhYntsZXR0ZXItc3BhY2luZzouMjVweDttaW4td2lkdGg6NDhweDtwYWRkaW5nOjA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXIgLm1hdC1tZGMtdGFiLWxpc3R7cGFkZGluZzowIDM2cHh9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46Zmlyc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC1tZGMtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LW1kYy10YWItbGFiZWwtY29udGFpbmVye2xlZnQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpsYXN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1sYWJlbC1jb250YWluZXJ7cmlnaHQ6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtbWRjLXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Il19KSxufSkoKSxkWT1xKE5oLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLHFDZT1xKGRZLG49Pm4uZmlsdGVyKHQ9PiF0LmVuYWJsZWQpKSx1WT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbiQ9dGhpcy5zdG9yZS5waXBlKHVuKFdvKSksdGhpcy5wbHVnaW5zJD10aGlzLnN0b3JlLnBpcGUodW4oZFkpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKHVuKHFDZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2Moe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksSSgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJhY3RpdmVQbHVnaW5zIixXKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixXKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltjWSxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWENlPXEoTmgsV28sKG4sdCk9PiEoIXR8fCFuW3RdKSYmblt0XS5kaXNhYmxlX3JlbG9hZCkscFk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWREaXNhYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoWENlKSx0aGlzLmlzUmVsb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChUNikucGlwZShMaSh0aGlzLnJlbG9hZERpc2FibGVkJCksTigoW2kscl0pPT4hciYmaT09PVRlLkxPQURJTkcpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmgpfXRyaWdnZXJSZWxvYWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZzKCkpfWdldFJlbG9hZFRpdGxlKGUpe3JldHVybiBlP2BMYXN0IFVwZGF0ZWQ6ICR7ZX1gOiJMb2FkaW5nLi4uIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItcmVsb2FkIl1dLGRlY2xzOjYsdmFyczoxMyxjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwxLCJyZWxvYWQtYnV0dG9uIiwzLCJ0aXRsZSIsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJyZWZyZXNoXzI0cHgiLDEsInJlZnJlc2gtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiYnV0dG9uIiwwKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50cmlnZ2VyUmVsb2FkKCl9KSxqKDEsImFzeW5jIiksaigyLCJkYXRlIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxQKDUsIm1hdC1pY29uIiwxKSxnKCkpLDImZSYmKG50KCJsb2FkaW5nIixXKDEsNCxpLmlzUmVsb2FkaW5nJCkpLF8oInRpdGxlIixpLmdldFJlbG9hZFRpdGxlKHFwKDIsNixXKDMsOSxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpLCJtZWRpdW0iKSkpKCJkaXNhYmxlZCIsVyg0LDExLGkucmVsb2FkRGlzYWJsZWQkKSkpfSxkZXBlbmRlbmNpZXM6WyRpLEVuLGN0LGdoXSxzdHlsZXM6WyIucmVsb2FkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5yZWZyZXNoLWljb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5yZWxvYWQtYnV0dG9uLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYW5pbWF0aW9uOiBfbmdjb250ZW50LSVDT01QJV9yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIF9uZ2NvbnRlbnQtJUNPTVAlX3JvdGF0ZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgfVxuICAgICAgfSJdfSksbn0pKCksZlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxUKDIsIlRlbnNvckJvYXJkIiksZygpLFAoMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGgoNywiYSIsMiksUCg4LCJtYXQtaWNvbiIsMyksZygpKCkpfSxkZXBlbmRlbmNpZXM6W083LEVuLGtxLHFxLEtxLHVZLHBZXSxzdHlsZXM6WyJtYXQtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2hlaWdodDo2NHB4O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV0sIC5yZWFkbWVbX25nY29udGVudC0lQ09NUCVdLCBhcHAtaGVhZGVyLXJlbG9hZFtfbmdjb250ZW50LSVDT01QJV0sIHNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDowIDAgYXV0b30uYnJhbmRbX25nY29udGVudC0lQ09NUCVde2xldHRlci1zcGFjaW5nOi0wLjAyNWVtO21hcmdpbi1sZWZ0OjEwcHg7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufSJdfSksbn0pKCksSkNlX3NldERvY3VtZW50VGl0bGU9ZnVuY3Rpb24obil7ZG9jdW1lbnQudGl0bGU9bn0sbVk9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiZKQ2Vfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaFk9IlRlbnNvckJvYXJkIixnWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuY3VzdG9tQnJhbmROYW1lPWksdGhpcy5nZXRFeHBlcmltZW50SWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxyKS5waXBlKE4ocj0+cj8uWzBdKSksdGhpcy5leHBlcmltZW50TmFtZSQ9dGhpcy5nZXRFeHBlcmltZW50SWQkLnBpcGUoa2UoQm9vbGVhbiksaG4ocj0+dGhpcy5zdG9yZS5zZWxlY3QoQlMse2V4cGVyaW1lbnRJZDpyfSkpLE4ocj0+cj9yLm5hbWU6bnVsbCkpLHRoaXMudGl0bGUkPXRoaXMuc3RvcmUuc2VsZWN0KHhTKS5waXBlKExpKHRoaXMuc3RvcmUuc2VsZWN0KEhhKSx0aGlzLmV4cGVyaW1lbnROYW1lJCksTigoW3IsbyxzXSk9PntsZXQgYT10aGlzLmN1c3RvbUJyYW5kTmFtZXx8aFk7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT13bi5FWFBFUklNRU5UJiZzP2Ake3N9IC0gJHthfWA6YX0pLHFuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHxoWSksWW4oKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEModjYsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInBhZ2UtdGl0bGUtY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmXygidGl0bGUiLFcoMSwxLGkudGl0bGUkKSl9LGRlcGVuZGVuY2llczpbbVksY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksX1k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUodW4oX2YpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFluKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52Y1JlZj1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItd2ViYXBwIl1dLGRlY2xzOjksdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJhcHAtaGVhZGVyIiksaCgxLCJtYWluIiksUCgyLCJyb3V0ZXItb3V0bGV0IiksZygpLFAoMywiYWxlcnQtc25hY2tiYXIiKSg0LCJoYXNoLXN0b3JhZ2UiKSg1LCJwYWdlLXRpdGxlIikoNiwic2V0dGluZ3MtcG9seW1lci1pbnRlcm9wIikoNywiZGFyay1tb2RlLXN1cHBvcnRlciIpKDgsImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIikpfSxkZXBlbmRlbmNpZXM6W01xLFNxLG45LEVxLERxLGZZLGdZLF9ZXSxzdHlsZXM6WyJodG1sW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6Um9ib3RvLHNhbnMtc2VyaWY7aGVpZ2h0OjEwMCU7bWFyZ2luOjA7cGFkZGluZzowfVtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZDojZjVmNWY1O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9YXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDFweCAzcHggM3B4IHJnYmEoMCwwLDAsLjI1KTtmbGV4OjAgMDt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDI1NSwyNTUsMjU1LC4xKX1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfSJdfSksbn0pKCksdlk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLFNoLHdoLERsXX0pLG59KSgpLHlZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx4WT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpfdSx1c2VDbGFzczpYOH1dfSksbn0pKCksQ1k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLHhZXX0pLG59KSgpLE1ZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZV19KSxufSkoKSx3WT17aWQ6WHcsbmFtZToiIixzdGFydF90aW1lOjB9LGlNZT1icih7ZXhwZXJpbWVudE1hcDp7W3dZLmlkXTp3WX19KTtmdW5jdGlvbiBTWShuLHQpe3JldHVybiByZih7ZGF0YTppTWV9KShuLHQpfXZhciBFWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVHIuZm9yRmVhdHVyZShMUyxTWSldfSksbn0pKCksVFk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGNpLEphXX0pLG59KSgpLERZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxUWV19KSxufSkoKSxJWT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUseGcsYnEsY2ksRmMsaGcsZGksJGFdfSksbn0pKCk7ZnVuY3Rpb24gck1lKCl7cmV0dXJuIHEoSXYsbj0+KHthdXRvUmVsb2FkOm59KSl9ZnVuY3Rpb24gb01lKCl7cmV0dXJuIHEoQXYsbj0+KHthdXRvUmVsb2FkUGVyaW9kSW5NczpufSkpfWZ1bmN0aW9uIHNNZSgpe3JldHVybiBxKF9mLG49Pih7cGFnZVNpemU6bn0pKX12YXIgeUU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1RyLmZvckZlYXR1cmUoTTEsTnEpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcock1lKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKG9NZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyhzTWUpLElZXX0pLG59KSgpLEFZPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltjaSxkaSx2RSxGcSxKYSxqdSxQZSxHYSx5RV19KSxufSkoKSxSWT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7bGV0IHI9ZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoIi4vaWNvbl9idW5kbGUuc3ZnIik7aS5hZGRTdmdJY29uU2V0KHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFpwKSxrKE1nKSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RpXX0pLG59KSgpLG9OPW5ldyBpZSgiW3BsdWdpbnNdIFBsdWdpbiByZWdpc3RyeSBjb25maWciKSxQWT1uZXcgTWFwLEJjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoIWUpcmV0dXJuO2xldCBpPW5ldyBTZXQoZS5tYXAocj0+ci5wbHVnaW5OYW1lKSk7Y29uc29sZS5hc3NlcnQoaS5zaXplPT09ZS5sZW5ndGgsIkNhbm5vdCByZWdpc3RlciB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMuIik7Zm9yKGxldCByIG9mIGUpe2xldHtwbHVnaW5OYW1lOm8sY29tcG9uZW50Q2xhc3M6c309cjtQWS5zZXQobyxzKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6b04sbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuIFBZLmdldChlKXx8bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoayhvTiw4KSl9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHhFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy5odHRwUGF0aFByZWZpeD0iZGF0YS9wbHVnaW4vZGVidWdnZXItdjIifWZldGNoUnVucygpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ydW5zIil9ZmV0Y2hFeGVjdXRpb25EaWdlc3RzKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoRXhlY3V0aW9uRGF0YShlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhlLGkscixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cygpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhPcEluZm8oZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaHMvb3BfaW5mbyIse3BhcmFtczp7cnVuOmUsZ3JhcGhfaWQ6aSxvcF9uYW1lOnJ9fSl9ZmV0Y2hTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2xpc3QiLHtwYXJhbXM6e3J1bjplfX0pfWZldGNoU291cmNlRmlsZShlLGkpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvZmlsZSIse3BhcmFtczp7cnVuOmUsaW5kZXg6U3RyaW5nKGkpfX0pfWZldGNoU3RhY2tGcmFtZXMoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc3RhY2tfZnJhbWVzL3N0YWNrX2ZyYW1lcyIse3BhcmFtczp7cnVuOmUsc3RhY2tfZnJhbWVfaWRzOmkuam9pbigiLCIpfX0pLnBpcGUoTihyPT4oe3N0YWNrX2ZyYW1lczpyLnN0YWNrX2ZyYW1lcy5tYXAobz0+ZnVuY3Rpb24obil7cmV0dXJue2hvc3RfbmFtZTpuWzBdLGZpbGVfcGF0aDpuWzFdLGxpbmVubzpuWzJdLGZ1bmN0aW9uX25hbWU6blszXX19KG8pKX0pKSl9ZmV0Y2hBbGVydHMoZSxpLHIsbyl7bGV0IHM9e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfTtyZXR1cm4gdm9pZCAwIT09byYmKHMuYWxlcnRfdHlwZT1vKSx0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9hbGVydHMiLHtwYXJhbXM6c30pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKFVhKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksT1k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbeEVdLGltcG9ydHM6W09oXX0pLG59KSgpLENFPV9lKCJbRGVidWdnZXJdIERlYnVnZ2VyIExvYWRlZCIpLE1FPV9lKCJbRGVidWdnZXJdIERlYnVnZ2VyIFVubG9hZGVkIiksYXk9X2UoIltEZWJ1Z2dlcl0gQSBOZXcgRGVidWdnZXIgRGF0YSBQb2xsaW5nIEV2ZW50IEJlZ2lucyIpLHdFPV9lKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdGVkIiksU0U9X2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrWT1fZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksbHk9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLEVFPV9lKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURT1fZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU2c9X2UoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksREU9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLElFPV9lKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRT1fZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFJFPV9lKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRWc9X2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxUZz1fZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxEZz1fZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElnPV9lKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBFPV9lKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT0U9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksa0U9X2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRkU9X2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkU9X2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQWc9X2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUmc9X2UoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQZz1fZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEU9X2UoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCRT1fZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFZFPV9lKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLEhFPV9lKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT2c9X2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksekU9X2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVUU9X2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY3k9X2UoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkeT0iZGVidWdnZXIiLFNvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifShTb3x8KFNvPXt9KSksU28pKSgpLFZjPSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShWY3x8KFZjPXt9KSksVmMpKSgpLExvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KExvfHwoTG89e30pKSxMbykpKCk7ZnVuY3Rpb24ga2cobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09TG8uRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHV5KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIGFOKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBqRShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1rZyhuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciBiTWU9YnIoe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6VGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpUZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpUZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6VGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSx5ZSh3RSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOlRlLkxPQURJTkd9fSkpLHllKGtZLG49Pih7Li4ubixydW5zTG9hZGVkOnsuLi5uLnJ1bnNMb2FkZWQsc3RhdGU6VGUuRkFJTEVEfX0pKSx5ZShTRSwobix7cnVuczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KSxpPWUubGVuZ3RoPjAmJm51bGw9PT1uLmFjdGl2ZVJ1bklkO3JldHVybnsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmk/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLHJ1bnM6dCxydW5zTG9hZGVkOntzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGFjdGl2ZVJ1bklkOmUubGVuZ3RoPjA/ZVswXTpudWxsfX0pLHllKGF5LG49Pih7Li4ubixsYXN0RGF0YVBvbGxPbnNldFRpbWVNczpEYXRlLm5vdygpfSkpLHllKGx5LG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpUZS5MT0FESU5HfX19KSx5ZShFRSwobix7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCByPXQ+bi5hbGVydHMubnVtQWxlcnRzO3JldHVybnsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOnI/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZX19fSkseWUoVEUsKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0VHlwZTppLGJlZ2luOnIsYWxlcnRzOm99KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBhPXt9LGw9bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXT9uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldLnNsaWNlKCk6W10sYz1uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldLnNsaWNlKCk6W107Zm9yKGxldCBwPTA7cDxvLmxlbmd0aDsrK3Ape2xldCBmPXIrcCxtPW9bcF07aWYoYVtmXT1tLG0uYWxlcnRfdHlwZT09PVZjLklORl9OQU5fQUxFUlQpe2xldCBiPW07bFtmXT1iLmV4ZWN1dGlvbl9pbmRleCxudWxsIT09Yi5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihjW2ZdPWIuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX19dm9pZCAwIT09bi5hbGVydHMuYWxlcnRzW2ldJiZPYmplY3QuYXNzaWduKGEsbi5hbGVydHMuYWxlcnRzW2ldKTtsZXQgZD1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCx1PW4uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg7aWYoaT09PVZjLklORl9OQU5fQUxFUlQmJjA9PT1yKXtsZXQgcD1vWzBdO2Q9TWF0aC5tYXgoMCxwLmV4ZWN1dGlvbl9pbmRleC1NYXRoLmZsb29yKG4uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQvMikpLG51bGwhPT1wLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKHU9cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfXJldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmR9LGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZm9jdXNJbmRleDp1fSxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOlRlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRzOnsuLi5uLmFsZXJ0cy5hbGVydHMsW2ldOmF9LGV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXMsW2ldOmx9LGdyYXBoRXhlY3V0aW9uSW5kaWNlczp7Li4ubi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzLFtpXTpjfX19fSkseWUoU2csKG4se2FsZXJ0VHlwZTp0fSk9PntsZXQgZT17Li4ubixhbGVydHM6ey4uLm4uYWxlcnRzLGZvY3VzVHlwZTpuLmFsZXJ0cy5mb2N1c1R5cGU9PT10P251bGw6dH19LGk9ZS5hbGVydHMuZm9jdXNUeXBlO2lmKG51bGwhPT1pKXtsZXQgcj1lLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldfHxbXTt2b2lkIDAhPT1yWzBdJiYoZS5leGVjdXRpb25zPXsuLi5lLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDpNYXRoLm1heCgwLE51bWJlcihyWzBdKS1NYXRoLmZsb29yKGUuZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQvMikpfSl9cmV0dXJuIGV9KSx5ZShERSxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpUZS5MT0FESU5HfX19KSx5ZShJRSwobix7bnVtRXhlY3V0aW9uczp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT10Pm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMscj17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnR9fX07cmV0dXJuIHQ+MCYmbnVsbD09PW4uZXhlY3V0aW9ucy5mb2N1c0luZGV4JiYoci5leGVjdXRpb25zLmZvY3VzSW5kZXg9MCkscn0pLHllKEFFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9Wy4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdO3JldHVybi0xPT09YU4oaSx0LmJlZ2luLHQuZW5kKSYmaS5wdXNoKHtiZWdpbjp0LmJlZ2luLGVuZDp0LmVuZH0pLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxsb2FkaW5nUmFuZ2VzOml9fX19KSx5ZShSRSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXSxyPWFOKGksdC5iZWdpbix0LmVuZCk7LTEhPT1yJiZpLnNwbGljZShyLDEpO2xldCBvPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnQubnVtX2RpZ2VzdHMsbG9hZGluZ1JhbmdlczppfSxleGVjdXRpb25EaWdlc3RzOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c319fTtmb3IobGV0IHM9dC5iZWdpbjtzPHQuZW5kOysrcylvLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c1tzXT10LmV4ZWN1dGlvbl9kaWdlc3RzW3MtdC5iZWdpbl07cmV0dXJuIHQuZW5kPnQuYmVnaW4mJihvLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXM9ey4uLm8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLnBhZ2VMb2FkZWRTaXplcyxbdC5iZWdpbi9uLmV4ZWN1dGlvbnMucGFnZVNpemVdOnQuZW5kLXQuYmVnaW59KSxvfSkseWUoRWcsbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlPjAmJmUtLSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDplfX19KSx5ZShUZyxuPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGUrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCsxPD1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zJiZlKyssey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSkseWUoRGcsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO2xldHtkaXNwbGF5Q291bnQ6ZX09bi5leGVjdXRpb25zLHtudW1FeGVjdXRpb25zOml9PW4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkO2lmKHQuaW5kZXg+TWF0aC5tYXgoMCxpLWUpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KSwgd2hpY2ggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgaW5kZXggKG51bUV4ZWN1dGlvbnM9JHtpfTsgZGlzcGxheUNvdW50PSR7ZX0pYCk7cmV0dXJuey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dC5pbmRleH19fSkseWUoSWcsKG4sdCk9PntsZXQgZT17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZm9jdXNJbmRleDpuLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCt0LmRpc3BsYXlJbmRleH0sY29kZUxvY2F0aW9uRm9jdXNUeXBlOkxvLkVYRUNVVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9akUoZSksZX0pLHllKFBFLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRhdGE6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EYXRhfX19O2ZvcihsZXQgcj10LmJlZ2luO3I8dC5lbmQ7KytyKWkuZXhlY3V0aW9ucy5leGVjdXRpb25EYXRhW3JdPXQuZXhlY3V0aW9uc1tyLXQuYmVnaW5dO3JldHVybiBpfSkseWUoT0Usbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6VGUuTE9BRElOR319fSkseWUoa0UsKG4se251bUdyYXBoRXhlY3V0aW9uczp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT10Pm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxpPXsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmU/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4JiYoaS5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxpfSkseWUoRkUsKG4se3BhZ2VJbmRleDp0fSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMuc2xpY2UoKTtyZXR1cm4tMT09PWUuaW5kZXhPZih0KSYmZS5wdXNoKHQpLHsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOmV9fX0pLHllKE5FLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0e3BhZ2VTaXplOmV9PW4uZ3JhcGhFeGVjdXRpb25zLGk9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCkscj17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzfSxvPXsuLi5uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGF9O2ZvcihsZXQgcz10LmJlZ2luO3M8dC5lbmQ7KytzKXtsZXQgYT1NYXRoLmZsb29yKHMvZSk7LTEhPT1pLmluZGV4T2YoYSkmJmkuc3BsaWNlKGkuaW5kZXhPZihhKSwxKSx2b2lkIDA9PT1yW2FdJiYoclthXT0wKSx2b2lkIDA9PT1vW3NdJiZyW2FdKyssb1tzXT10LmdyYXBoX2V4ZWN1dGlvbnNbcy10LmJlZ2luXX1yZXR1cm57Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczppLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczpyLGdyYXBoRXhlY3V0aW9uRGF0YTpvfX19KSx5ZShBZywobix0KT0+e2lmKHQuaW5kZXg8MHx8IU51bWJlci5pc0ludGVnZXIodC5pbmRleCkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBuZWdhdGl2ZSBvciBub24taW50ZWdlciBncmFwaC1leGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pYCk7cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLHllKFJnLChuLHQpPT5MWShuLHQuZ3JhcGhfaWQsdC5vcF9uYW1lLHQuaW5kZXgpKSx5ZShQZywobix0KT0+TFkobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLHllKExFLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxUZS5MT0FESU5HKSxyfSkseWUoQkUsKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBzIG9mIGUuaW5wdXRzKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7Zm9yKGxldCBzPTA7czxlLmNvbnN1bWVycy5sZW5ndGg7KytzKWZvcihsZXQgYSBvZiBlLmNvbnN1bWVyc1tzXSkhYS5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KGEub3BfbmFtZSxhLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsb3V0cHV0X3Nsb3Q6cy5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKHM9PnMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsaW5wdXRfc2xvdDphLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLFRlLkxPQURFRCksb30pLHllKFZFLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpUZS5MT0FESU5HfX19KSkseWUoSEUsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpUZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6VGUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLHllKE9nLChuLHQpPT57bGV0IGU9a2cobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30scyk9PntyPT09dC5maWxlX3BhdGgmJihpPXMsbz09PXQubGluZW5vJiYoZT1zKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSx5ZSh6RSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT11eShlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOlRlLkxPQURJTkd9KSxlfSkseWUoVUUsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dXkoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6VGUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSkseWUoY3ksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9akUoaSksaX0pKTtmdW5jdGlvbiBMWShuLHQsZSxpKXtsZXQgcj17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLGZvY3VzZWRPcDp7Z3JhcGhJZDp0LG9wTmFtZTplfX0sY29kZUxvY2F0aW9uRm9jdXNUeXBlOkxvLkdSQVBIX09QX0NSRUFUSU9OLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiByLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1qRShyKSx2b2lkIDAhPT1pJiYoci5ncmFwaEV4ZWN1dGlvbnM9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6aX0pLHJ9ZnVuY3Rpb24gQlkobix0KXtyZXR1cm4gYk1lKG4sdCl9dmFyIEVvPUVyKGR5KSxBZj1xKEVvLG49Pm4ucnVucyksbE49cShFbyxuPT5uLnJ1bnNMb2FkZWQpLFFvPXEoRW8sbj0+bi5hY3RpdmVSdW5JZCksVlk9cShFbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLEZnPXEoRW8sbj0+bi5hbGVydHMpLGNOPXEoRmcsbj0+bi5hbGVydHNMb2FkZWQpLEhZPXEoRmcsbj0+bi5udW1BbGVydHMpLEdFPXEoRmcsbj0+bi5mb2N1c1R5cGUpLHpZPXEoRmcsbj0+bnVsbD09PW4uZm9jdXNUeXBlPzA6bi5hbGVydHNCcmVha2Rvd25bbi5mb2N1c1R5cGVdfHwwKSxVWT1xKEZnLG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSxqWT1xKEZnLG49Pm4uYWxlcnRzQnJlYWtkb3duKSxSZj1xKEVvLG49Pm4uZXhlY3V0aW9ucyksV0U9cShSZixuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLHB5PXEoUmYsbj0+bi5leGVjdXRpb25EaWdlc3RzTG9hZGVkKSxHdT1xKFJmLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxmeT1xKFJmLG49Pm4uc2Nyb2xsQmVnaW5JbmRleCksTmc9cShSZixuPT5uLnBhZ2VTaXplKSxMZz1xKFJmLG49Pm4uZGlzcGxheUNvdW50KSxHWT1xKFJmLG49PntsZXQgdD1bXTtmb3IobGV0IGU9bi5zY3JvbGxCZWdpbkluZGV4O2U8bi5zY3JvbGxCZWdpbkluZGV4K24uZGlzcGxheUNvdW50OysrZSl0LnB1c2goZSBpbiBuLmV4ZWN1dGlvbkRpZ2VzdHM/bi5leGVjdXRpb25EaWdlc3RzW2VdOm51bGwpO3JldHVybiB0fSksV3U9cShFbyxuPT5uLmdyYXBoRXhlY3V0aW9ucyksV1k9cShXdSxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG15PXEoRW8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxxWT1xKFd1LG49Pm4uc2Nyb2xsQmVnaW5JbmRleCksWVk9cShXdSxuPT5uLmRpc3BsYXlDb3VudCksWFk9cShXdSxuPT5uLnBhZ2VTaXplKSxRWT1xKFd1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzKSxaWT1xKFd1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSxkTj1xKFd1LG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhKSx1Tj1xKFd1LG49Pm4uZm9jdXNJbmRleCkscE49cShFbyxuPT5uLmdyYXBocyksZk49cShwTixuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdP251bGw6ZVt0LmdyYXBoSWRdLmdldCh0Lm9wTmFtZSl8fG51bGx9KSxtTj1xKHBOLG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2lucHV0czpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89PntsZXQgcz17Li4ub307cmV0dXJuIGkuaGFzKG8ub3BfbmFtZSkmJihzLmRhdGE9aS5nZXQoby5vcF9uYW1lKSksc30pfX0pLEtZPXEodU4sZE4sbU4sKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChhPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxzPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgYT1uLTE7YT49czstLWEpaWYodm9pZCAwIT09dFthXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFthXS5ncmFwaF9pZCE9PW98fHRbYV0ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFthXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2goYSksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLEpZPXEocE4sbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7Y29uc3VtZXJzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+by5tYXAocz0+e2xldCBhPXsuLi5zfTtyZXR1cm4gaS5oYXMocy5vcF9uYW1lKSYmKGEuZGF0YT1pLmdldChzLm9wX25hbWUpKSxhfSkpfX0pLCRZPXEoRW8sbj0+e2xldCB0PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCxpPW5ldyBBcnJheShlLXQpLmZpbGwobnVsbCkscj1uLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbD09PXIpcmV0dXJuIGk7bGV0IG89bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tyXTtpZih2b2lkIDA9PT1vKXJldHVybiBpO2ZvcihsZXQgcz10O3M8ZTsrK3Mpby5pbmNsdWRlcyhzKSYmKGlbcy10XT1uLmFsZXJ0cy5mb2N1c1R5cGUpO3JldHVybiBpfSkscUU9cShFbyxuPT5uLmV4ZWN1dGlvbnMpLGhOPXEocUUsbj0+bi5mb2N1c0luZGV4KSxlWD1xKHFFLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLGdOPXEocUUsbj0+bi5leGVjdXRpb25EYXRhKSx0WD1xKEVvLG49Pm4uZ3JhcGhzLmxvYWRpbmdPcHMpLF9OPXEoRW8sbj0+bi5zdGFja0ZyYW1lcyksUGY9cShxRSxuPT57bGV0e2ZvY3VzSW5kZXg6dCxleGVjdXRpb25EYXRhOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3RdP251bGw6ZVt0XX0pLGh5PXEoRW8saE4sUGYsZk4sKG4sdCxlLGkpPT57bGV0e2NvZGVMb2NhdGlvbkZvY3VzVHlwZTpyfT1uO3JldHVybiBudWxsPT09cj9udWxsOnI9PT1Mby5FWEVDVVRJT04/bnVsbD09PXR8fG51bGw9PT1lP251bGw6e2NvZGVMb2NhdGlvblR5cGU6TG8uRVhFQ1VUSU9OLG9wVHlwZTplLm9wX3R5cGUsZXhlY3V0aW9uSW5kZXg6dH06bnVsbD09PWk/bnVsbDp7Y29kZUxvY2F0aW9uVHlwZTpMby5HUkFQSF9PUF9DUkVBVElPTixvcFR5cGU6aS5vcF90eXBlLG9wTmFtZTppLm9wX25hbWV9fSksblg9cShFbyxrZyksWUU9cShFbyxuPT5uLnNvdXJjZUNvZGUpLGlYPXEoWUUsbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksYk49KHEoWUUsbj0+bi5zb3VyY2VGaWxlTGlzdCkscShZRSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTp1eSh0LGUpfSkpLFhFPXEoWUUsYk4sKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxRRT1xKEVvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxyWD1xKEVvLG49Pm4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUpLG9YPWZ1bmN0aW9uKG4pe3JldHVybltuXX07ZnVuY3Rpb24geU1lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw3KSxJKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkub25Ub2dnbGVGb2N1c1R5cGUuZW1pdChvLnR5cGUpKX0pLGgoMSwiZGl2Iiw4KSxUKDIpLGcoKSxoKDMsImRpdiIsOSksVCg0KSxnKCksUCg1LCJkaXYiKSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtfKCJuZ0NsYXNzIixJbig0LG9YLGUudHlwZT09PWkuZm9jdXNUeXBlPyJmb2N1cyI6IiIpKSx2KDIpLGJ0KGUuZGlzcGxheU5hbWUpLHYoMiksbHUoIiAiLGUuZGlzcGxheVN5bWJvbCwiOiAiLGUuY291bnQsIiAiKX19dmFyIHNYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIsIkRlYnVnZ2luZyIpLGcoKSxoKDMsImRpdiIsMikoNCwiZGl2IiwzKSxUKDUsIkFsZXJ0cyIpLGcoKSxoKDYsImRpdiIsNCksVCg3KSxnKCkoKSxoKDgsImRpdiIsNSksUyg5LHlNZSw2LDYsImRpdiIsNiksZygpKCkpLDImZSYmKHYoNiksXygibmdDbGFzcyIsSW4oMyxvWCxpLm51bUFsZXJ0cz4wPyJub24temVybyI6IiIpKSx2KDEpLEhlKCIgIixpLm51bUFsZXJ0cywiICIpLHYoMiksXygibmdGb3JPZiIsaS5hbGVydHNCcmVha2Rvd24pKX0sZGVwZW5kZW5jaWVzOlt5bixubl0sc3R5bGVzOlsiLmFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmc6IDZweCAwIDZweCA1MHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlLmZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVlZTA7XG59XG5cbi5hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbn1cblxuLmFsZXJ0LXR5cGUtY291bnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgXG4gIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgY29sb3I6ICNmZmY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYWxlcnQtdHlwZS1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogM3B4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGVidWdnaW5nLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtc2l6ZTogMThweDtcbn1cblxuLm51bS1hbGVydHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweCAzMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5udW0tYWxlcnRzLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDI0cHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlLm5vbi16ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmI3ODA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufSJdfSksbn0pKCksQ01lPXtbVmMuRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUXTp7ZGlzcGxheU5hbWU6IkZ1bmN0aW9uIHJlY29tcGlsZXMiLGRpc3BsYXlTeW1ib2w6IkMifSxbVmMuSU5GX05BTl9BTEVSVF06e2Rpc3BsYXlOYW1lOiJOYU4vXHUyMjFlIixkaXNwbGF5U3ltYm9sOiJcdTIyMWUifSxbVmMuVEVOU09SX1NIQVBFX0FMRVJUXTp7ZGlzcGxheU5hbWU6IlRlbnNvciBzaGFwZSIsZGlzcGxheVN5bWJvbDoiXHUyNWEwIn19LGFYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtQWxlcnRzJD10aGlzLnN0b3JlLnBpcGUodW4oSFkpKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKHVuKHEoalksaT0+e2xldCByPU9iamVjdC5rZXlzKGkpO3JldHVybiByLnNvcnQoKSxyLm1hcChvPT4oe3R5cGU6bywuLi5DTWVbb10sY291bnQ6aVtvXX0pKX0pKSksdGhpcy5mb2N1c1R5cGUkPXRoaXMuc3RvcmUucGlwZSh1bihHRSkpfW9uVG9nZ2xlRm9jdXNUeXBlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goU2coe2FsZXJ0VHlwZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItYWxlcnRzIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm51bUFsZXJ0cyIsImFsZXJ0c0JyZWFrZG93biIsImZvY3VzVHlwZSIsIm9uVG9nZ2xlRm9jdXNUeXBlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJhbGVydHMtY29tcG9uZW50IiwwKSxJKCJvblRvZ2dsZUZvY3VzVHlwZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Ub2dnbGVGb2N1c1R5cGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxnKCkpLDImZSYmXygibnVtQWxlcnRzIixXKDEsMyxpLm51bUFsZXJ0cyQpKSgiYWxlcnRzQnJlYWtkb3duIixXKDIsNSxpLmFsZXJ0c0JyZWFrZG93biQpKSgiZm9jdXNUeXBlIixXKDMsNyxpLmZvY3VzVHlwZSQpKX0sZGVwZW5kZW5jaWVzOltzWCxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ3k9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBaRShuKXtsZXR7dGVuc29yRGVidWdNb2RlOnQsYXJyYXk6ZX09bjtzd2l0Y2godCl7Y2FzZSBTby5OT19URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIE5PX1RFTlNPUiBtb2RlIik7cmV0dXJue307Y2FzZSBTby5DVVJUX0hFQUxUSDppZihudWxsPT09ZXx8MiE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ1VSVF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDIsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtyZXR1cm57aGFzSW5mT3JOYU46Qm9vbGVhbihlWzFdKX07Y2FzZSBTby5DT05DSVNFX0hFQUxUSDp7aWYobnVsbD09PWV8fDUhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIENPTkNJU0VfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCA1LCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9e3NpemU6ZVsxXX07cmV0dXJuIGVbMl0+MCYmKGkubnVtTmVnYXRpdmVJbmZzPWVbMl0pLGVbM10+MCYmKGkubnVtUG9zaXRpdmVJbmZzPWVbM10pLGVbNF0+MCYmKGkubnVtTmFOcz1lWzRdKSxpfWNhc2UgU28uU0hBUEU6e2lmKG51bGw9PT1lfHwxMCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgU0hBUEUgbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDEwLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9ZVsyXSxyPWUuc2xpY2UoNCxNYXRoLm1pbig0K2ksZS5sZW5ndGgpKTtyZXR1cm4gci5sZW5ndGg8aSYmKHI9bmV3IEFycmF5KGktci5sZW5ndGgpLmNvbmNhdChyKSkse2R0eXBlOmd5W2VbMV1dLHJhbms6aSxzaXplOmVbM10sc2hhcGU6cn19Y2FzZSBTby5GVUxMX0hFQUxUSDp7aWYobnVsbD09PWV8fDExIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBGVUxMX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTEsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgcj17ZHR5cGU6Z3lbZVsyXV0scmFuazplWzNdLHNpemU6ZVs0XX07cmV0dXJuIGVbNV0+MCYmKHIubnVtTmVnYXRpdmVJbmZzPWVbNV0pLGVbNl0+MCYmKHIubnVtUG9zaXRpdmVJbmZzPWVbNl0pLGVbN10+MCYmKHIubnVtTmFOcz1lWzddKSxlWzhdPjAmJihyLm51bU5lZ2F0aXZlRmluaXRlcz1lWzhdKSxlWzldPjAmJihyLm51bVplcm9zPWVbOV0pLGVbMTBdPjAmJihyLm51bVBvc2l0aXZlRmluaXRlcz1lWzEwXSkscn1jYXNlIFNvLkZVTExfVEVOU09SOmlmKG51bGwhPT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7dH1gKX19dmFyIHZOPSJbX25naG9zdC0lQ09NUCVdIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgIG1hcmdpbjogMCAycHg7XG4gICAgcGFkZGluZzogMXB4IDNweDtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIH0iO2Z1bmN0aW9uIHdNZShuLHQpezEmbiYmUCgwLCJkaXYiLDQpfWZ1bmN0aW9uIFNNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxUKDIsIk5hTiIpLGcoKSxoKDMsInNwYW4iLDkpLFQoNCksZygpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLEhlKCJceGQ3IixlLm51bU5hTnMsIiIpfX1mdW5jdGlvbiBFTWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNykoMSwic3BhbiIsOCksVCgyLCItXHUyMjFlIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksSGUoIlx4ZDciLGUubnVtTmVnYXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gVE1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDgpLFQoMiwiK1x1MjIxZSIpLGcoKSxoKDMsInNwYW4iLDkpLFQoNCksZygpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLEhlKCJceGQ3IixlLm51bVBvc2l0aXZlSW5mcywiIil9fWZ1bmN0aW9uIERNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksVCgyLCItIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksSGUoIlx4ZDciLGUubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gSU1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxUKDIsIjAiKSxnKCksaCgzLCJzcGFuIiw5KSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7dig0KSxIZSgiXHhkNyIsZS5udW1aZXJvcywiIil9fWZ1bmN0aW9uIEFNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksVCgyLCIrIiksZygpLGgoMywic3BhbiIsOSksVCg0KSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoNCksSGUoIlx4ZDciLGUubnVtUG9zaXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gUk1lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDUpLFMoMSxTTWUsNSwxLCJkaXYiLDYpLFMoMixFTWUsNSwxLCJkaXYiLDYpLFMoMyxUTWUsNSwxLCJkaXYiLDYpLFMoNCxETWUsNSwxLCJkaXYiLDYpLFMoNSxJTWUsNSwxLCJkaXYiLDYpLFMoNixBTWUsNSwxLCJkaXYiLDYpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxfKCJuZ0lmIix2b2lkIDAhPT1lLm51bU5hTnMmJmUubnVtTmFOcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVJbmZzJiZlLm51bU5lZ2F0aXZlSW5mcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVJbmZzJiZlLm51bVBvc2l0aXZlSW5mcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVGaW5pdGVzJiZlLm51bU5lZ2F0aXZlRmluaXRlcz4wKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWUubnVtWmVyb3MmJmUubnVtWmVyb3M+MCksdigxKSxfKCJuZ0lmIix2b2lkIDAhPT1lLm51bVBvc2l0aXZlRmluaXRlcyYmZS5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fXZhciBQTWU9ZnVuY3Rpb24obil7cmV0dXJuWyJjb250YWluZXIiLG5dfTtmdW5jdGlvbiBPTWUobix0KXsxJm4mJlAoMCwiZGVidWctdGVuc29yLWR0eXBlIiw1KSwyJm4mJl8oImR0eXBlIix3KCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24ga01lKG4sdCl7MSZuJiZQKDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJm4mJl8oInJhbmsiLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspfWZ1bmN0aW9uIEZNZShuLHQpezEmbiYmUCgwLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDcpLDImbiYmXygic2hhcGUiLHcoKS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKX1mdW5jdGlvbiBOTWUobix0KXsxJm4mJlAoMCwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiw4KSwyJm4mJl8oImhhc0luZk9yTmFOIix3KCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24gTE1lKG4sdCl7aWYoMSZuJiZQKDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZuKXtsZXQgZT13KCk7V2koInNpemUiLGUuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSxfKCJudW1OZWdhdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUluZnMpKCJudW1Qb3NpdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUluZnMpKCJudW1OYU5zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmFOcykoIm51bU5lZ2F0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlRmluaXRlcykoIm51bVplcm9zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtWmVyb3MpKCJudW1Qb3NpdGl2ZUZpbml0ZXMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUZpbml0ZXMpfX12YXIgQk1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1kdHlwZSJdXSxpbnB1dHM6e2R0eXBlOiJkdHlwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZUKDApLDImZSYmSGUoIiAiLGkuZHR5cGUsIiAiKX0sc3R5bGVzOlt2Tl19KSxufSkoKSxWTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXJhbmsiXV0saW5wdXRzOntyYW5rOiJyYW5rIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlQoMCksMiZlJiZIZSgiICIsaS5yYW5rLCJEICIpfSxzdHlsZXM6W3ZOXX0pLG59KSgpLEhNZT0oKCk9PntjbGFzcyBue2dldCBzaGFwZVN0cmluZygpe3JldHVybiJbIit0aGlzLnNoYXBlLm1hcChlPT52b2lkIDA9PT1lPyI/IjpTdHJpbmcoZSkpLmpvaW4oIiwiKSsiXSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1zaGFwZSJdXSxpbnB1dHM6e3NoYXBlOiJzaGFwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZUKDApLDImZSYmSGUoIiBzaGFwZToiLGkuc2hhcGVTdHJpbmcsIiAiKX0sc3R5bGVzOlt2Tl19KSxufSkoKSx6TWU9KCgpPT57Y2xhc3MgbntnZXQgYnJlYWtkb3duRXhpc3RzKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubnVtTmFOc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlRmluaXRlc3x8dm9pZCAwIT09dGhpcy5udW1aZXJvc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUZpbml0ZXN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biJdXSxpbnB1dHM6e3NpemU6InNpemUiLG51bU5hTnM6Im51bU5hTnMiLG51bU5lZ2F0aXZlSW5mczoibnVtTmVnYXRpdmVJbmZzIixudW1Qb3NpdGl2ZUluZnM6Im51bVBvc2l0aXZlSW5mcyIsbnVtTmVnYXRpdmVGaW5pdGVzOiJudW1OZWdhdGl2ZUZpbml0ZXMiLG51bVplcm9zOiJudW1aZXJvcyIsbnVtUG9zaXRpdmVGaW5pdGVzOiJudW1Qb3NpdGl2ZUZpbml0ZXMifSxkZWNsczo3LHZhcnM6Myxjb25zdHM6W1sxLCJzaXplIl0sWzEsInNpemUtdmFsdWUiXSxbImNsYXNzIiwiYnJlYWsiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnJlYWtkb3duIiw0LCJuZ0lmIl0sWzEsImJyZWFrIl0sWzEsImJyZWFrZG93biJdLFsiY2xhc3MiLCJjYXRlZ29yeSIsNCwibmdJZiJdLFsxLCJjYXRlZ29yeSJdLFsxLCJjYXRlZ29yeS10YWciLCJpbmZpbml0ZSJdLFsxLCJjYXRlZ29yeS1jb3VudCJdLFsxLCJjYXRlZ29yeS10YWciLCJmaW5pdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwic3BhbiIpLFQoMiwic2l6ZToiKSxnKCksaCgzLCJzcGFuIiwxKSxUKDQpLGcoKSgpLFMoNSx3TWUsMSwwLCJkaXYiLDIpLFMoNixSTWUsNyw2LCJkaXYiLDMpKSwyJmUmJih2KDQpLGJ0KGkuc2l6ZSksdigxKSxfKCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cyksdigxKSxfKCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cykpfSxkZXBlbmRlbmNpZXM6W0ZlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIG1hcmdpbjogMCAycHg7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgIH1cbiAgICAgIC5icmVha1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICBoZWlndGg6IDEwMCU7XG4gICAgICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeS10YWdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2FhYTtcbiAgICAgICAgY29sb3I6ICNmZWZlZmU7XG4gICAgICB9XG4gICAgICAuaW5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxVTWU9KCgpPT57Y2xhc3MgbntnZXQgaW5mb1N0cmluZygpe3JldHVybiB0aGlzLmhhc0luZk9yTmFOPyJIYXMgXHUyMjFlL05hTiI6Ik5vIFx1MjIxZS9OYU4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iXV0saW5wdXRzOntoYXNJbmZPck5hTjoiaGFzSW5mT3JOYU4ifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApLFQoMSksZygpKSwyJmUmJihfKCJuZ0NsYXNzIixJbigyLFBNZSxpLmhhc0luZk9yTmFOPyJoYXMtaW5mLW9yLW5hbiI6IiIpKSx2KDEpLEhlKCIgIixpLmluZm9TdHJpbmcsIiAiKSl9LGRlcGVuZGVuY2llczpbeW5dLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksbn0pKCksS0U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXZhbHVlIl1dLGlucHV0czp7ZGVidWdUZW5zb3JWYWx1ZToiZGVidWdUZW5zb3JWYWx1ZSJ9LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWzMsImR0eXBlIiw0LCJuZ0lmIl0sWzMsInJhbmsiLDQsIm5nSWYiXSxbMywic2hhcGUiLDQsIm5nSWYiXSxbMywiaGFzSW5mT3JOYU4iLDQsIm5nSWYiXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyIsNCwibmdJZiJdLFszLCJkdHlwZSJdLFszLCJyYW5rIl0sWzMsInNoYXBlIl0sWzMsImhhc0luZk9yTmFOIl0sWzMsInNpemUiLCJudW1OZWdhdGl2ZUluZnMiLCJudW1Qb3NpdGl2ZUluZnMiLCJudW1OYU5zIiwibnVtTmVnYXRpdmVGaW5pdGVzIiwibnVtWmVyb3MiLCJudW1Qb3NpdGl2ZUZpbml0ZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsT01lLDEsMSwiZGVidWctdGVuc29yLWR0eXBlIiwwKSxTKDEsa01lLDEsMSwiZGVidWctdGVuc29yLXJhbmsiLDEpLFMoMixGTWUsMSwxLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDIpLFMoMyxOTWUsMSwxLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDMpLFMoNCxMTWUsMSw3LCJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLDQpKSwyJmUmJihfKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuZHR5cGUpLHYoMSksXygibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspLHYoMSksXygibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSx2KDEpLF8oIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTiksdigxKSxfKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2l6ZSkpfSxkZXBlbmRlbmNpZXM6W0ZlLEJNZSxVTWUsek1lLFZNZSxITWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksbn0pKCk7ZnVuY3Rpb24gak1lKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDEyKSxUKDEsIlx1MjViNiIpLGcoKSl9dmFyIEdNZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gV01lKG4sdCl7aWYoMSZuJiZQKDAsImRlYnVnLXRlbnNvci12YWx1ZSIsMTcpLDImbil7bGV0IGU9dygyKS4kaW1wbGljaXQsaT13KDIpO18oImRlYnVnVGVuc29yVmFsdWUiLGkucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKHFyKDEsR01lLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLnRlbnNvcl9kZWJ1Z19tb2RlLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLmRlYnVnX3RlbnNvcl92YWx1ZSkpKX19ZnVuY3Rpb24gcU1lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IikoMSwiZGl2IiwxMykoMiwiYnV0dG9uIiwxNCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCkuJGltcGxpY2l0LG89dygyKTtyZXR1cm4gUShvLm9uVGVuc29yTmFtZUNsaWNrLmVtaXQoe2luZGV4OnIsZ3JhcGhfaWQ6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0uZ3JhcGhfaWQsb3BfbmFtZTpvLmdyYXBoRXhlY3V0aW9uRGF0YVtyXS5vcF9uYW1lfSkpfSksVCgzKSxnKCksaCg0LCJkaXYiLDE1KSxUKDUpLGcoKSgpLFMoNixXTWUsMSw0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE2KSxnKCl9aWYoMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygyKTt2KDIpLFdpKCJ0aXRsZSIsaS5nZXRUZW5zb3JOYW1lKGUpKSx2KDEpLEhlKCIgIixpLmdldFRlbnNvck5hbWUoZSksIiAiKSx2KDIpLGJ0KGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm9wX3R5cGUpLHYoMSksXygibmdJZiIsbnVsbCE9PWkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLmRlYnVnX3RlbnNvcl92YWx1ZSl9fWZ1bmN0aW9uIFlNZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxOCksVCgxLCIgTG9hZGluZy4uLiAiKSxnKCkpfXZhciBYTWU9ZnVuY3Rpb24obil7cmV0dXJueyJpbnB1dC1vZi1mb2N1cyI6bn19O2Z1bmN0aW9uIFFNZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpKDIsImRpdiIsNyksUygzLGpNZSwyLDAsImRpdiIsOCksVCg0KSxnKCksUyg1LHFNZSw3LDQsImRpdiIsOSksUyg2LFlNZSwyLDAsIm5nLXRlbXBsYXRlIiwxMCwxMSxXdCksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1pdCg3KSxyPXcoMik7digxKSxfKCJuZ0NsYXNzIixJbig1LFhNZSxyLmlzSW5wdXRPZkZvY3VzKGUpKSksdigyKSxfKCJuZ0lmIixlPT09ci5mb2N1c0luZGV4KSx2KDEpLEhlKCIgIixlLCIgIiksdigxKSxfKCJuZ0lmIixyLmdyYXBoRXhlY3V0aW9uRGF0YVtlXSkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gWk1lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwzKSxJKCJzY3JvbGxlZEluZGV4Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxTKDEsUU1lLDgsNywiZGl2Iiw0KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7digxKSxfKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIGNYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uU2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgRix0aGlzLm9uVGVuc29yTmFtZUNsaWNrPW5ldyBGLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPVpFLHRoaXMuVEVTVF9PTkxZPXtnZXRWaWV3UG9ydDooKT0+dGhpcy52aWV3UG9ydH19bmdPbkNoYW5nZXMoZSl7aWYodGhpcy52aWV3UG9ydCYmZS5mb2N1c0luZGV4JiZudWxsIT09ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSl7bGV0IGk9dGhpcy52aWV3UG9ydC5nZXRSZW5kZXJlZFJhbmdlKCkscj1lLmZvY3VzSW5kZXguY3VycmVudFZhbHVlLG89TWF0aC5yb3VuZCgoaS5lbmQtaS5zdGFydCkvMykscz1NYXRoLm1heChyLW8sMCk7dGhpcy52aWV3UG9ydC5zY3JvbGxUb0luZGV4KHMscj49aS5zdGFydCYmcjxpLmVuZD8ic21vb3RoIjp2b2lkIDApfX1nZXRUZW5zb3JOYW1lKGUpe3JldHVybmAke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm9wX25hbWV9OiR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3V0cHV0X3Nsb3R9YH1pc0lucHV0T2ZGb2N1cyhlKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9jdXNJbnB1dEluZGljZXMmJnRoaXMuZm9jdXNJbnB1dEluZGljZXMuaW5jbHVkZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UodWcsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS52aWV3UG9ydD1yLmZpcnN0KX19LGlucHV0czp7bnVtR3JhcGhFeGVjdXRpb25zOiJudW1HcmFwaEV4ZWN1dGlvbnMiLGdyYXBoRXhlY3V0aW9uRGF0YToiZ3JhcGhFeGVjdXRpb25EYXRhIixncmFwaEV4ZWN1dGlvbkluZGljZXM6ImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsZm9jdXNJbmRleDoiZm9jdXNJbmRleCIsZm9jdXNJbnB1dEluZGljZXM6ImZvY3VzSW5wdXRJbmRpY2VzIn0sb3V0cHV0czp7b25TY3JvbGxlZEluZGV4Q2hhbmdlOiJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLG9uVGVuc29yTmFtZUNsaWNrOiJvblRlbnNvck5hbWVDbGljayJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9ucy10aXRsZSJdLFsiaXRlbVNpemUiLCIzOCIsImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydCIsMywic2Nyb2xsZWRJbmRleENoYW5nZSIsNCwibmdJZiJdLFsiaXRlbVNpemUiLCIzOCIsMSwiZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydCIsMywic2Nyb2xsZWRJbmRleENoYW5nZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItY29udGFpbmVyIiw0LCJjZGtWaXJ0dWFsRm9yIiwiY2RrVmlydHVhbEZvck9mIl0sWzEsInRlbnNvci1jb250YWluZXIiXSxbMSwidGVuc29yLWl0ZW0iLDMsIm5nQ2xhc3MiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWluZGV4Il0sWyJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbi1mb2N1cyIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImNsYXNzIiwidGVuc29yLWl0ZW0iXSxbImRhdGFMb2FkaW5nIiwiIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1mb2N1cyJdLFsxLCJ0ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZSJdLFsxLCJ0ZW5zb3ItbmFtZSIsMywidGl0bGUiLCJjbGljayJdLFsxLCJvcC10eXBlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiLDQsIm5nSWYiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdLFsxLCJsb2FkaW5nLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIpLGcoKSxTKDMsWk1lLDIsMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwyKSxnKCkpLDImZSYmKHYoMiksSGUoIiBHcmFwaCBFeGVjdXRpb25zICgiLGkubnVtR3JhcGhFeGVjdXRpb25zLCIpICIpLHYoMSksXygibmdJZiIsbnVsbCE9PWkubnVtR3JhcGhFeGVjdXRpb25zJiZpLm51bUdyYXBoRXhlY3V0aW9ucz4wKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsS0UsVjcsSDcsdWddLHN0eWxlczpbJy5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7cGFkZGluZy1sZWZ0OjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZ3JhcGgtZXhlY3V0aW9uLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctcmlnaHQ6NHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmdyYXBoLWV4ZWN1dGlvbnMtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTo1cHh9LmdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO2ZvbnQtc2l6ZToxMnB4O3dpZHRoOjEwMCU7b3ZlcmZsb3cteDpoaWRkZW59LmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LW9mLWZvY3VzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmxvYWRpbmctc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnRlbnNvci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2hlaWdodDozOHB4O2xpbmUtaGVpZ2h0OjM4cHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHg7bWFyZ2luOjJweCAwIDFweDttYXgtd2lkdGg6Y2FsYygxMDAlIC0gMnB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIDJweDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjFweCBzb2xpZCAjYzZjYWQxfS50ZW5zb3ItbmFtZS1hbmQtb3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17ZGlyZWN0aW9uOnJ0bDtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1yaWdodDo4cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoyNDBweH1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjoycHggMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGRYPSgoKT0+e2NsYXNzIG57b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQWcoe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChSZyhlKSl9Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodW4obXkpKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHVuKGROKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZSh1bihxKG15LGk9PjA9PT1pP251bGw6QXJyYXkuZnJvbSh7bGVuZ3RoOml9KS5tYXAoKHIsbyk9Pm8pKSkpLHRoaXMuZm9jdXNJbmRleCQ9dGhpcy5zdG9yZS5waXBlKHVuKHVOKSksdGhpcy5mb2N1c0lucHV0SW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKHVuKEtZKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLEkoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksZygpKSwyJmUmJl8oIm51bUdyYXBoRXhlY3V0aW9ucyIsVygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsVygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsVygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixXKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltjWCxjdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gJE1lKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCIgT3V0cHV0ICIpLGcoKSl9ZnVuY3Rpb24gZXdlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCIgSW5wdXQgIiksZygpKX1mdW5jdGlvbiB0d2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsNikoMSwic3BhbiIsNyksUygyLCRNZSwyLDAsInNwYW4iLDgpLFMoMyxld2UsMiwwLCJzcGFuIiw4KSxnKCksVCg0KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksXygibmdTd2l0Y2giLGUua2luZCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJpbnB1dCIpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiY29uc3VtZXIiKSx2KDEpLEhlKCIgc2xvdDogIixlLnNsb3QsIiAiKX19ZnVuY3Rpb24gbndlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDkpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLEhlKCIgIixlLm9wRGF0YS5vcF90eXBlLCIgIil9fWZ1bmN0aW9uIGl3ZShuLHQpezEmbiYmKGgoMCwic3BhbiIsMTApLFQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksZygpKX12YXIgcndlPWZ1bmN0aW9uKG4pe3JldHVybltuXX0sdVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtb3AiXV0saW5wdXRzOntraW5kOiJraW5kIixvcE5hbWU6Im9wTmFtZSIsc2xvdDoic2xvdCIsb3BEYXRhOiJvcERhdGEifSxvdXRwdXRzOntvbk9wTmFtZUNsaWNrOiJvbk9wTmFtZUNsaWNrIn0sZGVjbHM6OSx2YXJzOjcsY29uc3RzOltbMSwib3AtY29udGFpbmVyIl0sWzEsImlucHV0LXRlbnNvci1uYW1lIl0sWzEsIm9wLW5hbWUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJzbG90Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsxLCJzbG90Il0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJvcC10eXBlIl0sWzEsIm9wLWluZm8tbWlzc2luZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiYnV0dG9uIiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PcE5hbWVDbGljay5lbWl0KHtvcF9uYW1lOmkub3BOYW1lfSl9KSxoKDMsInNwYW4iKSxUKDQpLGcoKSgpLFMoNSx0d2UsNSw0LCJkaXYiLDMpLGcoKSxTKDYsbndlLDIsMSwiZGl2Iiw0KSxTKDcsaXdlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxXdCksZygpKSwyJmUpe2xldCByPWl0KDgpO3YoMiksXygibmdDbGFzcyIsSW4oNSxyd2UsInNlbGYiPT09aS5raW5kPyJzZWxmLW9wLW5hbWUiOiIiKSksdigyKSxidChpLm9wTmFtZSksdigxKSxfKCJuZ0lmIiwic2VsZiIhPT1pLmtpbmQpLHYoMSksXygibmdJZiIsdm9pZCAwIT09aS5vcERhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLEZlLHNyLFNyXSxzdHlsZXM6Wycub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjFweCAzcHggI2VlZTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MnB4IDZweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjIwMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MnB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MXB4IDNweCAjNzU3NTc1fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXI6MnB4IHNvbGlkICNmZmQzYjJ9Lm9wLWluZm8tbWlzc2luZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZS13cmFwfS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjB9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDozcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc2VsZi1vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO3RleHQtZGVjb3JhdGlvbjpub25lfS5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddfSksbn0pKCk7ZnVuY3Rpb24gc3dlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksVCgyKSxnKCksaCgzLCJncmFwaC1vcCIsMTUpLEkoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygzKTtyZXR1cm4gUShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4O3YoMiksSGUoIklucHV0IHNsb3QgIixpLCI6IiksdigxKSxfKCJraW5kIiwiaW5wdXQiKSgib3BOYW1lIixlLm9wX25hbWUpKCJzbG90IixlLm91dHB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBhd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTEpKDEsImRpdiIpLFMoMixzd2UsNCw1LCJkaXYiLDEyKSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoMiksXygibmdGb3JPZiIsZS5pbnB1dE9wcyl9fWZ1bmN0aW9uIGx3ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxNiksVCgxLCIgKFRoaXMgb3AgaGFzIG5vIGlucHV0IHRlbnNvci4pICIpLGcoKSl9ZnVuY3Rpb24gY3dlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyMykoMSwiZ3JhcGgtb3AiLDE1KSxJKCJvbk9wTmFtZUNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoNCk7cmV0dXJuIFEoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksXygia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5pbnB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBkd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLFQoMiksaCgzLCJzcGFuIikscU0oNCwyMSksZygpLFQoNSwiKSAiKSxnKCksUyg2LGN3ZSwyLDQsImRpdiIsMjIpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7digyKSxsdSgiIE91dHB1dCBzbG90ICIsaSwiOiAoIixlLmxlbmd0aCwiICIpLHYoMiksaGIoZS5sZW5ndGgpLFlNKDQpLHYoMiksXygibmdGb3JPZiIsZSl9fWZ1bmN0aW9uIHV3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxNykoMSwiZGl2IiksUygyLGR3ZSw3LDQsImRpdiIsMTgpLGcoKSgpKSwyJm4pe2xldCBlPXcoMik7digyKSxfKCJuZ0Zvck9mIixlLmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gcHdlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDI0KSxUKDEpLGgoMiwic3BhbiIpLHFNKDMsMjUpLGcoKSxUKDQsIiBhbmQgbm8gY29uc3VtZXIuKSAiKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLEhlKCIgKFRoaXMgb3AgaGFzICIsZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSx2KDIpLGhiKGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgpLFlNKDMpfX1mdW5jdGlvbiBmd2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiKSxTKDEsYXdlLDMsMSwiZGl2Iiw0KSxTKDIsbHdlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxXdCksaCg0LCJkaXYiLDYpKDUsImRpdiIsNyksVCg2LCJPcDoiKSxnKCksaCg3LCJncmFwaC1vcCIsOCksSSgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSxnKCkoKSxTKDgsdXdlLDMsMSwiZGl2Iiw5KSxTKDkscHdlLDUsMiwibmctdGVtcGxhdGUiLG51bGwsMTAsV3QpLGcoKX1pZigyJm4pe2xldCBlPWl0KDMpLGk9aXQoMTApLHI9dygpO3YoMSksXygibmdJZiIsci5pbnB1dE9wcy5sZW5ndGg+MCkoIm5nSWZFbHNlIixlKSx2KDYpLF8oImtpbmQiLCJzZWxmIikoIm9wTmFtZSIsci5vcEluZm8ub3BfbmFtZSkoIm9wRGF0YSIsci5vcEluZm8pLHYoMSksXygibmdJZiIsci50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiBtd2Uobix0KXsxJm4mJihoKDAsInNwYW4iLDI2KSxUKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLGcoKSl9ZnVuY3Rpb24gaHdlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI3KSxUKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksZygpKX12YXIgcFg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEZ9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9WE0odCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9WE0oaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IikoMSwiZGl2IiksVCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSxnKCksaCgzLCJkaXYiLDApLFMoNCxmd2UsMTEsNywiZGl2IiwxKSxnKCksUyg1LG13ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsV3QpLFMoNyxod2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLFd0KSxnKCkpLDImZSl7bGV0IHI9aXQoOCk7dig0KSxfKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbbm4sRmUsdVhdLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvfS5jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbTo1cHg7b3ZlcmZsb3cteDphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uY29uc3VtZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46NXB4IDB9LmdyYXBoLXN0cnVjdHVyZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93LXk6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTttYXJnaW4tdG9wOjVweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZy1ib3R0b206MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LW9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy1ib3R0b206NXB4fS5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5O21hcmdpbi1ib3R0b206NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1zbG90LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5pbnB1dC10ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLW9wLWZvY3VzZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmdyYXk7Zm9udC1mYW1pbHk6IlJvYm90byIsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zZWxmLW9wLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW4tYm90dG9tOjVweH0uc2VsZi1vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtwYWRkaW5nLWJvdHRvbTo1cHh9LnNsb3QtY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLXRvcDo1cHg7dmVydGljYWwtYWxpZ246dG9wfS5zbG90LWNvbnN1bWVycy1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGZYPSgoKT0+e2NsYXNzIG57b25HcmFwaE9wTmF2aWdhdGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChQZyhlKSl9Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUodW4oZk4pKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUodW4obU4pKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUodW4oSlkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxJKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxnKCkpLDImZSYmXygib3BJbmZvIixXKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixXKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W3BYLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxtWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbmFjdGl2ZS1jb21wb25lbnQiXV0sZGVjbHM6NTQsdmFyczowLGNvbnN0czpbWzEsImNvbnRhaW5lciJdLFsxLCJ0aXRsZSJdLFsxLCJjb2RlIl0sWzEsImFyZyJdLFsxLCJleGhpYml0cy1jb250YWluZXIiXSxbMSwiZXhoaWJpdCJdLFsxLCJzY3JlZW5zaG90Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUFveUhwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaeHBkaHk1Y29YL1l4VmVBdVpoT1JnQzUzZ0hYcjYvaTJKcmVtcXJuKzFXaTZTS3hVd2tFSEdIUUlETy91cy9yL3NQL2h1dFpaZEw2M1hVNnZrdmp6emk1SXZ1UC8rTjl6SDQvRDYrLzFMOStpcjgvTHI3OW8zSTU2UjNmcjdSNXVkem1MeGV2di9BWC9jSTYrZlhYZi82VHV4ZkYvcjZCaGYrakVCMzF0Zm54MEh5ZXZ5OEh2TFhoWVo5dnFpanR4K0h1cjR1dEwvZStJYnk5VGQvRzlibmsvN3RmbnFoTVV1bmNLTVVvNldRL1B1WVB5TkluNytUdisxOWpMd3Y4TnBNS1FYMytmUjFNU2JrcDhmNzY3UDNQMDdRVDVQODExZnUxOW4vOXRVdmt4L24xK3ZwbDdtc1gzUGs2KysvRWNvdnI2ZHZ0NGsvaGNPM0VjV2Z2M0Y3elAveU9GOS83ejM5WHZzODNjeVZHYTFmRWZVbSs2OFowaHNYVTU3ZWoxWCtOUDRXdm03dnorQlA5OU52bHZ6NDdSZC9kaGdoc2lyWGhSeE9tT0VHZTU5MzJBd3hSNHVOenpIdW1ONXJQYlU0NGs1YXA2dy80Y2FXUmpxcHMyNDdtbVBOY29yZnhoTGVmY2U3M3c2ZE81L0FXMlBnWWxycXYvM2ovcWR2L2p0LzNMMWJVeFI4L3paWGpDc3FyaG1HVms0ZmVSZExFTzdYdXBVM3dYLzkrVnArLzBQOEVLcXNZSG5UM0huQTZkZm5FcXVFNzdHVjNqb24zbGY0L0ZuajROcjV1Z0JUeEwwTGd3bUpGZkExcEJKcThDM0dGZ0x6MkZtZ3ljaGp5bkd4QXFHVWVCaGt6Q25WNkZyc1VmZm1aMXA0NzQwbDFxaVh3U1lXb3FSS2JuVldhTEpZT1JmaXArVk9ETTJTU2k2bDFOSktkMldVV1ZQTnRkUmFXeFhJelpaYWJxWFYxbHB2bzgyZWV1NmwxOTU2NzZQUEVVY0NBOHVvbzQwK3hwZ3p1c21OSnRlYXZIL3l5b29ycmJ6S3FxdXR2c2FhbS9EWmVaZGRkOXQ5anoxUFBPa0FFNmVlZHZvWloxcHdCbEpZdG1MVm1uVWJOaSt4ZHRQTnQ5eDYyKzEzM1BsdDFiNVc5Vi8rL0J1ckZyNVdMYjZWMHZ2YXQxWGpWZGZhWDVjSWdwT2lOV1BGWWc2c2VOTUtFTkJSYStaN3lEbHE1YlJtZmtTU29rUUdXYlEyN2dTdEdFdVlMY1J5dzdlMSs3NXkvMmpkWE9uL2FOM2luMWJPYWVuK1AxYk9zWFQvdW02L1diVWpudHR2eFQ1WnFEbjFpZXk3Wlp5NDNJNXgxVExudEpsYVMyWHVGWE1MYVplUVd6MjFybnFCazl2UEx0M0h4cmU2WjVZUG5NTWtITDl5UGFIb1FyMm1mT1B4RTNoZnBkMDEwMkZwazU2eU00NjlUcjY1MzFVWUxaY0cvODQ4TzdSajNMU3N1RmRZNXRvMG5pdWxmWG5rbHZJK25xUXNCd0JkZlc4bWRkOFdvbStzWk9vOTU1Nys0b1lrS0w5bG5qWmpKeUQ1T0hWem02V3VXYzVjWlplVEp5bnZ6Zk80MlljNlJvOFJyU0dTUG5sTVMyM25jUW0xZkkvQ3hhVWVUaTN3ZGRzZ3d0cDM3YnB1eU1YYVliSnJ2MVlBN3VYVGFjYlQ1ZERhM0t6RENtMHlmNVV4TTMzYjVRazloRjFuNGFaM1NSU0VzMjhmeldJNlZtZUl5V3hzNDFxK3JoN1dPQzBhVnpEaXVLL0dQQkVRd1NtSkNPbit4RVJhWTk3TTBFYmJ2aHppdG5heW9MR0VQTUpzdTFwaWtRZmdOY3RsNlhzSTF0Zk5saDF6M0c4b2RwS0Z3Y01odXk2UDRsRVRRT0h1TTQyeTdCN05TQ0lPVDdwOVh5WS9IT1gyUWlLMWZSWnoxSFlFT1hpWWZrck4rYVJsdS9oVmZSK1JtR1J0eVRJN25abW9pY2c3L3VaeUQ4RzlEems2RW9Ob3NhR1BhZ3g1WlJLTmNZWjhXem43aUF2UDliUFpLR1lrSnZjTlBORDFuWWMrUENSd1BZMVF5SER0YXRYYzZyWEN4SmRKYlpPUk1oZVZkTEIrYTB1Um14SVJoY2xrMk9lMGJvY3c3aXlFSitaelZNRHlnZitkeE4yWWVzcnJyL1hUeU5pOVdwbjU5TTAwM1dPTkJTWVZFdmRWNkJhdUhQWktERE5XR3hWWUtiZTRXRWNTY0d3K0U2RWt4c25KMEJNOXRCS1l0NkFiVnoxT0dndWdJZmZ2SEVUNkpGb0w0d1Fjem1DeUs4eldTS01haHdmSHlHR0drcVlHRU5ZQlRuT0RqTXRjWnhGWTJiWVZjQU9RSTJJaHQ3dU5wU1JGOWtSQ2RDWVlQT1RyR3lBL1ZyY3VZbUhjWGErRm5SbHlPWW5adFZEUzNqd09vZHB0U2ZBa3dVOHlOeTZaMVhqQUthQll1Wit3aGJVa0ZBaGFBL1JKRnZvK1FRVmJBekN1YlNjRm95ZGtKcE4vYmlIbUhJSE90d3VodG5kT2UwbUV3UWZMRzhoUjB3Z2xLeFJKMjJKeEUxQ0RmTjRUZXJkYndFREd5UFZXZERzdEFHTzJDOExiNkMvbVJnUExtSmg0Z0tyV3p5U21nZjRGRmxmd2o1Y0pVRkRrS2t3T2tYUG5jWTFaSmdLUEVWYWdHNm5Rb0pTSWRrc3hkOFZRTzFteStTNGttUzJGeEJZRVZOWXVseVFrWTVGUS9pRU1iNmNRanVPc2t4SmlsRmdETW96dzhLWUJHVkU2UmhpeDFoSTl0MjlrWHlkS1lqeXpMbFloSTJ1WXlwR0NnZU0xQVhmZUd5QTA4OU9rcUp0TWVtZjBpMXdITUY2K2YyNGtKTWhGaEVYUWlqZ0NIYkVPNUJ2OHVDLzVJbUlsQmdPTUNtb0NnMlA3VGFpQjNBRUFCVnRSbUpNRkppU3pxR0hBS2E3dUFVT1BCcHAwQm1TUTRnVU5JUk5mWVAxRlZOemMvRDRBZDBHZW9vMHJVdTBDWVJBQlR5cVd1Mms0VUJUdHRYaFdJd1JOckFzeERqSjNyZDFYN2NJS2hXdVRLU0FTZVNCbUgwaVl5dFdOc0FhaGhybWpsU1dWV0NMejJ6SkVPc1k5RlE2cnd2YmViVjhpa0V1a3NsbHlMTkNOc3phQTZLWUozeTJMQWN5MnVSZzB5WmhXbXVpVXhoVUVBTFZaSWxRUGNNVFZHelJQc3ZMb214Q2NGeEFhcldSQ3d0YTFDRW02VFBnUXV4aS9qYTZ2K0FBZUdzUWlxdzE4SXRwWVIwSmVPQ3dXQVVsTFl1cjJLc01JMG80bklOWE41VFNZK2h4WjlYUDVGcGRjQ2xlZ3NFUEhZR0poNFVqMlVsWWcvTnJsR25Nc0ptTWpWTGhaWUVYVGxtSURGVm1XeEpTam96QU94QmNxMllQbFVVNDNONUhVL1lhRnYvL3M5RVVHdGtzbWFyb0FkTzhMQlpFRVp5SWxka0pROVRCclJSOGNVcmJJWG9NUE1rM01TZ096Wm9GRjdCSVhGekZZR3FOWnJCeDZ5TE5lZ0VzaW4vcUd1SUt1amh6UEhUbXlSSENFQnJsbUVqUjhlOVRsa09kbmxhdFpQYXVud3dmam5kdzhJMW9XZEFiN295TWs0OUJlcVhIUEdNbGxFbU9VUnNBTU5FdzM1cWhBbndCeU9jZzhrRE9UbTJ2NFl3VWhnS0hJQktVRnBDRFBDL3F4dFA1NlVHUnNZTDhGQ1E4Z0xUbUlucDh4S1pBdWRNQ0k4c09YZkFPb0FMazhEZytWemphV3AwcEhuQWVSNkNsbTVhVFppNVhURjltL3oxN0VKMW1NY29sNUF4MU1KZUFPd2NxOTRCMlJQUWdKUWhqVUh1Z1ZwQnlNZEFXNEFHV1VPSFB0amdJOC8vS3lYbTNLQXd4dzJRTlFRaHFRTjhGU1gvbm9FYkdXNVdBOTBhN01yWGNMVzJWb1NpSXlDZWt2ckgrVHhLb0V6ZzFpMTBaVzJEcEc4Z3pZZDNkNEkyOG1nWFVoY3FSZGowTmlpWGVRQm1RK1M1b0JxMVNRQ1BQRnZNSUV6RzVGb3JTUitJaEc1QndpT3l0bUU3Q0FySjg3T1RpSU5ZUmx4Szl6MzVtWTk3b1dJZ2ZvWmthZ01TN000SUFKY0M0ZG5wbUJjb3VMNllkSHR0ZWt1Q0JzcXVlQUpPUTJxeW54REhzc3pBRFlUSERCQndobkhwVXZDSWNObVBZSjgyRUlnaEl6U053dmg2Mi9xRnN3aGFlVGtDSTBZQ3hTSFd5WCtyOURUbUtCVGowYjhFQTRzKzRzQ3graGM1K1JhWHZESW9oaFk3cTE1SHhqNEpwS1lXYUd5VUVVeURxc1JreDE2NTNGdU1JV3hYVkZ6RUdaQ0kyVEpYaGRRaHpBVzRDcHVBSHlaUlJvTkFZTC9SZ1AyNUVSZ1hrbzhHZmVpbStVUTBmQUxjS1NqT0NCUWJMdDluN2dhdkNUc2ZEY25qUzE5QVpWaUhuTUZvTWY4eFJCR3FnNUdCRGZnK2w2dzAxSndtNzB1MXRnV0ZXZ1hDUnpKdjJSTlEyR0o5WW5pTG13NTBSckpraU15UVZwMG9KS2tUUXFzczBuSm9ZbTNCVUYvRUM5Nk1ZRVNVTkc4MHp4elJEQWpHdG9PTHVxZFYrRTJFbGQ2b0g1S0tyVGxmRDEyWVZmWHZqMU04OEJrWnNuQ2xqeXhtSXlVRkszeXRvTkxROHFzVStFMXNCNElGZzJ1aDgrUkJJaEQ4a2VSRGh2d1MwdUZBVDJVK2FwaXE4Tm8xZ0RWZ1hycGVVRE0yRkljMENleDlDMHArUEJMNklSVGE0TStkMnJLeWRFeW54Z2pSMENia0VhTUFkVnl3dUpyTHhkczQ3c3hYemlVZ2xtRm40bHdCazdBZEhqYUpzUGJTMnV3R0FOeG9CZTBhR1FGN0JHSEhrVW9pY3hUd2ZSVkVFQkFJb2l2NHBGaWZEdEt3NG40UzBHRTl3SmRWZ1JiRHRuczhCNGlhVEtRSE1YSllJVzZ2SXNUSzdoaXVEQ25RRkpKZ3k5aDdjR1MwRzV4RnZKdnFhRWgzSW1TYmRJbWFxVWFNMXgzNHJjUVBmaUk5Q0h2VWFGanczbXNoS0FneGhINXNIT0FEazBFRlBBcVI1VmhkZlgwdkp4WmdlTUVpNmJxU01mRVM5ZHc3RWI1Q01sUjdrZDdEUElWN0lCRzd0RUNaZndHZzBGSEFjVGZnakE3YkErdDZKTUk0eHRrK25FVGx5L0lJMkRsMDFaTXIwVTRuVURuU2o5UFVIOUtqa1A5VndFSmk1aGdHK090NkFZS3ZpQmJDRE1NdFFtZHN6a3V5b3RkK0V2c1g1UU1JbVA2aVg0V1pLTzlRZWxPMkFaOFR1NU9HdzVVQXloK1FaUmpndVhiaUJOZEVsK0d3NktDNDFFa205aU9aQTgxYTlSMFp5NExpaEFoVzFXRm9Ja3NSdkUreWkxd1Zrek4yUmpCdCt3dGdTU0tndTZHM0d5QWVPN2hDbEhWb2hib1lhaWJKQk5Sd0EyNW83Y1JsZVN1MWMyaGNWbFpnRmcxcDB4bU9TMm5ad05hZ0dJV0JYUUVpV0ZZNjdnc0RMWlRUQzhOVlZCeUg5dUxXRjN5SHdNZlZSZDEwZklsREJEQmFhUzVsQlEvZTdtempRMndMWkMxNzhaMnovK3J2c2Z2bzNnSFppM3lkUlVLTHMyU1JDTWpPRkV2Q3BEeU1rNFR3RHplblRvNEh0NXRCVjVOdWdhVE45OFo0bTI4WWZwQ1dKc2Y4OGtmU2pJNmdUK0lrVENTSUF5dXJic0J0ZzVlRE5sL0dWdHdXcTFEWlYxZ2crZGpoQ3p3enlwTm9OMFFiNStnTFhVdnZRVjJnWDJSVmt0ZVV5RVZwbXFRbnZCSjgrR2ljZCs0VHdidW5RVDJ3RDVCV3R5UkE4TlZCdlBReURqSTlBYXI4YUFSV0FzanR4dkNFVjRFRy9qc1JGSFFrUUNFK2VoMFYvQktrbERYQlhRTU9GWFVWcGdGbVNuWWtadnFtNzhia1NBZEVTbkk2VEp4YmhOUG5ManBnMnNCSmNiTW1nOU0wOWlOenkyN2NCRkhYWlU4Z1I5eDNTcmFzRWlCbGJ3eFNYNEpXMFhrQ25rZUltSXhiTEZIK1RFNUNtWktXVkZHc2NqajNFdTRBZ0RJWUxSMkNVT3BBL0tESzJMWXVZOWV5cXVxeTM0NEY1TEI4T2xTN3lQY1dMSTdpMUVkZ0cxZmxWck9LbUdqTzhwUVdtdjJuaUlOeGd4NDdUUVF3dnpYUHd3SDZKUWlvczQzQis0K0Q3Z0JQQkk2WE5Scm9DSUdmS29xUkljaEVnNGlRQmgvWUpsblBUS0VCbFNDSFlES2h4a2tvVEdqM2hPd1d5UlN3Z3ozbTg1U0JrZkNGQWVoVnMycG9tWHFrejlRRUExK0FJS0Jmek5YY2djalRraE1xOEtDbjRra2hoQVJwWHJEUEM4eUJ5OHhBRk1aQmJPWkpjcWY0ZHd3NWloQ3RFaEpDM3hDUVpQUm92YjUyYUFPdmZuN2ZCSzBWY0JqVkZ3UEoybkl3NXNWN1FYREVKQUVFRW92Z2h5NG1tTk1iSlM0YXJZU3JxcS9uc21TNFg1Z3g4TGVuNkFIN3RNQldiZ3NmZFc5UlBraHNrTmtMdzVZdGNCSmN5MmFxd05UMEd1SGRZRHBUVnhtc3dmQUZRQitva3hJUUx3NDdWMjhKTTF4REdlY0ZGM0dlck95Y1dBQk9NdWlHZ0VFS3BxeUptUWF3Tks2VU9LR21JakVyYVBlRTlHdmJoQ1hUbDNNcEoxTkluZmlvaEEyeTFrUEs0UitZSU00NTFRVHVYZkNIT1ZFWkprUEpQVVdkSUxNR1JCckh5cjdBVjZIVTY0clRwWkttd3ZWSE1TYkhleGVndWJuVU92U09uRXh6RVFZeXQ2OFpMSENTQUxpVytDQkFWTWpzWVpuczZXamJ2SUFVTVdjR015cXdrSGtRZ2VFaXFxdmZDb3dQaVJlY0pUZGVVYmdnTGlPb1FJeVMzVFZGM1FzN0FpdmpPZnM5L1NvbTI0QzBzYUlZZUxvbXpuVlVISEVEa3o1cXg2K2V4NUF4ZXFRL2haZ1pGd3ROa2grY2c2VEdOdFRTVmY4TnkvRWgyb2craERQYitxSnZZblFNdkdjckVFUTdWNEx5ZTl0aHU0YnB4RHdBMmdWVkJCWHBWbk12L2pKMVhyQjgyRFp5RklYaS9CZUJMdUJUV0hZcS9JZWlRVW93TDh4ZGpucUp5QWRBdEYrUUZRc2taalNDVkRyVWkzaEhLekRJRmdzanpDbzhyd2t6M2pxdFRIdUYzRGlXT0U4YXhZSHV5b1NJSlVWSFg1N3JWQVE2MzlVQjFzVE92b1NEakdCazcrNjR2TnRVODBnSTJIR3VoQXhOclZac0VKMG1QTUlCR0tDR3h5cGZkZ0xTN1B0VU9kcWdocHg4WmpvVlIzTjJUaHJLNUNZK09CQ0xvMXZ5LzFSU0V5RGNrVytEZmpCKzlJamZqQWxTOUJ1bDRFbmJ4aTVTR1lReGVHOTdXK3FDeVc5dmFFa3IrOStFOC8vZTFIQmJ2dTY2ZGJUS28rQkZSeHJkdHZaQkI4cHZJTU1ZazZSR2FHcSsyZEZqc3FUb1Zuckkrc1hSZlYxNGlGR0JGenF0MGU2ZE5LbHRqV3JvQkM4RXJOR1FCenVEczBiM0QwMWc1RU9wWHBxcXJONExRclYzZmlDb0tpbzN1Z1JrZ1UwVG9BYzlJclJCRlpzaXpQZ3pNVzh4VFZLckEya0k1OEhzYTZFNWtXcjBzSnNBaHJxQm9DdjBraEpIU1dhb20vRzFsNFN2UG9WY1VKV1h1RkpnRVlHZkJVeE1aZmtoK2ZtOFl6MG9oNExBaGNva0pKUFdtVEVQQ3oxMjZxYW8zWmd5YUVRQnl3ekNJRW5mYTJ0MHBSOEF5YVBMM1NrWFF5Y3JxWG15S1lseU93d3Bmb1k3NUdPYUpBbURFWXZnRmRMeVN1dzk1RldFRlZ0Z3lLeGF6QkxQVDhsbWJFNlNIclMwaGVWWFNnSFltZXNRWXJJYWpKNXZGWVZzYkwvWTZFWVpwNHh1YUtlUkVtYUNaQm55bDg4R2FrWXpEdWM4Nkk4UENBWEJHVmJuaG1LaWc5cXh5em5CbUFQQkhqcUZrVG1zQjVWc2lKMXlReVpjWmhPU2dURUlBV3lIUVZmeG93d2t3RFdFQTBzdTRtd0lYVVRIUENtb0N0cXJSa2tyZ0tMREk1R1dBVHhzdFBocU9YVlpCQzdUaXNRWUIrTjZrRVpSdExLaFJFUnFPL0ZvTWxnUUU4bnBYd3cvc3hOaWdROXE0cXl1d2xtRVltWm5tUkhzbDlNa2RDUytVVnhMMzJFdTYrTUNMM2JDUUhJUWoxUWFYNGhBNXVwSkx4VUVIaUY0YXV6SzAyNmd4RnpqS0RnN1djakRNbjQ3UlpodHNrK3ZGM0NQMkw1Z0NwNFoybG5RazBIaUZmTVREY3E0b3FYY1owcXV3bnZRSTlWTmdYbGtsaHk2RmNaRE9HK3c2YnB5RC9zTHBIbXcvWXlDQ3IyN1kyK0haUCt5TFlJME1IdUNkaWhBdGdFd25aQ1Y1V3hBaEJLS09YQ3BGYVlvRmlYM0tRaXVRL09ZS2VaUVdRUE9wQVdOeDg1WXZiM3VvNVdOSVRnMEY2bVpJd2lxbzFoUWdKU3htTnQwSldGdEV2Y2hUV2tyUHlpMXdEMUhlOGVtTkVSblZ0MjE3cHE0a01aaDRZRXJvZmhCeWw5NlpLVmRjbU1oSUk1UTBxSTV6OHdXQTRlVjYwQzdPWjRNb3J6VVRLemp1Snk1MmFzT1lFN1J3aVJyVEZGQUxFS0psZVZVeU9qY1dmUkNaTVN3NlNNUVBnREYrN2NtSFBYM2NjL3Z6Wi9jMDNYbUhTRTV3L1NOMnZjdVV2cjZwSGpDZHlxa3lrbExDV2MyenNYY0tHSTduZ1FwQURhM0VhR05xVGdsSklBcC9Bc1FOTlVtUFR0cit4Rmp3Kzh2Z1FGUjFRZ05HeTdHWUNRbFJneTB3U3JwKzhnZUlJRER5c29UcDIyRThjVzBmanNjNE5FRzU0ZlRmbFdyVm5KamRWdER0ZEQ3SkxHYWlFdmQ2eWpKc0I3Smloc0hidkdkT2pLaG1rc3lDVEtOVStISFN2NG1Rd3dHbStUWCt5dFdFak5obUpvb0Z4MWdzMWZGR1Q3dUhua05mSnczS2RJR1ZjbUQwdWhNYmNJaWhNaUJuV2E4bUtTcVdOeXVPQm1WZktIQjJETnNaVHR6V0lrUnJYMVA0S3VLeFNMZmVPcmszeUdXbU8zMVB4a2ZqUk5oekQ1ejRCTHdwbUl6dTFWY2ZQQUgycURRTkhRTmxSdXd4UWMzS0pIcWdGY2VHbHF0MlUzaGx3V0RGQmZIaEcxSWdLOXlTanRPd2JBZ21PaDJNMlVMc2tMRlFKaUYvRk9ibDJtVlRVSVl6Ynh1RXlUTE5YcHFQRlZKQVBTdTVXNE9CbHFwS1JGZHJTYWRwSkNVYzRnaWk3M1NuQU1NQ0d4c0dPNTFLODRhb1hEOGZ6NTNhczdQSElTRnhZVkZCU0ZXaEZuaHRHeFpCbU1nVzhkK2lKZ1UwR0I0SGF1ckZmQUFQTXBuSWZRczJQaVhzYVVBYlVyRktBcWNoVWJ4bDNlaFUzVkF3MWRMc2pFTXRaU0VVaUorTVN4emI4T2pQVUNJUEpkR093eXArS2xYeDJmM3JEKzV6YlUwRS9FVno4K1ZYM2VUbXJDd0UxTE13SFNHUzNlVms4OHNjODQvTWJFZHIwZEw1b2llQWVpSm5iU1pwVG1TQkFpSHlwUS9VbVZvMmxlYzBPc29tZ2N1U3hRUzRpdmlnVUhTcS9Cay9VUnVJWkE4Q2l3UUdtYlpFSWhWbzVvbHl1dDBsc0VCQlhTSlRXeVcwcnQ4UWNUZlN6YmFmUzFsRlR5V2lWY0ZSUkNXN1dQdWtjUWxHWWtyUVA1RXdJNlBrQkFJajE0R21HaGp4QVNFT3VDekVLd2o1ZmpRcktoUWtpNmswYmhUdy9kQTZwUUp2RWc5NVRDVDZVTk0rTFdVcnlIS2ovaGhRblRSekFqT0pDWkdRWWE2bUtmREdKQUJONmZXdFBFZk84a3UyQ0xrRTlNT2NnUTVCcFNWUGtXREVMclk2dHpRT3k1THlaNTVIOXY0L1duOC91LzRyV24ralFoVjZBSU41ZWlCRDd2NG1tRGZlZUViQnYyQlkrYS9EYUdwb3p2NjRlZEs1MzBoandONFltTE1nV2FZcHJrTy9ydUpWVSt1enBaSytleWJtOGR1bXk5aENLWkRvNm5pa2g1VHI2d3FuSkROZ1p1QlQxVFhqVjdHQVhkV0FZd3Z1bzFZREFBeW40dVlsbkRiMUwzbFFWWVZHQy9hSWJOeFlDMkxQWCtZQXhSS1BhUmUwbGhMbEt2OU1EUmg2VTJFVzlVb0FBeHV5cWsyR3MwaHUyWjlaU0ZwTlIwVWNzT0pNV3NXVEF3bGpNUUZON0JSSitxV21reTZXaUFmak9QZ1Q0eEFWbStCb0l4b2JoNDlDVENQdnV3QmNHcHgzcUhMc3VMcS9aMVFnSm10WE5jc0ZhRFh2S2FuQVhWUlhVMHptMVNkQlU1c1hUSTBtU3d6S2poMC90WGIwNm5WREV0dkxvVU1aUkZZaEhyMWVsdmZESzR2QnZVTCtOak93Wmw4bEVBNnBMeG1ISTc5dTJld1Z4K2JKanIzcXZIV3ZFSWFsTDhpQjlHMUJ2dGNicFZRZGZvQUorQWZyN0NrRDN2dzdsbnlOWVl2UTNJZnhMeGUySEVQNFI0SWdUTUxJaFhtdFJpMTZPK0dQOGVDeUw5Y1pLVjVRdkQ0OVZxN2FySERpQzBCUEJYcVVjbkVCQ0E3SUEwRm1NV0FodGwzT2hzMnRsUFZ2SGZLcFhFZ0VhdWpvc0pyb1kwdUUyUFZlVlptQk5FQWpFUzB1WFpBV1hDaHNwNVJyVU10eng5QW9kbUNoT1JPWUdhSTh3Vjl4VlFHQitKRGVwL0ppdmpGaHFUTUNEZlJ6SDNSSVdNejJDSEtnWVRRVzhoVGhPRlFXMHNHVG9Eeit4eWwwTmZhQmNVaytiL2k0UURuN1Vaa2RoTlJIU1l6Z1ZHRGZ6K3ZiYTBVZmhVNlhFREJiKzc5cHpqM0hYcmRSVnFWY0RrTFNlNGg2aUdyRXd3SURBWk1QUFVIcDdaU3A4UllqU1hnSmw4bE43bnR5bG81SDBzNEM4dXFud2ZKZ1dGYXR0cVAyTlZHcGdkbjZkWXZBeXdrcjlrdHEzU3lKbmlBT1JvSjJEQTkxalFmRVRKS1J5UXJZOVk3MTRYbEQ0WXAzZFpMVm11bjZwbFEybHN4VHoxWU1HNnJVaXNDN1NYcDE3dnF1dmkxRUFhVW5tVUFvR3hjNlRzL0xaZVF6SzNsUGNienEzRUNmbUZPL2VGay96UXdyOEtjTGRQMDJCUDJXQSs2NjVKekZBa0JiMWRCZ3FHWGFDdHZkRDlMWXdITkFpR01lSG91YlZYNkRkL1F1MkEzU1laZ1QweHVnRm1lMEE2azBZTDJybkhpU0RIOHBTR0dzbi9WV2RtV1duTWlnc2dEZ3ZTZDJDVzVvV1RReG9FdnBGRUJkR1pPSDUzMlFFTW9EZlZIb2xKcXdrTlZXbjFZZER6a0VwRXYvMXFwemVFWUpqYWRkaEVwblZ0NkZPeTJxM1JJWGNBUm1uOW82STJ5RXNaOXl2NThnVmJRL2tHbGxwaG5ZelNaS2x1NWNoR2dyM0s0WG5BUno1Qm1HNk10azJjTll3aVhaUXlBaThPQ0RndUFwRVB0Uk9jTkRPZlRMUlJPQmMrTHJJRFhpQ0pIMGFkSExnempDWmFyQy9nOHIxWEJnc1pneGpQbTVuOWZpTk96TGVEOEhEaTY5ZlM1VkV5R0U4ejRwMXFRbkIzOVh3ZVJQTElRSFA4aFhiMEoxNk5Sd2pWL0Z0bWtwcGlIMVNLbDMxY1FIdnh5Y216QWg0RldiZzRueW55ZzdFK1ZCaGJEUVB3aStHYjhBSXBrZm9yaklENlExV29heUREaFBjWHRSQWhzSTI2V3Z0cDVkWkEwNFZGY2VqcVg5cGtDcHEwNTdOWmRidTlsZnh2cjNKREtzWGlKd3BhZ0dNMmlWSTJrSks1b1dRaDRmMDhBNW9CYVdwQ1dQQzZBQ25xd2hUVm8vcGhtTUJ3U1VkcGRNMVVUdmNYZlg2Qm9ZdmhDU2VBb1NlYzN6MjNIdFZuWFIxdENwcjRuRDBtRFVjRUVhNzR0WEIxalQ3dDQzNGYvelovYzAzL25FSFFQY1JWUkVXVEt1ZThDSExrclNCMVpCQlZhVWlnSzBBS09SNCtvV2hnRHJkOExGSjdFeGZxQU5abzIvcWNBbkN5cXVpRnIyYWtoSEtSSEx5YWlsUjQycEdqZUZhTUhkb0tCd2RZbDRkSE9GRDdUZ3RKKzljQitIaXRWbU85OFIydC9xcVZNZ1BOV3pPOWJ4OFhnZ1J3Y0x4T0RiQUNwOS9rQ0E0Y2lJNTRpQ3pmLzRZZUpycUF0N0k0bDdVMXhZeUQ2ditYM2dMZ3RLbXFUUUxrU28ySlpFSjhTNjZ6a3daNWxpbm4xajhya000TllsUWg3WWxWaW5pKzVxMzZwMktmdlNhUWZiaHFLcll5SjVkeTJjWElkZmt1RW1CVVB2Q2VNdktYVzNZc0JMWWZ1WTlJSGFPT3V5Z0FqWExRWmx4bjAvSEYzQ0djaWQvOFR6WnUyenc1Rm95SityZ1hjMTRaMVE1d1I2cDZGaktWSXNoZHA4MVNETENaS0dGdlhielF5MXorRXVmbkh5a1IvaDkrcjlSV2xtTjhpZ09pMVBaUnFaM2JhdFVCYzRlTEtpNkwwRTFra0FkTzlBWkNCdTNrOUtOeld0N3E2azNsOHhnbXRXbEhkUXVodU80QVdTOEltSXNqcW0rRGtIa3JGdWdUQmVhMHplYnp2ZlhMWEswY3VvTnEvOVdZbnovN1A1dmlmRTlMOXkzeEFqNFJPUS9EaW1EbUFpVEVWNERJbDYzditSSW1ESDVaZE9STWVTWnJuZWUxOU0vbklEQU5yNERhUUw5cTF1TURBdEw0cWwrZGhqZVA4UnJCbkkyWENDejFpUUxwdHBNa0NERWZuTmVMZXNJeXNKdE85eDJjWXhSTzlITWNvM3F0Y2NxNDM0YWNZUGdZbUlEWkJRR0xNRmRXU2h0ditDRUFUWjdIZW5ZR3BCZDUxOUFhUlI4S3dqRFlRdUZBZmJtZ2xHRzc1TzBxMDQ4cU85eXFYWUdHdXN3eVhSWHgwUkl1NkJHV2ZqYkFxRjhjTVFXa0FUcTQ5ZXVkb1pCc1RQY1BodnVOSlBVR1YrN3RXSHBwemIrSGU3RTk1bmdPU1FEbzJ3cjk3NTBLSVhvUWRkbEZVUmlid2ZrM1dCcHFxcVdvVWt3TUJOWXpVR2xpTkljendCckFNdWdNemxOdEFMUzZwRDFLdVlhMU5KS1VISjViTlpONEQ1S051eXRYc1FiTXBPZzB4K1ltbWllYWI3dnVDVDJwVEl6NEdNSm1HM0U0dFgyUE10NVh1OHpDU2lOaHNyME9nVDBObnZGRVVnQTVzaFVwQjNxMG93YTU2dmlxdlZsRjUzQ1BGc05TaVRNK25ESFVDRXJWSlJuSndxekN1cisxVjJjSGV0b2cvMTZDWm9rbXRxcjBpei9xSXp6L2JQN1RYM25kOVdkSDE5N3BSM01KZGF1N3BYUmFZQUp5NytCWGlrVk1tZnNqQWkxUWZ3VXNtWm9uOWxPUUhHb0tGaTBwM0xRWUhWNFNlM1MxQmFyblhmc3RBdnF3a2YvcWxxcFhpL2tJZFpheHVZTXNTYlhCeDVtMGVHS2lVQUNKa2tVUUZ6MVEzQk9MWk9xL2pnU3BXbi9ITnFXSkF2aUFMUlVsWmtZYW1RRi9kV29SRmpoUEdUUjFMYWhSbGtOSFRXRlpqanpIQWNUbFk1R3JWanBScENDbStSNG03ZTkwdzdWSnh6Rzk5RWtaUTlzRlkvQ3BOU21QV2xaQkxkaGtLcnhvUDM5OEFkaXFub1dLN3laWVBIYW53c0pWT0hIZEJmMUl2WWdad3VuUWEyRC9LMUhVSnZVMjV2R2F5bC9iYnhEWGJoN2FZY1F5RmlZa0tGMk9nRldyWEpqVENOY3E2M1JxdGFuVHZRV1p3dzhvcURtNitEUjlnU3U0U0o4SG1UaG9kWU5RV1lvUGRqR0NaWUxDSUpBb2FreVRTWkttM3FuYlUwVWRtWkE2dEFONmo1ZytSRVFHUk5ISE1VK0lDcG1UNzN0aUdxenRxTzJOOW9wVVhLUFVJYWVkWDR0cVdXOWRaOWY0eDNxS2VyZkNaeVE3MEZnQ0MzUm1GeEN4NFZXLzV5cDFsRndTVWhzSS9iV1NTWWpudFhwaSt5ZGIrV205bTZVekZXVlZSd0xNaG5RanhrL2dISlhHeXlwT3UvQ0hFSklrdS9kYVk4TFRZR3Mxb2JLN0MzcXpKdHdqMXpndmUwbEs1NG5nUVU2bVljVzZ0bFhuU3dkUElmT2tMRnNIdTQvRnpPb0dySk93T21JVTFFTDY2aEs0NlBqQmR0UVFIVVAxTTNTeHVMcm4rU0Jub0VJa2xUQWlzc3FIazAxUFlNVzB1T01DUU9wcG5VZ25vakJZQ05tb1QzZXBmWHNDN0JjRzVWbXpCNzRDQUNHRnB3S3BkeWZod3JhMmxISkM4R0U2bFZqdjQ1WVJwRDFuUmxwMGtvdzNJcnFRZHdxTVBTa1l6WHZvSTVMQkRyV2cyQUdqRFRRRmRXc2lZd2p1M2xzeFdzaUtGRitoYlFoanordG5CZVYzbEVRMjdUcGhSVmRxYXRCd1ZUb2dqMks5aUIxK28vazA2bXlyaGFjUHh3NmVKL2RyeS9NOUx1ZDIvRTNyN09lcUp1R2wzT2Vod0dzVklaWXRoSWNxYk5ocFl5a1V3RkVYSzVxR0F5cWRNRTNwaU5qcUZCN3UvTnFNRGJaQnZ4YThOTkQxN3ZML2NrNk1qajFPRWlCYmpWb1Mrc09uWTlVcElXRzZEMUZpS0IrVkFsRXdwcC9kS2Q4SldZai9PRUpMa2xUbmVuRDBsaW9SM1pKdlcxQkZxK1Qvd0ZLVTZwbGpCanlCQnRFN3N2dnVsV0lhL1JwbThBTllVRld2Z1hkRXBrWjhFQzhJZ2ttNHBVTVc4R3Zyak9NWWFzckNBRFEwU0FBRDMyRWJoektwbDVRUUtBbmowMEVHR014OVZ1eTZPcjF3SGxsSFd1OXdONlZLdTlsSUtYcWErVU53SlJqUGRTVHJ6Nm5yYTBTMVVFS1FPVjVaNS9vUkJEUWdwN2d5Tm9pT1dXbHBvUzJwV2hiSllzT1FqdThicWhkbG5PaFg4dFdSN2pzdkZ3N3M2eno2SVMyQ0Z3MUFlZ3ZxV2FUWDZkUndCS2kwT2ZyaVloWnZmbEpoakF4djFxMk9zTE1WODNtcjlPQ3BBUW1jdG9kSlVUZWJSMW5KS202am5Rd3o2Qld5dWJVZHJpbkFxZG1nSHJ4K0pNbEJac2dWL1dBNExxM2ZQeGxGQ1NjZW9KN2YzUUVaL0tkcWpPWEl6cENVNms2bmdwcmFqU0trbjJXZGZvTDJwaXZzcTVOZzJaYkFnejNQSnBrcStxRkVhUWw2ZFVQU1U0djlVbGovT1BWNFF4Ri9sVGZvamI4MEh1R3hvTVRab1NwSjIrcFlIbDhqV0ZMVFdiYzhiVUVPZkpiSjE2QUVTT0psMXBJY0FaM0UwWGExenFmUWo1Q093ZVVLZ1lwTTljWHM0eGVyVkREVmVFZWduTEk2bGRxMGpHZjVGK1BPZ0NLd1BDQVRYenQxOGhLS09rZFNuMEhVT01lQ1JmZVdOS3dKWkZMeGZmUHRIR0lVZTcwQzBPSEhnS0ZyT09IT29YeHJpbTJBTE5ST0dyM1VSZE1mbTM3T2dCVU00YlBmVzdac0RzNmpEdDFJclBLUG8xSU1uRDV3NHJzcWUwcklwMjViNm8ydk9PLytNMnJmakVHaXZTQSs2K09oYkdzQ3l0d0dmUmdEVUdKRmdPR0xSbDhBSGV5M01qdHc4K2xGMXM2andscDQ0YUlhbFhRM0swNkpzUFVraUo4NUp1SFJBT1BqeDZvaXpNQkh5RzJPb1M5UEF5V3NHdlZwODRuSWFnUU5iNDZqM01rK0hCcnlFMUNmYXB3eTlCRXQ0eFlQUVY0a0lKT1B5cFFGQjBQMVc3VGh2a0JabFI4RWxjV0xvUjlrbGJEcWYwQmxuOUNZMzdpZzd0Q1hiQ1l5SmF0VmxsaEU2RkJKNGVaRXgzekcyQUd5eiswVjJJZW9GMEJrVTB1QnpLQW4yTHdPcGFtazNoNFN2RG82S3duWVkyaFZJT0tnRTBLdEttQVhWdFc2VGNEc1dTY2prc09uaHBKb1VLampvUyt2Z2ZVU0hKRUFoNTZYdlZuRDBDMzZWaWdOSXlLRnNBcXJub2RuUmJzNnRYSTFscUdKMGFYekh0T1NzZVhSeWx1dmhNREtlb2FnVlU2NzhqTXVrWG5VTFlSRXNnaXVKajV5Zm1kazlGT1RJMDR5cXN5czdxeHRSUHNKSlNoQXJWU1YwbUZoZVBXcjYyNTZ0N1BxaG52WkUrYkEvdzFxYnRLblNpaUpwQWN5T2tnSXVIdFZEY0pSeWM1TXNHVG1ZWnlGRTl4RERXdUVRb290S1E2ZGJpdlpmTXBiVlRHOFRyWXIrbzFkSnltVytDbEt2UEFIZ1kwSmprcTRMRXVkVTJUcm9yNU9Lc2lWaHlLZXJEUGZuWldSNHlCUk9LQ3Q4SFMxRlErOVFzSU1objhkajlWcWlQUloxQ0h0YW9YcUFVSlQ5UHZxQ0RSZ0hOV2k0VFNyMkpJNnFFRWFoa2RXVlJQMmEveUErOWNEV1FPN2ZITHZwTzRCRS9TTWJzZG1lV1Z0QnNjTUpVSFlhMFRJLzZDMlZPSFgvRHN3T1c0YjRjQk80bzhOa25RcTlOR05wTmEzbC9mS05tZ00yTUExd0Y4VlZLeExBUnRGYWJGZUNQQkNrK1BMMG1LM3U1ZitYNnQxNE5DV0h5MEI2UnFxUHJ4ZFY5MTNNMm54blh2dDhIeTYrM1Y0TVlBanJReW5LL0RqSkx3RVJ0UTYrZjRxOXJpd05KZnk0ZHBaS1VaTVlYMXRUN0dVY3k4WlZXaGEwb0pCcEFrTGNHaXVnNjVERzhJK3QwTkRFdktmK24zVkRTMTM2b1NFZ1JOYllYUCtUNGNIY2dUMWRHaVhzSlFsQmZJM1hjbTBkVE9OUHgrSGNVNlRuM2Vob3JZcHg2TmlTVGYydWtETUp2T1Ztb2ZVSUN2WDdZQlpWYnBWY0VPVWU2MUo0NEN1TXl4bTE3dE9QaHM5QmI2QkFwODlJT0thV3JDMFdaUGwzZ0YxOEE0Uk5kYThCS282MGRQSFMrTjZBRWxzdE8yVndPeldhRFh1UXR2WDIvSTBVU0dLTlBpaWpvQkgxR0VvS0VlR1E4RThSSHhhcVdhUkJqTGtWd1JQTC9xQmE1Tk94dzRmLzArRFpWMmVsRWxBUmFFRW9QTVU5cFBoT0ZkdVYvZlg3VUEyVDBCVzNqOUppaFNMRTFDRjl1dU9xK2wzeFFROUJ0KzV0YXZwakFVMzJnNkUzdWZMNzBIVWJrTVMwVjB4Szcrby9kVHI1Nm9JOWY4R3hSbFRoRStUUzVTcGU4aFFZcHE0T25SdlYzU1FEMC9yRVpRWHd4eGFnN3VuSW9RSkNwZnFLWDY4N3Nmam42ekNXOWE4QXNvZFpkeUdyUWg5WEVkVytjS2NsVGJzazRHQWE2T1dmU01ZdWhYNmFoelg0cDFmQjBnSU1hQUNJdVNuVG1yWkJySGZNejcyVmZsV2RSdnRJd25kWDNqaWZEcWFtTnFLTUFJVE90d0lpS1ZtTitXL1k2Q2ZHZ3ZhZzk2cFBTTTRINlNGeXlEd05VMDUvQ0NBZERXV1pDc0xkd3VjYUhmemhXQ1RxcW9rNlFoTVZqOGhiaEMrcGFqWHlLaEJoQjFXT2diMkxnVm5Gd3E0azZUcXM0dHBuYXRYWlorcFljNjUvVmRzYTVPQzZKbG1PaGNsVWdyYWFjQ2tHbytlVDJqQXhLMzJzOVgwTG1OZEZqTmdSTm5wcHJ5UThkdzFTeWNWQ01zUERKSmtMWEZxWk54T2pMejE2L01jZ2lFOWZlVklSd2o1dFQ5TjlDdXRoamc2dDE0QUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUI4ZkJWeEh0QUFBSUFCSlJFRlVlTnJzblhsOFZPVzkvOS9QbVMwN2tJV3doTVVFQVJFRXBBVzBJbW9ScFlxMWlGV3cva1RGdXJTaVhjQzYwTnFDWGJEMXV0d3FXbXF4cmREMklyZFhzYlRJOVlwTEN5aWlVdGtERVJJZ2V6S1RXYytjOC96K21ITW1KNU1KaXlJazhMeGZyL01LWkNZemt6Tm5Qdm51WC9IOXIxM0FtcTFWUkgxOUdUYnhadVpkK0FHM3oxdEYwUjJyV0R0dkdGRExpaG5qbUxkaEhJcytXTTcwUEtEOEdhNjQ5RkhLTDEzTTltY24wNHFmRmJQR011L04wU3pZc0p3Yml1enZSeWxmc1lDSEZyL0M1ajBCZklWbk1mN21lN2ltYmdGMy9DN0t6R1ViV1RpZUxrazRIT2JBZ1FQVTFOUlFWMWRIWTJNalRVMU5CQUlCV2xwYUNBYURoTU5od3VFdzBXaVVhRFJLTEJZakZvdWg2enE2cmhPUHg1T0hZUmpKcjRaaFlKcW04OS9DTkUyY2g1VFMvaXFrbE5nSElGSy9Ba2dwaGZYU2sxOVR2aWQyN2RwVlhGQlEwTnZuOHhXN1hLNWlUZE9LTkUwckVFTGtBejJBUENGRUhwQU5aQUdaZ05jNlhJQm1QWjRKR0VETU9zSkFDQWhLS2YyQVgwclpKS1Zza0ZMV0c0WlJwK3Q2ZFNRU3FUbDQ4T0RCa1NOSDFsaVBJeDFIdS84TElWSnZzNzhISUlVUTdiNDZEcWxwR2tJSU5FMUxQYVRMNWNMbGNxRnBHdmEvM1c1MzhxdDllRHdlM0c0M2htSFF2WHQzZkQ0ZlBwK1B6TXhNTWpNenljN09KaWNuaDl6Y1hMcDM3MDZQSGowb0xDeWtaOCtlOU9uVGg4ek16R080NnZ5c216dUptemRQWmRYYStReERrWXA5MGJlZXNoV3pHRHZ2VFVZdjJNRHlWbVg2SElpeWJzNVlibDVWeEIycjFqS3ZpNzA3c1ZpTUF3Y09jT2pRSWVycTZtaG9hS0NwcVFtLzM1OFV0RkFvUkNRU0lSS0pIRkhRbkdMbVBFelRGTGJBcFloWkd5R3p4Y2twVXFtQzVmeC9UVTNONEp5Y25FRnV0N3RNMDdSU0ljUkFJY1FBWUFDUTBVbE9jd1RZSjZYOHhEVE5Dc013OXNaaXNUMk5qWTNsQXdZTTJKMGljUEl3Z3RkT0FHM2hFMEswRVRwTjAyU3F5Rm5DbGhRNTUrRVVONWZMaFdFWTVPWGw0ZlY2OFhxOStIdytNakl5eU1qSUlDc3JLeWx3ZVhsNWRPL2VuZno4ZkFvTEMrblZxeGQ5K3ZUQjYvVWVWdEMycm5pUmw5NWN4WXBWbFF4YjhDckxieWhSS3BZR2R5M1FhbGh0WmZIdjFoUGpMQzRjWDNUY0JHenJNM05aVmpLUCtWTkw4Tm5mTFYvQjRuVUI2RHVWUzd1WXFPM2Z2NTlEaHc1UlcxdExmWDA5alkyTitQMStBb0ZBVXREQzRmQmhCVTNYOWFSMWxpcHE2Y1RNdHNwc1liUC9LS1VSc2piLzM3VnJWODgrZmZxTThIZzhJMXd1MTlsQ2lMT0JzeUQ1Vm5SbU1vREJRb2pCdHBCNHZWNXljbkl3VFRNS2JETk5jMnM4SHQ4YURvYy8zcmx6NThmanhvMnJzeXhGS1JNblN0ci9kNHFjbEZJS0llejdKQVhPTUl5azlXWmJjOVloT2hJNXA3Q1pwb21tYVhnOEhqd2VEMTZ2bDNBNGpNL25JeFFLRVF3R2FXbHBJUkFJNFBmN2FXcHFvckd4a1lhR0JtcHJhK25WcXhmOSt2WHIrTE8wNmdsK3Q3NkljVGMveVpOSzFEcTIySVpjY0QyVEp3NmppRm8ycjF2REIxVlFldk5TVnM0ZlQ5NXhlWXBLVnN5YXhydzMvZlFkTlpHSm8wdkF2NVgxcjJ4Z1Q2d3ZWeTVleVpPVGk3ckV5YXF1cm03bmRqWTNOeWZkVHFlZ1JTS1Jkb0oyQkN0TjJHNW5pcUNKRHF5eWRoYlp0ZGRlNjFxeVpNa1hNekl5dnVCeXVjWUlJYzRGQnA5bTEvUXUwelRmMTNWOXM5L3ZmLy9yWC8vNisrdldyVE1kNHBZVU9TR0VtYzZpUzJmTmFab20wMWh4dUZ5dU5pSW5wU1FyS3l2cG5qb0Z6dXYxSnEyM3pNeE1zckt5a3U1cHQyN2Qycm1ueGNYRlNxRStyYkI5LzZhdnNHNzlOdXJJcGJCc05GTnZuc2M5MDRjZEoxR3pxV1g5aTArd2VOazZOcGRYRWFDUTB2R1R1Zm1lZTdoaGRPY1h0ZWJtWnFxcXFwSldXanEzTTEwY1RkZDFZckZZMGtKTEUwY1R6amhhR3N0TXBJbVgyVmFaK043M3Z1ZDYrT0dITC9ENWZPZHBtbmErRU9JOElFZGQxbTFva1ZLdWo4Zmo2d09Cd01hNzdycHIvVi8rOHBkNEdxRXpuYTZyUStTY2NUbVphc21seE4ra2xKS01qSXgyc1RldjE1c1V1STdpYjA3M3RLaW9pRjY5ZXRHM2IxKzZkZXVtM3NYUEdtTlR0S0xyT3Z2MzcyOWpwVFUxTlNXdHRLT0pvNlZMRHRpQ2xtS2RKZDFNaDBXR1U4aWtsRnBEUThPd25KeWNpMXd1MTRWQ2lJbUF1dXFQOGUrVWFacHY2YnIrZG5WMTlkc0RCdzdjYm9sYk82dk9hZEhaMXB2ejMzYUN3U2x5VWtwOFBwOU1sMXhJdGQ3U3hkOXM2NjE3OSs1dHJMZCsvZnJoOFhqVXU2ZUU3Yk54Nk5BaEtpc3IyeVVIbkc2bkxXcTJsV1piYUVjcmFJWmhKTjFNMHpRN0ZMTlFLSFN4MSt1ZHBHbmFKR0NFZW5lT0svK094K092Ky8zK053b0xDOThta2NVMVU4V3VJNUd6a3cyMnV3cmc5WHFURmx4SEFtZGJjTGIxWm91YjB6MU5UUzZVbEpUUXExY3Y5WTRwWVR0MmdzRWcrL2J0NDhDQkExUlhWNmRORGh5cGZDUEY3UlFwaVFHbmRTWlNMTFNrbUlYRDRTbGVyM2VLRUdJSzBGZTlNeWVFS3NNdy9oRUlCTmJtNStldnBiVmNKYTNJT1dOeXRxc0s0SGE3cGJNOHhCYTVJMWx2cWU1cGJtNHVlWGw1OU9qUmc0S0NBb3FMaStuVHB3LzkrL2NuT3p0YnZWdEsySTZPL2Z2M0o2MDBaeXd0WFhJZ05aYVd4a283a3FDSjFKaFpNQmk4eE9melhTV0V1RktKV2FjUXVkVk5UVTJyaTRxS2JFdXVqY2lsV25IMnZ4M3VhVHVCYzd2ZEhRcWMwM3BMVFM2a3h0NUtTa29Pa3oxVktHRURBb0VBbjN6eUNWVlZWVzJzdE9ibTVqWTFhVWRaWkN0czE5TjJOdzlqbldtTmpZM0RjM0p5dnFacDJ0V2dhaTA3S2R0aXNkZ3JCdzRjK0Z0cGFlbFdoOEFaRHBGenh1YmFXSEYyOXRRV09VdllaRHIzTk5WNmM5YSsyWmxUMjNycjI3Y3ZBd1lNSURjM1Y3MURTdGphVzJsMmdpQmR4ck9qRWc1YjFOSUptck5Md0Nsb3RwaXRXclVxWTlLa1NkZTYzZTdwUW9qTDFHWFlkVEJOYzAwb0ZIcjVxYWVlZXVYQkJ4OE1BL0dPUkM2ZHdEbHI0TklKbkMxdUhaV0dwR1pPN2NTQ3N0NlVzQUVRQ29YWXUzZHZ1d1NCYmFXMXRMUWtZMmxINkJ3NG5LQUpwOXZaMU5RMElqczcrenBOMDY0RDFKWFl4ZjhtNnJyKzB2NzkrLzg2YU5DZ2JRNVgxVWgxVlIwQ0o0OGtjQjFsVHUzWVcwNU9UdEo2UzAwc25ISEdHV1JsWmFsMzVuUVZ0b01IRHlaZHo1cWFtallKZ2lQVnBUbEVMYTJnV1FXMWJkek5VQ2cweGV2MXpoQkNYS3N1dVZQU2lsdloxTlQwVW1GaDRldFN5cmdRd2lsd2h0T0NzNFhPR1lkTEZiaU9ZbS9wNnQ1czE3Um56NTVKMTdSMzc5Nm4vWHZpUHAxK1djTXdLQzh2WjkrK2ZSdzhlRERaRXRYYzNJemY3eWNZRENaRkxScU5wdTBlc0FYTkVVZExLMmczM25pamE4bVNKVGU2M2U0YmdRdlV4Ly9VUmRPMGFmbjUrZE5pc2RnN08zZnUvUE10dDl6eTBzYU5HK09XbTJwSUtkdGxWZzNEa0tacFNrM1Q3RmlzZEpZRXhlTng2U3dYc2owRVp5akUvcU5yL3hFT2hVTEpkcTJ5c2pKY0xwY1N0bE9kcHFZbTl1eloweWJyNld5Sk9sS3hiUnEzVXppNkJKS0N0bW5UcHR3UkkwYk1jcmxjTjZGcXprNHY5MGVJTDJWblozL3BYLy82MXpjamtjanlaY3VXL2VXMjIyN3pXOVpidkNPQmsxSktSNkcyVStCa2FndWVzOWY0U0FKWFdscEs5KzdkbFN0NnFsSlpXVWxGUlFXVmxaVnBhOVBTRmRzZXhrcExHMFBidG0xYmo3S3lzbHRjTHRjdHdDRDFNVC85TUF5RHlzcEtCZ3dZWUgrclBCS0ovT0dWVjE3NTgzWFhYZGRvVzNEMlljWGd6SFF4T0dmZG05TTlUUzBMc1l0NjA5VzhsWlNVTUhEZ1FFcEtTcFN3blVwSUtkbTVjeWVmZlBKSnN1RDJjRm5QMUE2Q0R0eE9POHVwU1NuRmh4OSttSGZXV1dmTmRybGNzNEV5OWZGV3d1WVFOcHM5NFhENDkzLzYwNStXMzNycnJjMUhFRGpUMFhTZjJya2cwM1VzZEpRMXRRdDZCd3dZd09EQmc3RzZKWlN3ZFdVQ2dRQzdkKzlPeHROcWFtcVNXVTlud1cwSHJxZEliWVZLc2RLMCtmUG51K2JQbi85Tmw4djFUVlQ5MlFsOFl3OUI5UTVvcUlCd1UrSUF5T3llT1BJSFF2RVF5TzNWbVlUTi9rTzdMUlFLdmZEMXIzOTkyZXJWcTJPV3dOa2laem9Femt5MTNwd0M1L0Y0WkVmOXBzNXBJZm41K2ZUczJaUGV2WHZUdjM5L0JnMGFkTnJVdkoyU3dsWmRYVTE1ZVRuNzkrL240TUdEN1VvNVV1TnB6b0JzT3JmVFRnellXYzVJSkhLOXgrTzVFeGlubE9ZRTBWQUJ1OWNsdmg0TitRTmgwTVRFMTA0aWJBNkIyK2ozKzVkMjc5NzlGU0dFbmlKdzdWeFVSd2VEVExYZVVtdmVVZ3Q2N1pLUTNyMTcwNjlmUDhyS3lrNkxjVWluWFBLZ29xS2lUWkxBbnB2V1VUek5hYVhaZ1ZtbjIrbElER2loVU9nU3I5ZDdsOVh5cERoUmJQa3JWSDE0N0VLNHNRTDZqb0lSWCsxYzFvUVFZN3QxNnpiV01Jd3JhMnBxbHZidTNmdWZUb0ZMVFRMWUNRWnJXSUpNbWQ5bi8vK29rZ3lSU0lSd09NekFnUU9Wc0hXVmVOcU9IVHZZczJkUHNqWEtIalBVVVR5dEE5ZXpuZHZaME5Bd09DOHY3MXRDaUR1VXlweEE0aEhZOEVMQy9meTBWSDJRY0ZmUHZRN2NHWjNxMTlNMDdTdTlldlg2U2l3V1cvTHh4eC8vZnZUbzBlVU9nYlBMUkF6QU5FM1R0UGRiMk5sVHUyWFBLVzZwSW1jbndGTEZMUktKTUdUSWtGTTI3blpLQ0ZzNEhHYkhqaDFVVkZTMDZmZTA2OU02aXFlbFdtbVdxQ1hkemxtelpybWVlKzY1dTEwdTF4eEF6V0UrMFd4WUNvSHE0K1BHdnY5bkdIdFRwL3cxUFI3UDdGR2pSazBKQm9QUFRwZ3c0ZmViTjIrT0FicGx2V20yaXlxbE5PMXg1bFlDU3pxSEs2UUtYTHBTRVdmWXhSYTNZMXNrbzRUdGhORFkyTWpPblR1cHFLaElEb1IwVHVWSVY1OW0vUlZ6aXByVFN0T2tsQ0lVQ2szMitYejNBbDlXQ25PUzNNL2pJV3BPY2R2eVA1M09MWFhRTnlzcjZ5ZnZ2dnZ1eFRVMU5VdDY5Kzc5bGhBaTVuQlBCYTA5cVRMRmduTUtuRXkzRkNpZGUycFhBUXdlUEpnZVBYcWNZc0xtWDhHTVVmUFlrSHNOdi92d1VTWjJvUmRmWFYzZHBwekRibUpQVjNUcktPVVF0bm1leGtyVEtpc3JleFVYRjkrcmFkcDNsTHFjSkJvcWpqMm1kclJ1YWQrUkp6U2g4Q25jMDR0NzllcDFjVFFhL2ZYcnI3Lyt1eWxUcGh5eTNGUE5LWENKWFRUQzdNaDZjN2lxSEkyYk9uanc0Rk1xcWRCbExiYjkrL2V6YTljdVB2bmtrMlE1aDdPVElGMlNJTlZLTXd6RGFhVnBrVWhrdXNmaitRNHdScW5MU1dUWEc2My8xZy94MEkvL3diSUdHRGZqNnl5ZmtBa1lWSDY0aVlkZTNjdjZ5Z2hrWmpONjVBam1UUi9DYUtzSFBMcC9Od3RXYk9HVnZYNENaRkE2dUQ5M1RCL0w5TjNyWU96QVRuOEt2Rjd2dHk2NzdMTHo2K3Zybnkwb0tGZ3RoSEJaN3FudWlMMEpaL3d0amNCMUdIdEx0ZUJzZ2V2eVUwTDg1YXg3WlJudVNhUG1zUWNnOEJJM2w2NWo1a3NiV1ZpMmxSY1hQTVRpTlZ1cGl2cm9PMndpTjg5ZnlDMmo4enJGYXk4dkwyZjM3dDFKVWJQTE9WS2IyRHNTTldmR1UwcXBWVmRYOXlzb0tQaXVFT0l1cFNvbm1jQWhhUHdrK2QrdHIyOWtSVVBLdGZ2eHY1anhiRGxWZUNnZFdJeXZvWllONjljem94N1dmbWNJSmMxN21mUDRPN3dXaHNMaVlvYlJ6SWF0TzVuM2VJeThIN3FZZk5haGsxTG5kcXdJSVVibjUrY3Zqc1ZpdjNubm5YZWV2L2ppaXl1RkVKckRQWTFqdGZMWmswVHN6S2xUM0p4Yno1ekxnK3pZc25PNFF5d1dvNnlzSzlhWmw3Tml6aHdXcmRtRzM1ZUxlK2JNQy9uZHNqZXA4cFp5NlEzWGNHbVJuM1VQeldMK0tqOTlMNXpPSFNYbHZMSnNGUXRuK2NsYnU1VHBKM21wMVBidDI1T0Z0ODZlejhOa1BvV3oxOU5SbDZaSktVVWtFcG5tOFhpK0IzeEJxVXBuaUM5c2IvMTMvUTRXdk5wSUxPVXVXN2ZXRXMzTDVzSXJMbWZwaEJ3STdXYldEOTdoemIzN1dCOGF3dVNLZld6MVpOQjMyRmhXM25vR1JiVHcvS0tYV0ZoUnhhcTlNTG0rb2tzSW00M0g0N2x0NHNTSlkycHJheGNYRlJXdHNXSnZtaVZxdHZWR3duQ1RxZGFiU0luRGtlcWlPamVuMlFJM2RPalFMbmJoUktIb0d1WXZuOHJrdkJXNGI1bDNKYTh0ZTVNcTMyaG16citUaVpUelRIa2RVTXJVZWZPWk55ektwV2N0WnRXZVhQTDhPTFlybjFpa2xIejg4Y2ZzM3IyN3pjSmllMnVVUFprakpVbVFLbXJKZU5yMjdkdTdsNVdWZlYvVHRIbEtUVG9SOVJYV1AyS3MrZXNIYktBSDR3YTJzS0ZDVDk1bC9MVmZZMk82QVZBZUwza2V5QnM1a2JkR3BudHdGM2tlU3p3SGp1OVNwMFVJY1c1aFllRnprVWpraVQvKzhZKy9uVDE3ZHFObHZlbTBqc2d5YkVGenh0N3NRYWRPY1V0ZCs1Z1F1U2hORmUveTV5ZjJVampyUDNsczV0bGRxQnhrR05QbkQ3T050M1F4dGpJbVhqbUtKN1o5d09Jcng3Sm0xSGpHWDNvTk0rK1p6TENUNUlucXVzN0hIMytjN0NaSUxieE5MZWV3MHRtcFdjOWtnaUFZREY3bzgvbm1DaUVtS3lYcFpGZ3RVdEc5bTFpd0tVTGZDeVp5YzN4ZEcyR3pxZjF3RXd2ZWE2WjJieFViNGhsY2VPMG9KanMzMUIzYXpVT3ZWbEZaZjRqMUZScDl4NHpsanNGQVBOcGxUNC9QNTd2bjVwdHZQbnZTcEVuUERodzQ4RjByOWhhelhGTWhoREFTaGxwcjNNM3BtcVpNRWtrSVd6eEMzZDR0dkw1L1B3ZjhKdTZNWGt5ZHZJTVBQNHh6OXRsbmQ4bTFmMm1UQjhQdVhNN2EwU3RZdHV3MTFxMWZ4N0pIWDJQWjc2NWs4ZG9ubVh5Q3hTMFNpYVFWTmJ2d050MCtBb2VsbHVwNmFyRlk3SGFYeTNVZjBFZXBTQ2NrMGd3MDgvenkzVlJsOXVPSnEzdVJ0eUw5WGYxNzk3RnFrei94bjd4dURDdE9xY2Z5MTdKbVV3VjFBTzVzaHAzUkxiRUkvTE1VL0hZQ05FMmJOR0RBZ0dGK3YvOC84L0x5L2d4b2xudWF0Tnh3SkJac2o4ZXkzb1Rsc21LYVVScXJ5cWx0Q3FPajRjM3J5YUJ6aHpQMjNITTRTNnRnNTg2RXEzcjIyV2VUa1pIUnRjNFJnTS95VWFOUndMK2VaK2JNWmRGcmVjeDhjaW12Ymx6TFE2T0F1bldzMm54aVgxd3dHT1Nqano0NmJKMWFTbHhOeEdJeFlmZDhXbWEyWnBxbVZsVlYxU2NlanovbWNybWVVS0xXdWFuOTEwWVdWOEs0cThjeTlUQ1Ryc3V1L2hwN252NEdHKzQ5aTdOQzFTeCs5bCtzQ1RudU1QZzhOajU5RTlzV1hNdzFCVUZlVy9FNmkvWWFwOHBwNnBPYm0vdlRhRFI2LzZwVnEwcWtsQm5XUjlrTGVLU1VMaW1sWmwvL1ZneE4yTjVNSkJJUjRXQXoxUTBob3FZZ28rZ01SbzRZekJrRkdlak5OUnc0Y0lDS2lncDI3dHpKUng5OVJEQVk3R0lXbTYrSXZGd2dzSVlGMDJaUnZuQWhlYlZyV0xWcUhWc3JQMkJ5U1MzcnlnRnZHYU5PWUxJa0VBaTBzZFNjTFZLMm9EbkhkOXV1cDFXZjFpYnJHUXdHSi9oOHZ2dUVFSmNxMmVqa1pCaXMrTDhEQklBTnkxK2lkSG5yVFJ1Vy80VUorNy9DcTVkNXFkVmQ1QlhrVU9SeFVUUjRHTmVVYkdOaFJTMGJxbUZpZmd1VllRTmZYamRLc3NCWDBKK1p3N0o1cVRySTVwMHRjTTdnVStaMGViM2UyVk9tVENuZHUzZnZNMmVjY2NaN1Z0ek5UaXdJSVlSaG1xWnBMM2h1RzNkemlXN2RNbVZMTUVLNGVqY2JhejhodDdBdlpXY09ZcWpEWGJXUHM4OCt1OHRNQjNIam04Zzk4NjlrNjRJMTdDa3ZweXBhd3AxUExzWC8wQUordCs1M0xJNTVLVHpyVXU2WXQ1QmJUbEJUVVhOemMxTFU3R2IyK3ZyNmR1N25ZVEtmeVhoYU5CcjlodHZ0dmg4MS9MRnJrTm1Uc2pQN2NLRWo1RkZiZVlodGZwUGM0bUxHbnlGWXMveGw1bTJGY1RPK3h2SUpPUkJxNElNR0FDK0ZtVkM1L25VdS9aOUdjc2RjekZ1MzlpZVBNT1hWWVVBakw4L2I2WHBHajROcmVzbUFBUU1HTkRRMFBKV2ZuLytLNVpxS0ZOY1VaOXpORmptUEoxTjBMK3dtUGVnRUEzNmFhei9oZzlvcWF1T1hjcUhWMmVEc1VUMzc3TFBwMXExYjE0aXhsVTEva3JYVG5kOGV6NTNQdnNxZEorRUZOVFUxZldwUmN5UUp0RnR1dWNXMWVQSGlIMmlhOWlDbjJXNkhMazNCY0NaZmV5bk9yTTc2My8rWm1lc2pETHRrSW8rZWwwbXRweStGVy9lellmbkxUSG92SDE5MUxkdjhrSHZtRUtiMmdoTFBFTWF0V2MrR1RldVlWRjFFbWQ3TWhtb1Q4dm94YzFnbUZBODk1VTZiRUtLc1I0OGV2d3lGUW4zR2p4Ky81S09QUHRJYzFwdHVpVmt5N2hhUHg5dGtUS1hYSzNNS2VsUFlHMkxCSU81b000Mk55YktSTnNmWlo1L2Q2VWVPZDZvUGZHTmo0eEZGTFozN21ab2tPSFRvVUwrQ2dvTDdoUkN6bFZKME1ZcUhKdWF1SFlhaUwweGtPWnRZc0dZdjYzZFZRMlllNHk0WXdmeXJCeVVtRlJRTTRkbDdYU3hhc1lVMWU2dlpRQVpuRFR1TE82YVBZV28zb0dEZ3FYcjIzSm1abWZQZWUrKzk0dGRmZi8wM2wxOStlYVZ0dVZuV1c5eStZN3FrUXVLTGo4emNBakpsQzgzTjZZWE5GcmZPM0YvYWFRWk5Pa1hOem43YW91YU1xYVd4MU96V0tNMDBUUkVJQkw2UW1abjVnSnFaMW9YWnNMUk45OEZ4cGNjQUdEZnJjM25vb3gwMGVTSXdER1AxenAwN0Z3OGJObXdMRUxXeXBqcVFYQStvYVpvVVFwaldkRjVwN1ZTUXpwSGo5a1RlN3QyN1UxQlFRSzlldlpJREt6dXp1SFVLaTgzcGZxYUsydUhjVDZ2Zk0rbCtoc1BoeTd4ZTc0T295YlpkbXpNdmdvMHZmSDZQZlJyZ2NybW1EQjA2dEtDeXN2THBrcEtTdDZ4RWdtMjVJWVRBbVZTd2cyNnRsbHN5RnNmaGpKL2h3NGQzU3JmMHBBdWJNMUhnRkxYR3hzYTBFenBTM00ra3FFV2owUmx1dC90QjRFeWxERjJjL0lHSktSekhlOEpISjUvczhUbkUzY2IyNmRNbnY2NnU3cW5Dd3NLL1NTbWRTUVVkUjFMQklXRFNjbDNicVZrNmdSTkNNSHo0OEU2WFVEaXB3dVlzNlhERzFHeFJPNXo3NlJTMVdDeDJoOHZsZW9pVDF2Q2xPTzZNdUJyOGg0N2ZUTFllQXhLUGVab2hoQmhVVUZEd1VGTlRVMDczN3QzL3kyRzV0UWxGMmVJV2o4ZlRpbHRIb21ZZkkwYU02RlNsSUNkTjJJTEJZSWVKZ2pSMWFzSzU0OU1wYXJxdXo5VTA3U0VnUTZuQktjYTRXY2RuaW02UEFURG0rdFA1VEJaMTY5WnRma3RMUzNaT1RzN3ZuVzZwVTdUU2ladWRYRWdWdEZSaDB6U05FU05Ha0oyZDNTbCtZZTFrUEttelRlb29zcC9DdVVIS2pxazkvZlRUSGwzWGY2aHAya0lsYXFjbzdnejQwaDBKRi9LenVKL2pacDF5dFd1ZmdvenM3T3dIUXFIUTdWZGVlV1cybzFQQkE3aXRUZ1dYYVpyQ01Bemg2RklnR28wSysvTVlEQWJ4Ky8wME5UVlJYMS9Qb1VPSHFLeXNwTHk4bkk4Ly9waElKTklwZmxuWHd3OC9mRUtmVU5kMS92M3ZmN2NaUGVTMDFGSmlhc0xleUc0bkNxU1U0dDEzMzgzNXlsZSs4aU5OMDM2Z1B2Mm5BY1ZERTdHeFVKUFZTM3FVVnRvNVY1L1FLUjVTU3Z4K2Y2ZXU4Zko0UE9kTm16WU5sOHUxZGQyNmRmRU9wbmZJTklrRGtlcVNPcHJzMnh4RlJVVzRYSzdUUjlpa2xHelpzcVdOcUtYYkpKVTZkc2dwYWp0MjdPZ3hkT2pRSDJxYTlsMzFpVCtOeU93T0phTVNJdWZMU1RoS25neUlXVDJNdWNXUVhaZ1FzaUdUb1BTQ3hNK2NRTHFDc0FHNDNlNng1NTkvdmlndUx0Nyt0Ny85VFhkbVJqc1NONmNBT3V2WlVnWE8vbHBjWEh4U1J4NmQwQmhiUjcyZlR2ZXpvNUlPS2FVb0x5OHY2TisvLzROQ2lMdlZKLzAwSmJkWDRsQU5jcDhKbjg5MysyMjMzYVo1dmQ0bHQ5OStleTIweHM0Y1ZwbGhHSWJ0YWJWSktEamphODQ0bTh2bHd0NWFQM3o0OEZOZjJPekp0eDJOSGpwTThXM1NVbE9pcGxBY1YzRzc3YWFiYmlJYWpUNDNaODZjQnFkbGxrN2NjR1JMT3hLMlZIRTdXWk40VDRncldsNWVudHdtZGZEZ3dRN0hlYWNyNmJCamFwYjdPVWRkam9yT1NsZHhSVlBjMGpFalI0NlVRb2gvdi9ubW00WmxqYlZ6UzFQRXJsMjh6WGtPbk82cHkrVWlQei8vMUxQWTl1L2ZmOVF4dFhSMWFrOC8vYlJuNU1pUkQycWFkby82NkNnVXg1K01qSXpiSDNqZ2dmaW1UWnVlWGIxNk5la3NOOU0wRFdndEJiSEtSZVRoM0ZHWHk0WFZwblhDdDE5OXJzSldYVjJkWEpHWHVuamxjREUxWjUzYTdObXpIOVEwN2Z2cThsTW9Qajh5TXpPL3RXTEZpbGgyZHZadmJVRnppSnZFV3RKcythYkptSnNRUWpyZFVPZGh1Nk8ydUozSXZhV2ZtN0RaRzlxZDdtZEg0N3hUWTJvcHhiY1Bxc3RPb2ZqOHljcksrazRnRUlqazV1YitrYlpaVXBsYXhHdC9YeVNRSGNYWmJLdk5GcmNUMVRUL3VRaGJPQnh1STJyMjRwWG01dWJEdXAvV0tPOWttNVRWVWFCUUtFNFFPVGs1MzJsc2JBejE2TkZqcFdXMVNWSmliSmE0T1MwMklZU1F0cWc1QmM2MjJHeGhPK2VjYzhqTXpPeDZ3aWFsWk1lT0hlMTJGS1JhYXRZMktlY1NZK3lGSzlGb2RJYlYrNms2Q2hTS0UwdEc5KzdkNTFSWFZ3ZUxpNHYvTGhQOVYyMCszL1pYZTJDbFphMjFzZHljRnB2VEpmWDVmSXdjT2ZKenIzRTc3c0xtRkxYVTdLZTk5N09qeWJlbWFZcHdPSHlaTmFWRE5iUXJGQ2VIb3FLaW9ydjI3dDNyUCtPTU0vNlpZcm5aOFRhNzlBT0hvQWxOMDJSSGNUWmIyREl5TWo3M01wRGpLbXdWRlJYczJiT0hxcXFxcEtXVzZuNDZ1Z3BJS2V2UUFvSEFGNng1YW1yMGtFSnhFaEZDRE9yZnYvL3RtemR2YmhvOWV2VEhsdVdXbk5zbWhHaGp0WkdTSVUyTnM3bmRidHh1TjE2dkY2L1hTMFpHQmdNSER1ejh3bFpkWFowVXRlcnE2cVNvMmYyZkR2ZXpUYXVVYzV4M1ptYm1BNmdoa1FwRnAwRFR0QytPR0RGaTlzcVZLeCtkTm0xYWxVUGNwR04yRzZacG1uYW1OSjNWWnNmYW5CbFNlMEx2NTVVcFBTN0NGZ2dFa3BNNnFxdXIyelMxTzJOcTZjbzZwSlRpbGx0dWNWazdDdFE0YjRXaUUrRnl1UzYvNG9vcmFvY09IZnJZOXUzYnpSUnhzek9uMHQ0cWI0dWJNNWxnVzJ6MlY2L1htM1JKczdLeVBwYzVicDlaMktTVTdWcWxuSlphdXFiMjFBem80c1dMZjZBV3J5Z1VuUk92MTN2anUrKytXNU9ibS90N1M5RE1GSEdUcVpsU1RkUGFXRzdwU2o5OFBoK1ptWm1NR2pYcXVDY1RQck93N2R5NWszMzc5aVhMT281bVRWNUtCdlFicWxaTm9lamM1T1RrM0ZOZFhYMm91TGo0NzRDWnhpMXRFM096eWo2UzRuYTRXRnRXVmhaRGhnenBQTUpXV1ZuWnJsYXRnMVlwMG1WQWc4SGdCR3Vac2RyN3FWQjBidHhGUlVWM2JOMjY5ZEN3WWNQZXQ2d3oyMHBybHltTngrT3lvNExkZExHMjdPeHNTa3FPMzBiMlR5MG9UVTFOYVd2Vk9oQTFrYktsWFR0dzRFQWZuODkzSDJvQWpVTFJKUkJDbEEwZVBQaVdGMTk4OGNBTk45eHd3T0dTSmkyNGxQcTJwRXVhVHRpYzRwYVZsVVZPVHM1eEd5RGcvalQ3R3czVFpNKy90MUs1ZXcvVis2dG9PRlJEYzMwOWdhWm1RdjRBa1dDSVNDaEVOQkpCajhTRXJzZUk2M0ZoR3FhUU1pRnNQVDNoZWFKcDM2WHFjbEdjbkUrcEJpNFBhSjdFd0VwdnRqb25SNEhMNWJwNDJyUnBGY0JUdE1iYlROSWtFMUxGelpsSWNMcWt6a1RDeUpFamo4djAzVTlsc1pYdi9ZVEtxb05VMTlUUjBOQklzOTlQUzB1UVVDaE1PQkloRW8wU2pjWFFZN3JRNDNIaWNTTXhObGhLSVNWYXJIcjM3VUtJdTlSbG9qaHBTQlBpVVNBS3NSWUlOVUpHTG1UazJkNlVvZ015TWpKdXJxK3ZyeWdvS1BncllIU1VUQkJDU0R2ZWxtcTVPZDFScDdEbDVPUXdlUERnRXk5c0I2dHIyRmRaeGFIcVd1b2JHbWxxOWhNSXRCQU1oUWlGSTBRaVVhTFJHSHBNSnlGcWNSSXhOU21rbENKWXRlMUNsOHQxbjdvOEZKMUw2QXdJTjRFZWhweWVDWXRPMFNINStmbDNiTjI2dGNLS3Q1a3BoNVJTeW9TMkNlTHhlREk3R28xRzZVamNNak16aytVZnZYdjNQbkhDRmdxRitXUi9KUWNQMVZCYlgwOWpVek1vTWpJQkFBQWdBRWxFUVZUK1FBc3RTVkdMRUkzRmlPa3g5SGhjNlBFNGh0RTZnbWo3aHYvdDd2UDU1Z0o5MUtXaDZKVEVvK0EvbUJBM2wrZHpmN3AxNjlaMW1sLzlvb3N1T3BhNzl3WnVBdmFTaUxHMUVUWkFXaVZkcG1FWXhPTnhHWXZGUkRRYWxmYTJxNWFXbHVTMnErcnFhcXFxcXFpb3FHRG56cDJVbFpXUmtmSHBXOFdQU2RqMjd0dFAxY0ZxYXV0c1VRdlFFblJZYXJFWXNaaU9yc2VGcnNjeERCTkRXaTRvaUxJekJueGZ3R1QxNlZGMGFzdzRoT29UdXhWT0FHVm5mcmEreWZKZDJ3SHc5ZjNpcDM2TWFOVzdBRlNkK2VTeC9OZ2xZVE8yYlZENTkzOUxZcXU4Z1oxSUFDa1FVa2dwTUUxSlhFTFVnR0JjYUNJbU5XSm9Jb0pMaEhDSklHNlhIN2VyQ1krbkRvLzNFQWNYWlhIR0dXZHc1bTBmZmFyZjU2anQ3ZjFWQjZpc09raE5iUjMxalUwMCt3TUVXb0tFd21FaTRVUmNMUmFMRWROMWREMU8zREF3REZOSU14RlhpeHpjT1UzVHRIbnFVNlBvTXBiYjBhNzZPNDNKMUx6ZmVuZmdqeWVRbU1UakE3eVd3ZVNTU0pjRVRTS0ZpUlFHa2pnbU9nWXg0a1JsbklqVUNjc29RVE5Ld0F6VGFBU3BpL3VwcmEybHBxYm1VNyt1b3hLMlFFc0wreXNQY0tpbWx2cjZScHFiL1FSYVdoTEpBcWVvV2RaYXNsN055b0JXNzNpdm44ZmovcDY2REJSZGluQnpJc21nT0x4UDZ1ays2OW1pV2IwN0VEZE5nbVk2eEUyWHBraUtHem9ScVJPU1VWck1DSDRqVEdNOG1IUlBXNHhQdDRENXFGelJUL1pWY2FDNmhycjZCaHFiRTNHMVlEQk15SkVCalNXU0JiYW9ZWm9TS2FXUVNLMGd2OGQzZ1Mrb1MrQVU4dGFhWXdTZTIwSGtYOVVZVmFFdThacGRmYlBKT0s4bnVkOGNndGJOZXhRL0lSTjdTMzI1SiswMWYvTFhKM21HYS9uNTFiMVA5dG5EOS9PYktMaWlqc1l4THhPT3RkNGlFS012elJ2eGRXcjV0ZTJTU2pDRU01a0Ewa1JLQXhNQmFOSVFMaUdrUzJxNGhZWmJ1dkNZVWJ6Q2pjOXdvelUzazVtWlNhVWVZYWpyMkVQeVI3VFk5bGNkcE9yZ0lXcnI2bW13a2dXSkRLaXpzVjF2NjRKYUdkQ0VDN3BydWlydE9QWHdQL0V4d1JWN3U0eW9BUmhWUVlJcjl1Si80dU9qL3lFOXJON3NvOENuZVc1K2IrQlBKamdzTmkvZ0Fkd1NxUUdhQkdGQ1dwYzBLblhDVXJkYzBnaCt2NSttcGlZTzZVMGMwQnVQcjhVV0RJYW9QSENRNnRvNkdocWFrdlZxd1pBdGFqR2lscWpGNDNFUk42d3NxT1dDVm42OHZwZkg0LzZPZXR0UFBTTC9xdW15cnoyNnFmN283eHlQZHNuZnNmb2ZqL0RTM21JSzNINWFHZ080aDAxa2NHQUxlNXI4TkllTEdmK05temkzNlBobWZYdDV1dDBFZkp6T2FwTklDVUthU0ZNQUJsTEdwU2swWVVnM2NhSm91SEVSbGk2OHBoc1JETkxjM0V5dEhpVkh5NkM3SzRzc3pYZDhMTFpFdlZwTnNsN05GclZFRVc0c1VZU2JHQmhwdWFBbXBqUnRGMVFVRnhYZEM0eFJNbkJxSVFNNlprTzB5NzUrb3phTUdkQ1A4cGZ0dWpHMmVPR1grT3JzNzNMcnR5OG5ZK05hNnMrOWd4dnVlSkNaWS8yOHZhN2l1RCtmUUl3Q3BsdFdtdy93U2l2V1ptbU5JR0cxWVZ0dGNXbUlHQVl4YVJDVk9oRVpJeVNqaEVJaFdscGFhSXdIcVkzN3FZbzFIQjlYOUZCMUxRY09WVk5iMTVBbzdXaHBvU1VZSWh3SkU3V0tjR05KYTgyd3V3dnNMS2dJSGRneFdkT0VzdFpPUVVTdXAydi9Bb1pFNitxL3d4SHhrSjJibTFnYWtwbFBkazR4L2ZzbGZ1ZWMzRXppa2MvTnhmN21ILy80eDNQVHVLUjJsbFNrWmtuakdPakVpVWtyVTJycVJDSVJRcUVRVFVhSStuaUFRM296TmJyL3N3bWJIbzliTG1nOURWWnB4eWZ2ck9LdmY5L0EzdVlva1ZnMFVZU3I2OFNqQWRIVTdDZXN0M1lYekpweGpjdm45ZDZiN3JFMy8vUjZTcys3bHhjUHBOeFE5ekl6enB2R1ErK2xjUjMrN3llTXZXa1o1VXBUVGlPeXlQajFMZlRaK1RXeUN4MFg3SVR6eUY5OUM3MTMzazN2ZDY2bnh6Zjd0N21JajNTNzR2T25UNTgrTXdlSTdoa09xODFqaGIwMGFjWGFaRUxZRXVMV0prc2FKMEpDMk1MaGNLSUVKQjZpTGg3Z29ONUlYQnFmWHRpU3BSME5qVFQ1L2JRRWcwUjBBMHcvRmVYVmhHSzZuUVVsYmlSTWRkbGFpS3M5OS9qUDd3YSszT0d6eGo1azBhOWVwL2FvWG1JTGExWjlRTW5VU3loVDE4enBZeFZPbWtDM1MxTWEwMHZIa1AvMENGd2IvMG45VlgrazdwZDF1Tysrbk81Znl6cTYyeFVuQkUzVEpxNCs0d2RUSFZhYnAxWGNwSXVrdUxXNnBEcEc0cEJ4WWxJbkdvMFNpVVFJR2hIOFJvakdlSXZsa2paK09tRnI5Z2M0Y0tnNlVkclIxSnpvQXcyR2lNUk5wQURaY3BDcXhvamRCeXJpaGt5NDExSUtwQlFONVI4TWRybGNjdzc3ckRuWjhNWi9zdWlmTFVkK2hYVnY4OUo3ZzVoNVVTOTF4Wnd1NVBZbjc0RUJHSzlWWWpwQ2VlNUpaK0twM1Vuekk5dUpiVzlFLys4M2Fkbmd3amVwNzFIZHJqaHhkSE5sM2ZUSDR0djdPY1dOdHJWdHdsbmI1clRhWXNTSnhXSkVvMUZDTWthTEdhSFpDRkVmYjZFNjNrVEFDQis3c0ZVZFNIUVhORFEyT1ZxbXdzVGlKcmk3a1o4aENkZlhFZFRqMXVESTVLUVNJWkZhWHA3NDF1WmxQeW1aTm5reXBXTW1NL2FhZVN6Nlo5dkFuM2ZnVmR3ekdWNzY2WE5zUGtJTXV2YU52N1A1QzVjenVmQnc0cmVQelZ2MjRWZlhVeWNUcUI1NEovVEY3U3dERzNzUlJlL2RRTjdZamtiVHVQRGNQWUhNdWswMC8zZmJVcEw0MHYvaTBPVnZFWXVsL0lqUGRWUzNkMFVHWEQzblU5V3dGVjgyajFzdnN3YzNuc21WYysvbUhHdFBzZnVjTy9udU44NDV4a2MwaVA3Z2VRNk1hRnZEZGhqNm5wOHorR3BTRXdsQ3VLeERReE5KcTgxSUpCS0lXNGtFWGRlSnhXS0VaWXlRR1NWZ1JHaUtCNms3b3kvaDMxeEV6OWR2U2g1Ri8zRm11M2tzYmNvOXFtdnJPRlJUUzUwOXRjTnFtUXBIb3NUaUVreEJabEUzWEFlYThEZTdSSmEzdFE4VWlRZ2YySDVKM2FyNWQ4eDZOc1lOUDF2Q3M0Tmg2L0tmTStmK3h6aHIxVUttSmkvd2ZDWi83OXRzdU9iblBQVGNWYng2ZDBlekpnL3h5aXY3R0Q5ckxIbjJ0dzY4ellLZkxtTnpyRC9YM1AxdEpnZWVZODdTRnNwNnQ3RDVxVkU4K3RSTWh2bVVwcHh3dklWay9lSmlza3ZqeEZmK2srWU5SWFQ3eVptd0o0cnJnYkZFdnZNeUxkc05xTnBINU5VbytwNE9ZaVZEeDlKOUdvUnUvUUM5YUZKS0NNTkFPZ1RRTldFY09lT2lSTzdiZDNTM255WWMyRmZCQzgvK3h4SHZOK21Lci9IRjh5ODZxc2YwWFRTUWd1ZW1BaEJhdVkybUg2dzk4czlvbnB2ZTZQZkFPeGZ0LytrbUlHNGRpWDVTcEFuQ05FR0F4QUJwSUlXT0lWM0VFWmF3UldTY2tCbkRKeUprR2w2YW0zYlF3QmVvOTRTVEc2NWlkYU9RN09wWTJBNGNUR1JCbTVxYUNiUWtDbkhEWWFzSTE1QklhYURMREhKOVFqUkd3a1EwajlCTUtVaThPTTNyOWQ2VmQ5NjNXYms4bjdJK09RQk1uSEU1dzVZdDQ0TUttRHJDOFdTRmx6RC83cGVaOUt2SGVQNmFwN2tsWFNINDN0ZDU2ZUFvNXAyZmsvelcrcVhMNFBiSFdkbDdLNHNldUlzWnVkTjU5cm1yS0FQVy8vUmVYdG81azJFamxNNmM4TGpLdFBQSnFuMlQydnRpWlB6aU1vcXU5K1AvMW44VDNnUGlhMWRSY0VVUFdyYlhRZFVlQWovYTA4R2o5Q0Q3SnlNUXIvNmR3SWNHVE9yQW9udmdlZ3BuNUNOOGNlSXIvMEh6MzBMSGNQdXBUNS8rQTduL2tTZU82Mk5HMzZqZ3dPQ25qdm5uU24wOXJ3SCtEZWlBTHFXTUM3dk9UYUtSNkVyQUJPS1lVcE5DeElVaFJUeWVzTnBrbkFodVFtYkNKVzJvckdISGRTOFF6eWhtZUdhL0k3dWkrNnRhWGRCbWY4SUZUZlNCSmtZUjZZWUVhUkNQeDhIbnd5VWtoaDdIcXZMUjd2L2JydXVGRUZmNkNuT28vY2RqVEx2eVNvYWVONW5TeS82RERiRVk2VHpPa3VuZjVwNkJ1M25pcDMrbk1zM3RXMWY5SGY5RlZ6SGVZWUg1dkZDNVl4OWJkKzZtUE9vbEw3Q1B5Z0JBQy81QTRuYkZpVWY2NDRpaUhuaEhGZVByQzJiTWg2Y3c4V1pvZVM1azRNalpMTmYxRThqdCt3bitYKzV6V0Y3dFhTTDl1YjlSZSsxZmFQamhMdVNrU2ZTNHFjY3gzSzQ0a2JpRWR0bW1nVCs1d09HU2VscHIyNUlkQ1poT2w1VEU5RjFkMTVOZENSRVpTM1FsR0dHYWpDQjFldUN3SFFsdWdKaXVjNmk2cHRVRkRiWk93N1hyMWVKbVF0aU1lRnpFRFlISEpZUVJONFZoQ20xb1hxRkxjN252QkNoZjloQ3pYdXJGd2wvOW5xbEQ4dkVGL3M2TXljOTE4UFNEdU9XQnEzaHAxbk1zZW1ONnFxeXg3Qjh4SnY5c0ZFN1BjdlRkUCtESzU1Ynh1NHBCM1B5ckpZeXVmNW01Mzc2THhiUVFIVGlMSjRlb2krbWtDTnZmM3NCZmREN1pNK0xFbm5xVjVtMDl5UHVQYVJUbHVZQnFBbmNkSVp2bExTYjdtd1BRaXFESFAwdXR2Mkp1Qk5EdC8rNGthK2wvVWZ1ck9pdW0ya2k4RHVMYjZ6RFA2a3ZCdEtHNFgvZ1g4V1RNOVFpM0swNG9QVDNkcmgyaDlmN1hGdk9nYmxsdVRwZFVncEFTYVZyaUp1UFNGQ0llbHk2WEN4MHpVUUlpZGNKbWpCWWpRck1XcHNGb29VWnZwc2lkaDBlNDBndmJBYXNYdExHcHlXcHdUOHhZaTlvTjdycE8zQUNrYVk4andoUXVOQkVYcHBUQ2s5L3ZtOEE0YUdIelAzZVROK2FiVEIrU24zaUdRQXVIeXcvNFJzeGkvcFd2Yy9OVHk4aU5lWk1sSGRIM1htYU43eEtXcHJxVnZ2NU12ZnNIVEUyNnRGZng1QXRYRVkyQ1Q4WFdUaUlob2krc0pmcUMvZjhBL2h2M2dkY0ZzYU9vUFlyVjBUSjdPU0dueFQzcWZBcC9ra1h3MXJXRTkvanhQbkE5M1V1MzBURDd3NlJJeVNpSm5Cc3V2QTljZTVqYkZTY3RUSUg0NHJJQmQwOGVzZmVCVlVtWEZHeVgxR3E1UWlSTXAwVDVoNVlZVG9rdVRYUmNSTkVKeXhnKzAwT0xFYkVLZDFzNHBEZlJ6MXZRL2puRGtRaUhhbHBuckxVRWc0bkJrZEZXYTAzWGRlSlNJakdGRVU4dU9oWkNDSEZOV2UrOEZpRyttWGk0SE1vRzVsUDNyMlU4LzgvZGJIM3Y3engwLzFJK2lFRzBRM1hMWWVMZDMrWlNnZ1JhcjNMV3ZiU1JvaXN2WjloUm5qd2xhcDJVVkZIclcwcnV6OC9EVjlqZXhUVDMxQkhmN2pqcW9oQ05KcjVmRjBQZldJY1lONGE4YjViaUx1MkJaOUpZOHE3SUl2N1dua1QxK21GdlY1eE1lcml6cjcwNzU4dTVwRFRJSjF4UnFhVjJKQmlHSVF6RHdGa0NrbWlVanhFMEl3U3M4VWExdXArSTJiNDlUbXRYczVaY25kY3Fhcm9leDdDR2o1aW1hUzFtUVVpRWVHenUyTmxlV3ZWbjlPMC81S0VSaDNqaWU3Y3g3WUVWK0MrYnhjemhPVVRyRDFPelZuZ0o4KzhlMmZxSE5mQTJMLzJ6RjlkYzFsOWRFYWNhZmZ1VE9ha1VYOTlqTDhHUWEvK1AraC91UVh4dEVrVi8vd2FGUHk1RnZycVd4bDlXSDlYdGlwT0hRQXk5cytlbGw5SzJhTGROSDZsZHRHc21oQTNEU0pSLzZOTHVKVTJJVzhoMlNZMFE5VVlMMVhwVCsrZjc1ejllWWxkNVJic0ZMZjRXeXlWdDNUd2xvdEhFTG9PNFlRaHBTbTNyaHYvTkgxeDJ4anR3bkpzQ0Ryek44Ly9NWWVyMFVSU3BhNkpUY21EY3kxMzY5ZmZaY05VeG1Cc0RqdXB1aG1GUVdWbkpnQUVEanZxaHUvRE9ndzU1NDQwMzB2OWhrbkxQSC83d2h6dWVmLzc1T2lBSWhJQ3dFQ0ptdWFpR0VNSzB0bGxKYTlHTHRMZFkyY3RlY25KeTZOYXRHL241K1JRWEYxTlNVc0tnUVlQYTdFaHcxOVczcjFtelZ1Y2xyRFZyMDFROGJtQlkxcHFVQ1hVdEd6amdsdU11YWdCOUx1Q1c2VW84RktjK0V5ZE83RFN2cFhVdDZPZEc2YWhSb3lZOS8venpLKzFZbXhCQ3h5ci9FRUtZUW9qa21qN24zbEY3VzN4T1RnNTVlWG5rNStkVFZGUkU3OTY5NmQrL1A0TUdEYUtzckZXS05Ic3BTekRvcUZtemR4ZllvbWI1dTZacEN0TnFuZHIwZjZ0eVhTN3RGblZwS2hTS282VmJ0MjdYekowN056ZnBqa3Jwc2R6UnBFdWFXTmRwQ211N2xiQkxQeExyQnhLdFZ2YW1LNy9mVDJOakl6VTFOWVJDcmZXS21qMW5MUlFPdDQ3NXR1SnF1cDRVdG5iVzJvaGhRMllCZzlSYmRYcmk2cFYxZXJ4MnphWGU3T09JRUtMc3Z2dnV1NWoyU1FTWGxGSkxUTjZXd2pSTkxHRkwxclRaNG1ZM3lOc3oyK3dWZm9jT0hXcDkyeElkQmdrWE5HS04rVTY0b0RweG82MjFKaTFyN2NhdlgrMXl1VnczcWJmcDlNVTNwcURydnZZdkZCNkRDcXBha2VOTmZuNytWMHRMUzcxcHJEYk50dG9zY1d0bnRkbmlabzgxQ2dhREJBSUJHaHNicWEydEpSSkpMSC9Sbk5hYU13dHFENDgwREFQVE1LM2xMQWxyYmNtVGkyNEVWT1BTYVV6ZVBXZVRkWFYvWEgyenU0NmwxamVMN09sbmtEZG4yTkgva0NkVHZkbkgzMm83KysyMzM1NXdORmJiNFN3M3A5WFczTnpjeG1wekovWVhSTlBHMWhLMUpDYUdaYTFaRnB2bWRydHZWRy9QNlkzV3pVdjMrMGVkNHA5QURidzU2czMrSENndUxyNENlTk1TdHBpVTBpMkVjSk5JSkdneWdiREtQcVJoR0NJZWo4dlVXRnNrRW1sanRkWFYxVkZTVW9MYkt1V3dkNEltbFRGdTFaRVlwb0VwSlZKS0pJalF3UjFUZ0F2VVc2TTQ1Y25zQmtKOC9zOWpHbkJvSzdUVW5EWmJzVFE0YitlcmkwY052dUtPalpiRjVrRktIWUZMU2d3U2hoU21OREdrZ1NGMTRtYVV1QkVtSGcraXh3UEVZazFFb2cyRUl6VzBoQS9RSFB5RStwYmRIUEwvT3lGc3lXTGN1RzJ0R1JpMkcycEtwSmxZemdKU2VEMmVHZXFLVjV6eXVIM2d5L3Y4bnlmVUNKV2JRUStkZHFkNFlOL2lTY0FIU2FzTlBFSVNSMGdYQ0ZNaWhaUmdTaWtOdzhRd1RPS0dpVzRZNkxwQlRJOFQxWFhDa1NqQmNKUkFNRXhUb0lXNnhtYTBhQ1RoZ3VweHZXMFcxSEpEcmFRQlVpS2E5bTRaSVlTNFZsMzFpbFBibkhCQlRzOFQ4MXd0TmFlbHFBRjQzTzZyL3ZlM0Mvc2xMYlpFbkMxbE53S1lVZ29qRVdzVGNTTVIrOWVOT0hvOFRpeW1FNDFaNGhZSzB4d0kwZEFVUUhPV2R5UUxjVzBYMURRVGJtakNXdE95czdPdVUxZTk0cFMzMVBKNkorSnJKNExtQTZmMTZSNDdZc2lGcEd5elFsb1pVb2ttcFJTbWxKaW14TEFUQ2JhNHhRMWk4VGpSbUU0a0dpTVlpUklJaG1nTUJOR1NUZTVPVVV0YWEzYkNBTEhxVDcvTDBEUk5DWnZpMUVTNHdKc051YjBTL3o1Um5PYWI1bk95TXE2WU9XVkNobTIxU1Z2Y0VyUGFCSW1aUmlKaHRVa013eFFKbDlTYS9xSEhpZWx4SXBiVjFoS080QThFMGV3c3FHNjVvSGJTSUdtdFdTVWVreTY2NEZxZ24vb0VLRTROSWRNUzFwazNCN0lMb1hzSmJmYjhuU2k2OEVMbTQwVEpvM052SFpmR0hYVkowS1MwaFkyazFSWTNUT0p4RTkyMjJ2UldxeTBVamhJSWhYSHJ1SW5qeHNCRlhBb01LWVFoQllZbGFKWnFhdTdDMHVrbkpFT2tVQ2hPSzNvV2RMOEVlTnRodGJtRnhJV1FXdUl2a0pSU0lnd3BNVXdwRGRNUWNjT1F0dVdteDFPc3RsQUVyZFVOalNkSGhTUmFwNlI5aU1iR3h1RkNpTXZVVzZCUWREMmliLzZHb1hlOHpOWk8rdnJjTHRjbGE1Y3NTRTBpdUN5ckxUbk9TSnJTS3RnMUxjdXROZFptSnhJU1Zsc0VkN0p1elJJMk05a1RtaEExUU9UazVIeE5YUjRLeFFtazhqV3V1UE1WdHJWKy9NbnRPWkRKMDZjeGYwb0poeTFFYWR6RmkvL3JaL3owTVNkd3lmZ3VIcnJ4S1phbGprYnpuTXZpbGJPWWZJU2YvdUx3d2VPQVQxS3NOaDJCaGlSUitpR1FwbWtsRXF6U0R6dDgxamJXRm1zVnR0YWtnVFhGd3pSdE4xUm9tbmExdXRJVWloT01aeEFMZmp1SEczb0E2RlJ1V3MyY1I1OWlidmFQZVBiQ3d6VHlOMjdqZDh1cXlMdDhER1VudEhIQ3phVVBQc2F6NDQvOUozT3pNeWNCLzAzYk9Kc2JaTnlxa2hhbUZXc3pURk1haVQ1U21ZaTNHZWhHYTZ3dEhJMmhwYnFnOW9IVmlCb01CaThCaHFtclRLRTRxU3BIeVpncDNEeEVaL09XR2lyLzUxZHQzY3ZxTjVnMjdSZjg4citlWWV3RGI3QkgzOFhjMlE4emQ1TjF1MTdOUzQvL2lnblQ1akQwK29YTVdWdWQzRVVTcmR6RVEvYy96TWhwMzJYb2piL2c5aFc3cUxWdVcvLzRnNHo5MForWmUvOHZtSFRqZll5ODR4bWUzMzZNZFhleFNwNlo4MTJ1V0ZxWmVNN0dUZHgrL1lQYy9xYTE0cno2SXhZKzhNalFRZjM2RGJVRXJkVWRsYmhNS1RYRGxDSnVtQ0pxbUJpbXhOUWpIS3p6VXgrenl6L0M3UDd3Mzd5NVA4VHVEVytoMmFLV0xyNEdDSi9QZDVXNnFCU0trNDFPN2ZaM1dMYkR3N0FoK1pSY09JN1JOUit4eWxyUld2ditSMnd0T1pldlhYc25HMzk2RWFXZU0zbDB5Y004T3NiNjhab3Fhb2QvZzFkWC9vcTFzNHRaditSbDFyUUFzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2cms4OWNWeG5tMG52dlkrMGZGckowVEQyTFhuZy9LWHhIaGJlRVcrNjlDUDcrWjE2czlMUHVOeXZaUFB3cUZsNllCN0VLRnZ6b1JUWVB1WTdYLy9yNGVjNDRtN1F5bzRDbUNTRmNBakJOSW9iRU1FRkNNdWFXR0swR3BtSFM4K3h6RTY2b3cvM0VibmEzRGswSWNhVzZxQlNLazZGbHU1bi8vK1l3UHhsajY4dkU2Yk9aUHlrUE9JZHJocXhrOFp1VnpDdk5aOTM2S3NvdXZLN2ptRnJmYzdsalVqRjVRTjZZY3loNytnMXFneERkOFRZcmdpTjRkdWFaaVRIOEpXT1lQLzBkSnF4K24vSXBsd0pRT09KTFRDNU9XSTJqUjVUQSttb3FJYzNZL2ppdlBUS0hVc2QzTHJ6bjV5eWRsSVd2ZEFxUFhyNk5HUXVmSkM5WXdyd254MUVFUkxlOHdZcmdDSjZjZVNiOXZGd0NMRTIxMm9SSWRDSWdoS21CUUVyTWhQVWxUTU9VaVRpYmhpSEJ0RnhTZDZxMVpydWhnQWlIdzFPQXZ1b0tVeWhPZG93dGxUd21mdmxNRnJ5OGpmTHArYnkySTU4cmJ5cytXcTgyNFlMcUVHME1FQzAraXhMSDJMbWludm40R3FzN3RNcDhueXJHNW1IWVZ5OWk5TXN2VXY3bDY1aHUvVTdSUmorQnBncHV2LzU5Z0Q0REJ2UWY4Y2tuKzk1ckcyZERCd1FTSVlRUW1rQ2ExaFJ6MHpTdGpnUXdwVXdLbTVZcWFwYWxCaUM4WHU4VWRYVXBGSjJUb3ZGakdWM3pQc3Yrdm9YTkplT1lXbkxzaitIcmtZbXZ1cHJLV092M2Ftc2FpUFlvUHM2TGxFS3NYN2FhelNVRDhMMjFtaGV0eFdHK25EeHllMzZKNVNzZlkvdkt4OWkrOGorK21HcXhTZG5haVdCS2lTR2xNR1dxSzJvbUZwU2FpZElQelJJMGU2aWJzTXM4TERkVUNadEMwVm5KT1l0cmhqZnc0cktQS0prd2dxU3VlVFB4RWFLeTZjaEJmdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg0OXJxVWkwUzJ2TVBldGZPWTlPSWRIdit4bjBlTnZVd240aG85bE1odFp0S0lDUDVDaE4xNlVZcTBsVi9SSnBHWmFvbWFDRUVpaUVWM29ScHh3d0U5ZEhLU1pxR3R6cHlZTmJEYzBGQXBkck54UWhhSXprOFhFU1lQd2JmQno1WGpIcVBhU2M3ajUzSGQ0Nk00ZnMrM0JoVHg2dUlmd0RtVGVqNy9PZ2w4dlpkSTBQOUhzZkNaK2RUWlBUdmswbzkvYng5amdMQmE5TUlrUGZyMkJvaG4zY1VPeEIyWk1ZL0k5THpCMzlWa3NuektNaFQrZXhvSmZMMlhDTWo5UmIxNmZ5MlorZThnL2x2M25oeVQ3Um5GSm1SZ1pqaEJDQXlHbGtGNlhJS3BIT1ZnZncrVnk0OU1rcGxYK0lYcjI3RWswR2hXeFdJeDRQQzVNMDlTa2xDNWQxMyttYWRwMzFNV2pVQndkbjJhdktCK3YrbXlXMEtZL01tbDVDY3QvZVJFbHA4aDVESVlpUzNMR1h2c2kwQUlFZ0tDQU1JS29RT2hDWUdoQ21HNlhKcjBlRno2dlIyYjZ2R1Q2ZkdSbCtzak96RUJMellhU3FGL1RORTJicEM1VmhhTHpFbTJzNFBrVjJ5ajU4cm1uaktnQlpHWDZ6a3ZuaW1MTmFjTnVzNUpTSkRvUlRHdUZnWkhzUk5CU2luS1JVb3FHaG9aaHFHVXRDa1huWmMvTFhISHJNN3pVNHlvV1RzazdwWDQxSWNUWnE1LzVVZThPeEUxSWlVQ0NLYTFNcUxPSDFEcmNxUTN2SkhwREwxSlhqa0xSaVNtOWlyVXJUOTNhK1RGbm56a00yRzhMbXdTWGtHZ0kyMktUUW9LVWR1K29kZGhiclpKWlVWcEhGQW1YeTNXaHVuSVVDc1hKb250ZXppakxTa3RPK2tnY3NsV3JwTjAvS3BPVkhZWjFhS2tXMi9lKzl6MlhFR0tpT3JVS2hlSms0WEc3emh0NVpyK1VodmhrbksxMWxCR1dLeXJidXFOYWlodkt3dzgvZkFIUVRaMWFoVUp4RXVuMi9DUGZMWFZhYlRMUkZKL1lGaS9CbXE2THRFUXRPZExJYWJGWkNKL1BkNTQ2cHdxRjRtUlRXdEpyU0h0WEZLM1ZIVTBZWmFaMUdMSTFFYW81eXp4SXpGNDdYNTFTaFVKeHNzbkp6anpIWWJHMUtmdXc5VXBhV1ZKcDdUODJaR0tza1daYmExSktjZTIxMTdxRUVNcGlVeWdVSngyM3kvV0ZBYjN5WFNrV204c1NORTFLQkZoeHRqYnVhR3VNVFFCaXlaSWxYd1J5MUNsVktCU2R3V2hiOXVoOS9aMmlKcTE5b3poVzh5WGliTTZhTm9mRkJwQ1JrZkVGZFM0VkNrVm40Y3dCZmRza0VHZ2JaeU0xemlhbGlTbk5WdVVqVWI4MlJwMUtoVUxSV2VpV216V0Vkc21EdG5FMkhIRTIwMHkwV2JrZFk0cUVFT0pjZFNvVkNrVm53ZU4yRDZkOWpDM1pMNHF6bmkzcGpyWmFiT3phdGFzbk1GaWRTb1ZDMFZrUVFnejY1ZmRtNVhRa2JpUlVMVm5QWnJ1bGRveE45T25UUnpXOUt4U0tUc2VsNTUvYnh4SXlhK0FrR2hKaFQ5V1ZXSlVkVmhlQ2xJN3Nnc2ZqVWNLbVVDZzZIWDJMQy9vN3JMUjJ0V3hZSTR4YXV4QVN3b2FVVXJoY3JyUFZLVlFvRkoyTm5Lek1NeHlpMWtiWXJEaGJ3aU9WQ01zVkZacmRJeXFFVU1LbVVDZzZIUjZQZTFDS3FMa2NGaHV0NHBaSUlOaXVLTllkemxLblVLRlFkRFkwSVlZNHJMVDJKUjlwRWdnYUlHcHFhZ1p6dUhXQkNvVkNjU1NxTnpGM3pvTU1uWG9mYzlicngvT1JmU3NmdjcvUUtXalNtc2RHc3VURFRpQTRMTGFjbkp4QjZsMVJLRTVYL0x4NC95OVlWQWxVdjhHMDc3OUI1VEUvaHM2YUYvN0N1cDVYc2ZhbFgvRGtlRS9ibTdlL3hJUWJsN0ltOXVsZTRkRFNma1drTGRLMU94QVNncWJyQnVHNFpiRzUzZTR5OWVZcUZLY3BMYnQ0czNFZ0Y1WkE3Wlp0UkljUCtoVExZY0xVTnVxVWpCalVacXQ4a3RLTGVITGVGTVo3UDkxTExPeVJWNXpHSFJWdER5a00weFM2QVc0cHBkQTByVlM5dXdyRjZjWlc1dDc2SXV1Q1llcGlIamJmK0JIUllJQ290NUlKTmRleGR0NDViZU5Uc1VwZWZQclBMRjVmUlMyWkREdDNDZ3Z2dW9CaE9aVTg4LzFuZUdKSG5OaU9SWXhkUFpabkYxL0RhT2ZQN2xqTDdZL29QUHFuYnpEK3pkOHdjaG5jVUJwbTNZNXFhbU9aVEx6cE5oNmRWSXl2OFcxbTNQb09lUmRtVXJtOWdkb21LUHZ5TkJiY09LUlBXMHN0R1Y4VEpsSm9nRzdheG1NMDRZb0tJUWFxTjFtaE9OMFl4cU8vZllTVk0vb3lhdVozMmZpSE9keFJNb2o1enp6Q1c2bWlSb2cxanovREU0MWplSGJKWTJ4ZmNpZlhCRmN6Ni9GTjFGTENuYis4ai9uRDNZeTZhUjRiVTBVdEhUVU5NR1VXYTMvN0NHL2RPNUQxUzE1bVRVdXJhOHp3RzFpNStHRTJQak9Ob3ZVdjhwTTNRNzB0eTZ5OXVBRlNDT0YyaWNRZDNON0VEVUtJQWVwTlZpaE9SM1MyN2doUWRrWXh0RlR5UWF3dnczcWtjMWUzc0d4OUp0TnZ1b2hoT1VCT0NUZmNObzY4OTk5aFhlT25lTnFlWjNITmlNVGF3THpTTXltTE5WQWJ0RzhzNXNJeEJRbGg3WEVPZDB6SVplTTdPMG82RURWN3NRc2tCeFZKM05ZTlN0Z1VpdE9NeXRYUE1HTlpKZjZtTUd4NWtIV0VxUXQ2Mkh4ckJUYy8rRDN1ZEFhb212elVVa0JwVDZjNDlhV0VqOWpUQ1BUNERDL0V5ak5FZFNCTkRLNm9PQS8rSGVtWFlyRUpDWnBJbWFacnk1dTJhOWV1WWlCRHZjMEt4ZWxGeVpRN2VldVphWXp2K3lXVy91RVJYcDE1Sm1kZGRUY2JmNXNpYWdEZDh5aWluajAxYmQzSld2SW83Zkg1dnM3S3lnYkl6czM0MmJ4YmNqcTAyRkxRQ2dvS2VxdTNXS0U0VGFtcG9Ka3ZCcUFBQUNBQVNVUkJWTHk0aERLZ2ZFODlKYVhGNmUrWE00S1o0OE9zZU9GdHRyWUFMWlc4dVBRTmFzLzlFaE9QdTdCVnNlcC9LL0FEMGNxM2VlTE5NT01ubk1rWEI1K1I1eEN5MW5xMkZLUnA0dmI1Zk1YcTNWVW9Uay84bFExUU1vWTgvSlJYZWlpYjR1bmdubGxNdnZkT2FwLytNN05tcjhRZnk2UnMvQlNldldzTVJjZjlWZVdTVjdtYWFkZnZvaktXeCtncE4vRG9wRHlhZC9mSTY4QmFhMTFHSlJDR2FVZ1JqVWJ2OUhxOVQ2dTNXS0g0YkJpR1FXVmxKUU1HSEVQSSt1TlY2c1E1YVh5YkdiZSt6NVcvbmNNTktaWmdaWFhkZ241ZnZ2a2RJR0FmQWtJSUlnSVJFd0pERThKMGFacDBhNXBXcE02bVFxSG83R1JsK1BJY2JtZ2JTODA1NVFNa21xWnBCZXFVS1JTS3pvN1g0MjRYWXlOZGpBMXdDeUh5MVNsVEtCU2RnaDRYc0h6bEJXbHZjcnZiQ0Z2N1F5SnNtZFA0YkJVb0NvVkNjVUp3YVZvNlY1UTJWcHRWcUtzQmVlcVVLUlNLem82bWlSelN4ZFprRzNFVEV0Q0VFRXJZRkFwRnAwZUk5c0tXYXJuWlhWVWFrSzFPbVVLaDZQVENsdEFxcC91WnB1dEFKb1V0UzUweWhVTFJCU3kyekJSUmMyaWViQ053R3BDcFRwbENvZWdDWkJ6R0RXMWp0V21rN2FkWEtCU0tUb2UzdlhlYVR0WlF3cVpRS0k2R0VKdFhQTU9FNjcvTDBPKy9Sdm5KRTdaMkNZTjJBaWRiNTRjckZJcFRsUzEvWnRMQ2o0aWlzMjdSUXVadStoUWJwQ3JmNGFGbGZpWS92SkR0djd5VTQ3Y2twWjUxLy9NR2E2cVA2czZ1dzFoczFrWjRNR2x0UzFBb0ZLY29XemRWVURSbUlENnFlRzFQTVJjTzhSejdnelEyVUp2ZGx3dUhIdTljWXdPdnJWak5hMGUzRmt2cjBFcXpUTFhFSm5nUVVrcXAzbnFGNHJQVDJhWjdsUC9Qazh4WVVZVy9TY2ZYUFJPZm5samFVcGpkazV0LzNINllaTzJtbDVuN20zZFlYNlBqNjNrbTAyZDluZm5qQzRpdVg4cUV4eitpTGdpNTJabU1uMzBmejA1cVcvNGFyZHpFZ2wrL3dpczcvRVN6aTVuNDFXa3NuSDRtUmNDNlJmY3hOM3MyRzc5MVp1TE82My9EME4va3MvekhlU3k0ZnkxYm04S1FuVXZaNWJmeDZsY3IweTV6ZWZTMmN5Z0J4UENwMDRBZ2lla2VmcUFGQ0FxSVN0Q0JPQ0ExRXBhYlFxRTR4U2o3Nmh3Mi92WW1wdlk4aDBkLyt3aHYzWHNPZlMrY3pjWS9wSm1RVy9rYXN4NzlpSkpaOC9odzVTOVllMXMrNng1ZndxSTk0QnMvaTQwUGpxT3crN2s4K2FkSDJva2FzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2ckQvOENTeTVsNVI5bU03MTdKbFBuUHNLcnN3WmFON1JmNXZMUVdqK0gxU3FSbUJPZUdNcW1vUUdHdWdRVWlsT1VtaXJLZXc1aW1CZkt0MWRUTnJ4djJydHRYdjBPbGNPbk1HOThBVDQ4RkkyWnlyemhEYXhZWFhIRXA0aHVlWnNWd1JITW01bXcwSHdsWTVnL3ZTK2JWNy8vS1pNTTdaZTVySDlyRy83Mld0VytWOVRDRGNSSXJsTlFLQlNuQmx0NTZJNi9zS2JKVDEwc2syazNyazdzRE0xK2hBbnZUK1BWZVdQYU5JblhOb2JKS3k1d2ZDK0xrcEpjL0pYMVJCbVlzb292UmRnYUEwU0x6MnF6S0xtb1p6Nit4bXBxajhOdmtsam1Fc2FmMEtxalF1TVk3cXhRS0xvS3cxaTQrR0dXZmptZkMrOTZrSTEvbU1YVW5pTVNMbW1LcUFFVTljakVYMTJQUC9rZG5jcWFBSGs5Q2c0cmFnQytIcG40cXF1cGRDaEpiVTBEMFI3RmliSGhuN0dnekZybVFsNTdyWklwWDlzSVcxaGRCQXJGcVVpSThtb29LOG1DeG1yS3ZjV1VkU0F5bzZkOGlaSi9yMlhSSmo5UkVvbUVKOTdQWi9xVWdVZDhGdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg2bERDZ3B5Y2UvNVNQV04rcEVHeXQ0Zm5XRlE2RTgrTHc2dFRYMVJKUGZTNy9NSlE4aVIvVnJ5NFFyR2xJWGdFSnhLdExBQjVVRm5GVUM3SzJpdHVlZ2p1dlBTaTVsNmR3d2MzL3pDQ01mc2JLaTk4NW1YdWxSUEkxM0lQTisvSFVXL0hvcGs2YjVpV2JuTS9HcnMzbHlTbUk0ZDlubDEzSFBscVhjL3YvV0VlMCtnS2tqOHNsTi9uQmZycGt5a0ZtL2VZUkplKzdrclpuUTBUSVhLV1U0alhYbStMOUFDSWtwVFNta2xCOEFJOVZGb0ZCOE50UXlsK1BBWVphNW1GSnVjWTI0Nm9lMGxuczRGN3BFQlVJWGdyZ21oS2xKS2YzcWJDb1VpczZPbExLbFkydk5ucDJiUUFPVXNDa1VpazZQYWNvV2g0REpkSUptZWFTNHBaUk5RZ2gxMWhRS3hjbm5NTXRjRE1NSUhNWmljK29hbXBTeVFaMU5oVUxSMllrYmhqL0ZZcFBweFUyZ1NTbnIxU2xUS0JTZG5XaE05M2ZnZmtySHVnTUFOTU13NnRRcFV5Z1VuWjFRSkJxZ2ZXeE50bmRFUWROMXZWcWRNb1ZDMGRscDhnYzdja1dUWW1kbkM5eVJTS1FtSnlkSG5UV0ZvaFB4eVlFYWRSSlMrR0Q3bmtESG9pYXRGYU9KUVd6dWd3Y1BIaXdzTEZSblRhSG9SQXpvMDFPZGhCU3E2eHZ0Y2cvVEZqV1I4RDZsN1lJS0lkQTBnVFp5NU1nYWpyWUhTNkZRS0U0T2tibS9XaG82akN2Ni85dDc4L2lvNm52Ly8vVTUyK3hMbHNrZUVoS1dFRVJBSytEdmlsaC82TldxYlM5WVdyUzlTbHUrYVB1cjFHOEwxUXE5dHFCdG9jdEZieXRXcjFoYnNGcWdWV3BSUkJUVUZsY1VOU3lhUkNBUVFzakN6R1NabVhQTzUvZkhuSFB5bVpNelNiQnN3dWYxZUJ3VEFtYVpNL1BNNjcxOTN0VGFDWSsrbzNiMzg4ZU5pNHZyVEJXbDlJQU5aRHJqM0RKRURMQlJTdWsrL3RCeGNYR2RxZEowL2FBTmFobHV6ZHlZYkFTa2FiRHB1djR4ZitpNHVMak9WQ1dUYXJPRFkzTnMrU0FrdmZPQWFwcld5Qjg2TGk2dU0xWHg3cDVtaHhBMGErdUhsS1poc2tGUitONWtMaTZ1TTBFcGJGajZBOHgvVFUzL3NXQWFmbjdIWjFveGhCd2JJU1JkR1FWQU96bzY2dm1EeWNWMVppblI5QllXM1hrM3hsOTNHMnErOWtzczJOekVuREk3TkVEVWJYNGVhM2VmckxOa1c3QnA3U3ZZM25HaVA2K002eGI5Q3J2Vy9STHZMQmdIQlVCRC9iNDJCbVkyMTJhT1V4SHJ2d0lBV2xGUjhSRnduSThaRnhmWHlWUHlReXhaK2lSMlZNM0Erc2QvaHMwTHowZlR3dzlnd2ZiamdWUVBkcnl3RVd2Mm5LelQvMXV3YnMxTDJOWnhjajY3UzVFUlRBZVNpVHUrdjd6RDd0UUlvSU5rOUxTbEN3Z2tIWXFhMW00WGdBbjhHY1hGZGZvVjNmNFNObUFTSHAxN2Z2bzQ3M0ZYWU9uMWIrT2FwOTVENjVUSmlEaWNOTHRwNmYvRmtzTGI4UExjU3V4NDlPZVk5Mnc3b2wwcWtudVdZZnpqQU9RUldIemZYRnlmQTBRM1A0QkpheVZjVjlpT0hRM3RhRlZLY2YzY0c3RjRTdm80NzhTMmh6QitUU0hXci93OGFnRUFIMkxSMXg1RzlMcy94MzBYdHVDUk8rL0Rpa1lWaVZRUHR2N3dCMWdOd0RYOGFqeiswOHV5SHorZW9XNXNYN3NhUzU3YWhmb3VJRmcyQm5QbWZobTNqZ3M2L0Z1Nnh3WTFIWUJPQVFvS0NxUzN2aE5pTEJhbGVqckhoblJsdEU0UUJBNDJMcTR6UUUwTkxVRFZaQU1xYVZXUHJrVHdxUTlSajhucDdVOERhT0xOUDhEck4wZXgrczY3c1c3S1Fxei9RbDcvZjlTcFlzS2kvNHZsWlRKYXR6K0tHZis5R2xVcmJzT05oWU45ZDRYNCtrL3Z3ZGV4RS9ObVBJM3FleGNOYlRjQ0cyYS90UjYzUFFVcy9PblBjWDFaQ25VYmY0K2I3MW1QNm9kdnhwVzJDVTlkMSt2UlA3ZW1BOUNKMlpSTFFUVktJWUdBQ0NJRVFnZ0ZRRlZWcmVOUEp5NnVNME9KTGhVdVJjcGNmZWVUNEVxcEp5NW5WREFDVThyU0s0VWpVNjdHRFFVZjQyL3ZuYUlEdFJVWnJsUVBXanVpaU1LTDJxdS9pYzBQek1JMGg3RjFYVXZ1US8vOEdoT0NFaW9RQUpSQ0ExTThBRUI3ZW5vKzRFOG5McTR6UXk2ZmhFVFNCckV1RlFsWkduVFA1eWRUQUdVNVFMVHoxR3pqZEkyYmdjZS9Pd2E3MWp5QTZWKzVDOVAvYXowMnRLaU9QMXV5TjM3UUJqUU45cFlQUWloSlQ4SlRRdnBHcXVqZXZYczUyTGk0emhCVjF4UUNlejVFWFVaNDJvUm8yVWdqaHlVRFNDRnh3dGFkeDlEVUFnVERualI0RkJtdVZPcWtWUlFUTFMxSWpMNE05LzEwRVY3LzAxMjRiMm9QVnQ2OUdtc2RDaEhSOWdNdEJzQTBCbXJHWlZSRUtRVUZJQkNTdmt6aVRaNDgrU2lBRC9sVGlvdnJESEJzRjF5QjYrWFhzZVNoT3RUSHU5RzYreVVzV051T0s3OHdMcDFmeXlsRmJjRkIvTzNsSmtTUlF1dnU1N0hxZmRYMldUd295NUZSLy9ZdTFDZUJSRHlLS0F2Q0l6dXhhWGMzZ0JUcU56K05WVWNxY2EyWnZCOWVpZXFPWGZqYmU5MEF1bEczK1NWczZyUi9sMEdVNWJSais5dE5pQUtJZG5RUEdZU3QyNS9BTlhjK2dVMHRLUUJlUkFvRGNDWDdnN1EzZ1krT0hkN1pnNnl0SHVsTHB3Q0lBSm1raXdoVzhRQ0FydXY2MjRJZ2pPUlBLeTZ1MHl5bEVnc1h6Y0tTM3p5SmEyYTNBK0ZTWEhuRHJWZyt4V3Y4Z3pMTS8vWmxtUGZmdjhLRTM4c29QZThDWEhsZUFFMFpuMFRHdEp0bTRNcDduc1kxTTU4RXdoV1lmOWYzY0d1TjhkYytMM1k5L2l0TWVxOGQwWnhLWEwvd3hyN0NRZUcvWWVsTkgrSzJleFpoVmRLRENaZGVnQ21sOW0reUVyZk1uWXg1di9rVkp2d2VDSlQrRys2N2J5YW1EYUhYdit3TE4rUEJqdlZZOXYwZjRMWXV3RlZRaWV1L2U2TlI0ZTFyMEtXVWZ1QVVocEowVlZTbjZlUFhBRUtvTEtiZEdpRUVSQlJGV2RkMUNZRGMwOU56cTh2bCtobC9WbkZ4SGI4K1RRdVRvNXNmd0tTblIrQ1orNjRZWW52RzZkSGhveDIvTEw3c1AxOUZla2x5SEpsTGtuc0JraElJVkVLSUxna0NWU1NCS29xY3pyR1psZEZvTlBvMmYzcHljWEdkS2RyZGNHQ2Z6YTJ4T1RaS2pKRXFvekdYa25TT2pRcHNuRHByMXF5M0RTcHljWEZ4blc3RnYvYUQ1UzNJcklSbWdNMjhDQ0dVa0w0VGRDVkNpSEZLT1BTdFc3ZnFsTkx0aEpEcC9ESGw0anA3Rlp4K0szYWY0YTl5VmRQZWFtcnQ3QWMxWTVTS0FzUndiZWFNYUJwcWJCOGJqTGU2cXFyYitXM240dUk2M1lyR3U5OTNDRVBaY0pTbVkxQllibzJZN1I3R0g2aVpaNHZGWXEvemg1U0xpK3QwYSsvSEJ4c0dnaHJKT0RtWFFDQkdINXNnSUNQSEJrRC8xcmUrdFIzQU1mNndjbkZ4blVZZCs4YWlYemRsZ1pwRGpnMlVDQVNDUUtnZ0dJNk5FWDN5eVNkVlhkZGY1bzhyRnhlWGt5ZzkrVjhqcGFxdjFUVWVZc05RTlJOdWZXZXdNZUVuQ0JFZ0VDRmRQQ0NFbUgxdUZJQ2VTcVZlY2JsYzEvSmJ5TVhGQmFTN1lRK25QRGlTVUtDQklKN1FUdXJYYTJ0cjI1a3RES1hwQWdLbDV0UUJDRktVQUZRRXFBaXFpMm13QVZZdm0wNHBwUzB0TGE4TUd6YU0zMDB1TGk3b0ZOZ1JDd0t1QVB4NVFmaDhmaFNlNUsvNTRVZC9yM2VBbWdaQU0xbEZDS0ZFRUNBSUFtUlpocUs0NEhLNTRIYTcwOGNXbVlVRDA3RlZWbGJ1QnZBK3Y2VmNYRnlIVTI3QUZVQmhVUWw4UHY4cENIVnAzZHh2ZnIzTkZvYXFCdFJzUnhhWlBXeUNrVjlMZzA0UUJBRk1uczJDbTZxcVcvZ3Q1ZUxpT3BKUTRBOEVUOW5YNitycWVnM091YlcraW1qYWtCa3RIZ0lFZ2NDQ21paFk3UjVtS0FyamY5U2owZWhML0paeWNaM2JvaFRRcUpEZHFiVnR4OHJ2ZlFXZnUveGlUTC9xUC9ERHZ6Y0RBSnFmL0NZdXZlUmk0L29tL3R3ODlLOVpYLzlSSFRMemE3YkNBWFRMaUJtVEJvSWdnQmhRRXdVUmt1bllHTGhSU3FtZW41Ly9pcDdldmx6S2J5OFgxN2twUW9CNFVzdVNVNHZoNWZzVzQxbDhDeXVlK2crTVZHS0lJUUFBS0o3MU1MWjlJWUZFKzkreDRNWm5qdWRMSHJyMmMxZnR0NFdneG1VUFF5azBWWWNrcDZFbXNvN05zRzlPUzBjMVRkT2U0N2VXaTR2TFdjMzQ0TU1rYXEvK0hFWUdBTGdDQ0xCSDRMcGNjQjNudXVLZW5wNXQyZHdhSWRDUXNYS1BVbDNYcUo1MmJGUVFSSWlDQ0ZIdjdPL1l6TGxSQUhvc0Z0c2NEb2Uvem04Z0Z4Y1hFMzlpNDUzL2lmdDNKSkdNSjRGZlhJdlAvUUtBTWdWMy9ua0pwcnFHOWpsZSsrTXlQUGprZHV5UEt5aWFlQTNtZmYrN3lPOXNmTmNHTmF0d1lMUjU2QVJJQTgzNFRNbDRITzN4T0FSUEJGVmxQb2pFblFhYmVlbTZuZ0czM056Y3pUd2M1ZUxpeWxRZXJ2N3BNN2dhZTdIeWhyblkvL1cvNGQ3cHg3ZUpZZCtUUDhDUC8xNkJPeC9jaEttNWNieTI4bmI4K0h1L1BmVGUxcDgwR3NaS3RZTU5sT29naElJUUtnb2lSS0locVJKNHdpRUVqVFlQVVJRZ2VuSWdwQzJja0RFdnlwUlVkVTNUTnZJYnljWEZkZUswRnh2LytpRnF2L3BkVEMxMkFhNDhUTDdsRzVoNDlPbVg0SmhiNno5S1JVaDZPeFVoQURIQ1VFRVVJWW9pUkVtQ0lJcWk1ZGpNa0JSOSsvdTB6czVPRGpZdUxxNFRxSGEwdC90UlZCem8rNUNyQWdGdjI0NXNZYWdGdDR3MkR3QWdTRU10WFEwVlJSR1NLS2JCWnNLTmdaclZ6eGFKUkY1QmVrczhGeGNYMXdsUUxuSno0empjRnJNK1FudWI5L3ptalFQMmFtaktoQnJKUERIWE9DazMvZit5VUJORkNaSVc2NnVLbW0rWlk0eXNBZFJrTXJtQjN3d3VMcTVQckl3MWdhTnc5UmRIb3U2UjMrTGw1Z1NBTnJ6eTJ3ZGVRdjlKZzR6Q2dYV3dwTUVvUVJSQW9OTkVra0lVQ1hRS1NKSUlpY1lnc1k2TnliVVJwanFxSFRwMDZPK1ZsWlVMK2QzaDR1SWFpcHFmL0NhK2ZGL2ZxdUozYnJ3WTl3T1k5TU5OK01YbkFxaVk5WFA4VjlzUzNEL3ZTdnc0cmtBTGpYalh3YTNaRzNNcFRPTWxDQkJrQlg2dEcvR09JMmpzSkpEOVpSaVhtd001TUJKa3hJZ1I2TzN0Ulc5dkwwa2tFa2lsVWtSVlZhTHJ1a0FwbFpEZXpPcFNWZldQZ2lCY3lXOFpGNWV6UGsxYnFvWXFTb0czWTJFVVZweThyWnlxcXI0NHZLSnNKWUJlOUcyak1xOXVRa2dDUUlvUW9oSkNkRkVVcVNUSlZGRVV1Tnd1Nm5hNzRYRjc0UFY2NGZQN0VRd0VJRWlTWkRxMmpPcW9QUnp0N3U1K21qOTF1YmpPTFJFQ1NFUkhWOWZKMi9IVTNIem9WWWNRTkFWQUpZUmticVV5MkNRSUFrUlJvRlp1VFJJaFNSSmtTWUtzS0gzRkEzc1J3VllkMWUrLy8vNE5BQTd3VzgzRmRXNnBRRW1nSzNaeUR0V21sRGI5MTQ4VzcyTEFscktGb1RyTUk0ck1uUWJXMkZRZnR5UlJTb05ObHFFb1NwOWpZL05zZ2lDQW9hTU9RTHZycnJ0NlVxblVPbjZidWJqT0xSVXBDZEJFSEVlYW0wNjRjNHZINDg4OXYrbTVsSk5iQTRnOXY1YUdtekVYYW9lYUpNdVFGUVV1bHd1U0pLVS9hUHdqS29vaTBUU05Db0lBVGRNbzQ5clVBd2NPL0xXcXF1cTcvRlp6Y1oxYjRlZ0ZnU2lPSkxweHVDMk8yRkVSWGNrVGM0THVLNis4OG5ZV3Q2WUMxQng4VDNPSUd0SjFhSnBHTlUyRnFxYVFTb2xJSmtWSXZTSjZaUWs5THFVUGJFeXVqUTFITTJaSFI0d1lzVXRWMWZXQ0lNemd0NXVMNjl5Q1c2RmJSYUU3QmtxQnpGVXBuMHlKWk9wdmx5MWFkTlRtMUZJQVVnUlFRY3d3RkZRZ29DSUJaQkZRSk1DdEVIZ1V3T3NDdkc0ZzRBVkNmaUEzQ0JUa0FJSXN5N0M1TnRnSDQ0MVJLdzNwU1FRZWpuSnhuZU9RT3hIYTNYamdWUWUzbHRIbWtiRml6emgzVFJUVG9hZ2tpcEFrRWJJa1FwWWtLSW9NdDB1QjErUHVBNXNvaXVaYmFvYWx6SkhoVm5VMFB6OS9DNlgwVlg1N3ViaTRQcWswVGQ4K1llYjh4Z0hjbXRaMy9scmFYSW1FVUZFZ0VBV1JTcUlJVVV6RFRaWWtLTElFdHlMRDQzYkI3M1ZEVUJRRnNpekQ3dHhzRGJ0V0VRR0EydFhWOVFTL05WeGNYSjlVQnc2M3ZqQ0FXMU1OdDZhVDlKWjNLaEJBRUlqaDFBUklrbUE0TlJHS0xNRmx1VFVYQWw1UEg5Z2NpZ2ptaUZYRzdDZ0FiZnIwNmVzb3BYelpDeGNYMTNGTHA3UnU2bGUvLzM0V3QyYk1oL1lWRGRKZ005eWFLRkRUcWFYYk8yeHV6ZU5HTU9DRDRISzVrQVZ1R2E2TkRVZGZmLzExdGJlMzkzRitpN2k0dUk1WFI5bzZuMjFxN1dTaGxqU3VOTlNJZVpKSHVuOU5NUFlhbUMwZWJHNU5rZnJjbXMvdFFzRG5SWTRkYkRhNHNhN05QaGl2cmxtejVra0E5ZncyY1hGeERWV1Uwb1lmM2YrSEhZT0VvZFpKdVFSQTJxMEpFTVYwYmsyU1JNaWlaQlVNWElaYjgzazlDQVc4eUEwSElIZzhIampCelZZaFpVTlNEWUEyZCs3Y2FHOXY3eC80cmVMaTRocXFXanVpR3g1YTkzekN5YTBSSUdVVURUVEFQRWd5N2RoRVVUQ0tCUUprVVlRc0c3azEyWUNheDRXQXo0Tnd3SS84bkZBYWJHNjN1MTg0bXFYOUk2UDFZOE9HRFU4QWFPQzNpNHVMYXdodXJYSFp3MCsrWllNYTY5ajZXanpTUlFNSWhFQzBpZ1pwdDJiT2hDcXlETGRMaHNlbHdPLzFJQlR3SVM4Y1FGRmVEZ1NmendlMzIyMjVOaFp3OXRZUFc2NU4vZktYdjl6UjA5UHpHTDlsWEZ4Y2c3cTE5bU5QLy9LeHAzdHRJYWpwMWxTUXZoVjdwbHNUQlVMVGJpMGRocWFCbGxrSjlYbmNDUGc4eUFtbTNab2tpUkQ4ZmorOFhtK0dhenVlMW84Ly9lbFBqMU5LK1FtN1hGeGNBN20xUFhmLzVvOXZPa0ROZEcwT0xSNUcwVUFValJZUGV6T3VESy9iQmIvUGNHdWhBSXJ5Y3dBQVFpQVFnTS9uZ3owa1plRG0xUHBoVlVpLzhZMXZIT3Z1N3Y0OXYzVmNYRnpaMU56YS92UURUejQzV0c0dG95RlhNTnlhSkFxMEg5UVVHUjZYSzhPdFJYSkRjQnVMVElWd09Beld0UTFRSmMzcTJtYk5tcldHVXZvNnYzMWNYRngyNmJyKzV2UnYvSENIQTlRR2NHdUFLQkJJZ2psZDBEZGg0SkpsdUpWME02N2Y1MEU0NEVOZU9JaWkvRnpyYXdvNU9Ua0lCb09XYTNQS3RiR3VqZGthYjIxcjNyaHhZeklhalQ3S2J5RVhGNWRkRFUySG45blZlRWpGNEpWUUhTQlVTQjhrU1VWQmdDU0pobHRMUTAyUm1mWU9qeHRCbnhjNXdRQUtjc1B3ZXZwMm13cjUrZmtJaDhNSUJBTHdlcjBXM0V6SE5sVFhGZzZITitpNi9uZCtHN200dUV5bFZQWDVrWitidDh2QnFRM3Uxc1JNdHlZYkJRT1AyeGlkOG5rUUR2cVFueE5FVVNRbjQrc0tCUVVGeU0zTlJUQVloTi92dDNKdERoTUpBN2sybFJDU09uTGtDSGR0WEZ4Y2xuYnNxdCtFekdaY0MyeUdXMU9INnRaY1ZudUhNVHJsOXlJM0ZFQkJYaGcranpzVGJDVWxKY2pQejBkT1RnN01Rc0pRY20xbU1ZRjFiY1hGeGY5SXBWSVA4OXZKeGNYVjFkTzdadkxzN3grd1FTMlJ6YTBKUmlYVXlhMHBzZ1NYeTJ6dmNDSGc5MXJ0SFNXUnZINWZXL0I0UENncUtrSmVYaDVDb1ZEV1FvSlRoZFRlMTBZSVNYM3d3UWVQQVRqSWJ5c1gxN2tyQ2h6ODYrWi9ib056d1lCMWF4bDlhMVlsMU83V0ZLTmc0SGFuMnp2OFh1U0ZnaWpLejRISHJmUUhHd0NVbEpRZ0VvbUFMU1I0dlY2NFhDNWtHNUxQbG11Yk9IRmlmWGQzOTRQODFuSnhuYnM2Y3JUanlhL2UrYXNPbTFQTDZ0WklobHNUTTg1WmN5a3lYSW9DcjF1Qnoyc1VERUlCUkhKREtDbkljL3o2QWdBb2lvS2lvaUprS3lUWXFxVFVuRXF3citnelhkdlVxVk1mMDNYOVJYNTd1YmdHa2VJNzYzNGtWZE5lL3N5WGJudGpDRzVOTTl5YWJrNFpTRWJmV3I4cXFIRXlic0NiYnUvSUR3ZFJGTW1GSWt2WndRWUE1ZVhsTUFzSlpranFWRWhnaCtTWkdWS2RkVzA3ZHV4SUhqbHloT2ZhdUxnR1U2amtyUHVSZHU1cGZLYXB0ZE0rWFpBQWtDRE1CaXJEcmVuRU9rU1NXRTVOdG8xTmVUenBrM0hOMHpzSzhzSW9MOHJQK2owSTdCL01rTlIwYlFQMHRsbXVqWmxJWUoxYnFyaTQrT1ZrTXZrYi9zemw0aHBBa1pGbmxXdUx4cnNmdlhEVzdSOGJibzJGV3QvQWUvL3oxcWhJQ0UwUHVJczBmU3F1bk9IVzBoTUdYb1NEZmtSeXNvZWdqbUFyTEN6TUdwSTZqRnRSU1pJeUNnbXNheU9FSkxkczJiS0tVcnFEUDN1NXVMS0lDRUQxcFVCT0JTQjdQdFUvaXE3VGR4LzQwelAyZ29HVld5TkEwZ3hCbWZQV3FHQ0ZvR21vWlp5SzZ4U0M1dWVpTUM4ODRQZlNMMEF0TFMxRmUzczdvdEVvNHZFNGVucDZrRWdra0V3bWtVd21rVXFsb0tvcVZGV0ZwbW5RTkEyNnJvTlowNmRSU2dVQTZ0VlhYMzI0cmEzdHdkemMzSlg4R2N6RmxjMWVpRURKdUUvOWovSGhuajNyNy9qdngrSU9VRXM3TmtMU0JRTkNOQ045UlFWUmhDakxrRnd1U0M0WFpJOEhpdGNMbDk4UGR6QUliemdNZjE0ZWdvV0Z5QjAyREFValJxQjAzRGdnRkJxNll3T0FVQ2dFcDk2MkxJMjdHU0VwSEpwMjgvTHlOcVpTcVlmNHM1ZUw2K3hWUEI1ZlhWTlRzNGNKUVRPZ1JnaGgxK3JwQU5LTnVLSkl6Vll5V1phaEdKdmMzVzQzUEI0UGZENGZBb0VBY25KeWtKK2ZqNUtTRW9RR2dab2oySUIwSWNIc2JXT0g1TFBOa3RxYWRuVkNpTlZwVEFoSnZmcnFxNDlRU3QvbXQ1K0w2K3lUcnV2dlBQcm9veStpZjE2TmhWcktNRHNhSVVRM0pwaXN0WjhtMUV5d2VUd2VlTDFlK1AxK2hNTmg1T1hsb2Fpb0NPWGw1VU16d1U0ZmxHVVpaV1ZsS0N3czdGY2xkVGh4ZDZCQ2dnb2c5ZG5QZnJhcHJhMk5oNk5jWEdlaDl1elpzLzQ3My9sT05Hc0kydGUzWm14MkoxbmRtdW5VUEI0UC9INC9RcUVRY25OelVWaFlpTEt5TXNpeVBLVHZTY3IyRjBWRlJlam82RUEwR2tWWFYxZldYQnViWjlOMW5lcTZibTYxMGlpbHhIQnRRaVFTMmRUYjI3dkM1WExONTA4RkxxNnpROGVPSFh1NHRyWjI3d0J1emRvK1piZzFhb0xOYlBobm5acnAxdngrUDRMQklISnljaENKUkZCU1VvS2lvcUloZjEvU1FIODViTmd3ZEhaMkloYUxvYnU3T3dOdVpnSEJ1S2l1NjhSV1NLQUFkRXFwVlNYOTR4Ly8rTDl6NXN3Wkt3akNkUDZVNE9JQzl1M2I5Nm45M2xWVmZlbWVlKzU1MlFhMVhwdGJ5OGlyQWFDRUVPdHpHQ1lJQUpER1J2cXR3UkhyWThmN1dBMElOcC9QaDdLeU1zdTFkWGQzVzJCTHBWSjIxMFkxVFNPNnJsUGpHOU1OeDJibTI0UnZmdk9iSGRPblQzK3dvcUtpRmtBSmYxcHpuZXVxcUtqNHRIN3J6YSsrK3VxR1ZhdFc5VGlFb0wyd0ZReU12SnB1T0RWcU9EUnE1dExNSWtFNEhFWnViaTRLQ2dwUVZsYUdxcW9xMU5iV0RqbTNOaVN3QWVsQ3dyRmp4eXpYMXR2Ym13RTN0dlhEQ0VkQjA0TFIxMFlvcFdvYXprU29yS3g4SXhxTi9rOGdFTGlYUDYyNXVENmRPbmp3NEI4dnVlU1NKZ05xTE5Ec0lhaHFUaVlSUXF5OG1yMVk0SGE3TGNBRmcwSGs1dVlpRW9tZ3RMVDB1S0VHWkNrZU9QMVdZVnRBMkVGNVd3c0lkUmlTWjhldFVvU1FaREFZZkNLWlRQS1JLeTZ1TTFSMVM2YWlxdXBtckkzMi83dDRQTDY2ckt6c2JXUzJkbGdocUMydlprSE5WZ1dsMmFER3RuWjhVa2M3SkxBRkFvR01GcEJRS09RNGxXQ0RtMWtselJpU054K0k1NTkvL21GZDE3ZndweEFYVjFyUnVyVllNdThhVEIxZmc2cXFHb3lmTkIyekZ6eUNyYTFuenZlb3F1cldsU3RYYm9GekJkU0FHMDFTU2xWS3FhYnJ1cTVwbXE1cE90Vmh1VFdxS0FwRXRRdnQ3VEVrNVhRNEdnZ0VFQXFGTWxvN0FvSEFKL28rcGFIK3cvTHljc2RwQklkY1c3YVFGRWJPVFNXRUpLKzk5dHBEalkyTkQxUlVWRlFRUXFyNTA1cnJYRmJyMWdXWVBXOGRHb0lUY08zMTgzRkRLUkRidFEwYk5pekZuSzJ2WWNVekQrSzZ5T245SGltbERkdTNiMzk2d1lJRk1ZY1F0QmZwSWZja3BXYkJnR2lFcEVlbktOVnBLdEdEaE1lSGdHR0N4R2d6bW84b0NOZWNsd0UxTTcvMlNVTFE0d1liQUF3ZlB0eXhRdW93WmtWMVhTZG1aUU1BMVhXZGJRRWhoQkJoK1BEaGI3YTN0OStmazVQemkrUDlYcmk0emg2cnRoWExGcXhEUTJRbVZxMWZqbWtXd0c3RkxUY3N3WXlacTdCazJWWmN1WHdhWEtmUnJEVTJOcTZaT25WcWs4MnRaWWFnbEtZTEJrVFFSTUhxVjRNa2FPanVTYUUzbnFCQ1hoQXVsd3VpTElBUUVXNXZabXRIYVdrcGhnOGYvaTk5czhMeC9HT3YxNHVLaWdvVUZ4ZG5IRXlaNWRSZEtzdHl2NURVTnBXUXlNM04zZERUMC9Nci91em1PbmU1dGdZYmppcTRkUDVDMFNBeHNnQUFJQUJKUkVGVUJtcHBCU2ZlZ3NVTGJzQ1ZrUVJhYmZtdlphc1hZTWJVR2xTTlg0Q3RhZCtIclEvY2hobFR4Nk9tcWdvMWs2N0J6VXMyb1NuQmZNS3R0MkY4MVhRc1dyc2FpMlpQeC9pYUt0U01uNG9aQzlhaXppR2ZscWpmZ0VXenAyUHNpSXFIcXF1cjMyZWNXaTk3RVVJU1lBK1FUSi9jb1p1TnVMTExCNzhrVUlIcUlIbzc5bjd3QWQ0N2xBUWhjYnkvNlM5NDVLL3ZJeFdKb1BqSVU1Z3phdzV1Ly8yZmNOczFrMUJUTlJWTDZnQnNtb2VhcWtsWXNEM3orOXU2WUR5cWF1WmhFL3ZCcHEzSDc1S0tpNHNIZEcxbU9NcUdwR1lMaUJHYXN2azJBWUF3WmNxVWg5OTg4ODFDV1padjRrOXpybk5OZGEvdFFCSzF1R0tLVTZ3WndiUmJsMkphdjQ5dnc4cGxWYmppK3ZsWVZGV0xha1N4ZGRFTXpGbVR3T1FiNW1QcEJCZGFYMXVIbGF0dXdlem9LbXpPY0hzTldMTm9GYTZkUHgvM3pROGl1bTBWbHExY2lObFJGelkvZUIzNnZvdnRXSFp6SFNvKysva245cmY4ZysxWDZ4ZUNzbEFEb0ZNS1NvekZUK204bWdKL1VTbUt2Vjc0UEJKeXhwWUJ4eHJ3d1dFM3hsNHhIUmVQSG9OeFJVVVk1ZzFCa1JKNGZ2a0tqTG4yUnN5ZldZV0pFUUJOUTNlL0MyYlArV1RoWDNWMU5lTHhlTmIyRHdac0dTRXBwWlRxdW01dkFTRTdkKzRVdG16Wjh0RDA2ZE1MUkZHOG1qL1Z1YzRkSmREYUdnV1VDQ0lzMTZLdGFHV2RGbHdJUm9JTW5Fb3g4NzcxV0Q0dGFQejdUVml4SFpod3k0TjRkT0hFOUwrNy9qcEVXaWRoNGFhL1lmdnlhUXdjRlV4ZS9EanV1OUg0Z2xPbW9Dd3hIVE5YcmNDcXV1dXdzTGJ2YTQ2Lzg0bk5uem15NGZrTjhSNm5YalY3RlZRbEF0R2hVNTFTbmFaU0tWQUlVRVFac2l4VGE3amRsdzQ5SmJrWnU0NTRVVGx1SWk0NXZ3TER5OHBRZlN5OVJxL3Fsc2V4Zm1IdGNZZmVkU3VYWU4zQnFrOEdObEVVVVZWVjFROXM3RFNDYmN5S21JVUVJK2ZHRmhNSUlVUzQ2cXFybXVycTZsYlcxTlRrRVVJbThTYzgxN2tDdGtRaURSRVg4eXJldnVRYTNMRHVhTjhIQWpPeDZ0M2xESnlxTVhsaWtJbFpyOFR5elZmYVBuY1ExV1VSWUhzcm9nbWdqeEl1Uk1vaUdkQ2NPUE02VksxYWllMDdXb0ZhOCs4bXZGV3U3SDE2L3Z6NVVWdE9yY2U0ZW0zOWF1bEdYSWxRVUoxcXVrN1ZaQytPdFNkbzNPVkhVWGtJZVVaclJ5QVFnQlNWSVlvdUJQTUxyV1pjOFYwQ0lJRGF5YldmSUo5WWo2MWJHNEF4Q3o1NXdqNGNEcU95c3RLQ1c3WUtLZXZjVExnWlV3a2doSmpGQklFUVFtcHJhOTlyYW1yNmJVbEpTUzRoWkFSLzBuT2QvVEtCWmdET2VEWFgzbklmVmwyYkFCREZ0bVh6c1dvb29WaTBEbXRYck1DYVRkdFJkekNHcEdYUXF0TklHb2dVWlZVb0ExRGYwQVFnQWtwUjM5UFQ5dWQ3WjE3VllvTmFYd1dVeWFzWnVYTXJyeWJMTGlyTE1tUkJwMnFpRi9HZU9Kb2JQZ0wxVGNia2tyUmprenNVU0pJTDRjSVNWRlpXSWh3Ty80dVBaU3NhV2dGbFl2Vy9Wb2tzS3l1ekJ1Ulp1R1hMdFJsUU00ZS96TEJVTXg0Y0FrQW9LeXQ3K2VqUm8vZm41ZVV0QWhEaFQzeXVzeDFza1VnUVNEYWhxUlZBbWVHMXFxZGdXalVBUk5HNlNobENqcWtPRDh5ZWdlV3RFekZuNFhJc3JDNUQwQVhVcmJ3WkN6Y04xVHRhT25xZ3ZYdjE0Y092TkNKenNMM1hJYStXTXZOcTVqSjFkcnJBN1hiRGsxK0VTaVdGcHIzN2NLVGhNRENoQ2prNU9WRGFYWkFrRC9MTEtsQldWblpDSDlWL3VjVmkxS2hSR2E2TkRVbnRKMzlRU3RsOG0yNE93eHJoS1NHRUVFb3B5Yy9QLzN0blo2Yy9GQW90QnVEbVQzNnVzMW0xbDA1RVlNMVcvRzFURTc3KzlVLzRBdCt4Qm10MkFaZXVlQkNMcitzTFVSUEJJUVowOWUrZ0NVQ2txcXozNE1HRHE2NWU4WFlkK3RvNnpQQ1RkV3Y5UWxCQ3FLNG1rMGlKTG5oOU1oUkZzZkpxM2tBZXl2TVBvTE10aVZRZ2pQejhmTGlPdXFFb1BoUlZqUnJTTHdBZ2tVSGYvb3FnS2dJa201cU9yOTNEU1lRUWpCZ3h3cHBNeU0vUHR5WVQ3R05YWmd1SWJmR3lPWEpsdG9Ba0FTVEM0ZkNmdTdxNmVCc0kxMW12NExSYmNIMXBFdStzV0lCSDZoTDl3cXZXMXVRUTdGWUNVUUNKS1BQL0orcncvSTVXdXhzREVFTjlYVDBidzJMVHFrMDRpREdZTWdvUEdlTlNMTlI2R2JobG5MRm12bjdOZmpXQmdGSTloU1RwS3haNHZWNzRQQ25FNGdTQ1B3OWxoZmtvS2lwQ1JXRUlpcUlnbVNTRC8zeVJDQ0tJb2I2K0tlUG5lNjB1eHZ5amFreWJWZ1hzV25OaW1tSURnUUNxcTZ2N0ZSSTBUY3MySUQ5WU1ZRlFTb25mNzMrc3U3dmI0L0Y0YnVkUGY2NnpOeHFkaUlVUExrTGQ3S1ZZT21NNm5yL3VTbHc2cGhRNDJvRFhObTNBdG9ZQUp0d3lFeE1IdEgzWDRzcjhkVmkzWkRibU5WeUphclJpeDZZTjJIRXdDU0NLUkJRQVUydll0WHcyWmpSY2oyc241T1BvYTJ1dyttOUhFYjcwOWdkL01LbmdIdzZoWnc4eWp5T3lPVFd6RVZlaWJoOFE2MHJTK05FV0pMdUR5QW1uMEJOcnc3NzJOclFuWGFpZVBoVVhHSWRHam5TTlF1aUpMVml6WkFsd3hhVzQ3c1pwS0J2bzV5dGRoVlhMYnNhOGd6TXh3WFVRNzJ6YWdPY2JBRENMNEd0dldZeVpHK2FjdUc3L3dzSkN4MXlicXFwc1AxdEdXTW9XRTR4UG85bkQwbG16WmozODV6Ly9XWEc3M2QvbXJ3Q3VzNVp0dFYvSDQ1dHI4Y2l5RlZpemRTMVdySXNocWVTanFuWWFibGs1SC9PdnJCNjRTaGljaHFXUEw0TnIwUXBzV0wwU1cxMVZtSEw5ZlhoOHd2Tll0TElKQjVuOEhSREFGWXNXbzJ6YkNxeGMwb0NvcXhRanI3MzdrZnBYZjdrVi9hY0tyQkNVRUNRb05WZm9XVkRyYThLVlpTaUtqNWFHS0hxaWNjUjdZMmc5SE1OUlFVRzRzQXBUcDE2T2EvOXRKRXBMUzFGVlZZWHl5Ky9FNGplYnNXekRLcXhvemNlMEc2Y05EUDlIbHlHNllBVTJyVnFPcllFcVRMeHVNWlpOWElHRkd6SWZoK1dQcndSaEQzSTdFZHE5ZXpkMjc5Nk54c1pHSERwMENFZU9IRUY3ZTN2RzBVY0dBQWtEUUdMMHV3a0FSRXFwQkVBRzRLS1V1bi8wb3grRmYvakRIOTdpY3JubThaY0ExNWtxVGRQUTFOUjBacCt4dHZVMmpKK3pGZE5Xdll2N0RJN0VZckhmZi92YjM5Nzhoei84b1lkeFpUMEF1bzIzUFlRUXEyQkFqRzFUN1BscXpOSGUxaGxyNXZ5bmViNWFTVWtKaGc4ZmpwcWFHdFRVMUp6VUgvT0V6MmVPSGozYUNrbnQ3UjlaWEp0NTRpNlFXU20xd3RLZi9PUW5uWkZJNU9HNWMrY0tMcGRyTG44SmNYR2RHTVZpc1Q4c1hyeDRpd0cxSkFPMUhnWnEvVTdEZGFxQXNzVUNuOC9uZUx4M1pXVWxSbzhlZmRKL3JoTU9Oa0lJUm84ZWJZSE4zdnFoYVpwMTVDK1RiOHRXS2JVKzUzZSs4NTAyUlZFZXZ1bW1tOERoeHNWMVlxQzJkT25TelN0V3JPaENacUdBYmNETmxsZlRCVUZnTjB4UmN4R0wvY0JJMDYyWlVHT1BCdi9VZ0EwQVBCNFBSbzBhMWE5cDE5YlAxcStZWUxnMDA3V3hjQ09FRURKdjNyeldSQ0x4dTdsejUrcHV0NXVIcFZ4Y24xREo3dGp2Rnk5ZXZHVUFxTEZPcmQvcVBPUEFTR3AzYXViS3ZGQW9aQjBZV1Z4Y2pJcUtDb3dhTlFvZXo2blpkaS9lZmZmZEorVVRtd2RRbW5Beks2UXMzR3pYWUJpbkFMQng0OFlVSWVUOWl5KytXSlZsbVk5ZWNaMHhvcFFpR28yZWdBNzZrNmpLcTNIRHpUYzg4dlN5LzIvTDczNzN1KzVzVGcwT2t3VnNvY0NFbXN2bG91d0p1UGFWZVdhaFlNeVlNY2pQeno5bFArWkpQUU90c0xDdzN6U0NRNFVVVEo3TnFwUUNnRzFnSG9RUVVFcXhkT2xTdlBYV1d3K3VYYnMyNmZWNmVTc0lGOWNRMWRIUjhlQVZWMXl4OWEyMzNrcG1jMnF3SFVQRVZqOHpLNkI5VHMzYzJzN20xSXFLaWxCUlVZR1JJMGVpc0xEd2xQNmNKLzF3eC9MeThnelh4azRqMkYxYitwY2VKUUNvcXFvbTNEUTJMRFhodG5IalJ2aDh2ditOeFdLOWZyLy9kdkFKQlM2dWdkVGIydHI2VUVGQndUL1EvL1RiZ2FDbUVVSTBvZThJb3F6aFp6QVlSRGljbmlvb0tpckNzR0hEck9iOVU2MVRjbXB0ZFhWMTF1UERtVk4yVFR0djVkcFVWVFgvemhGdUFCQUlCUDdZMGRIUkhRNkhid09mTGVYaWN0TFJnd2NQcmpJbUN0alp6eDViK09rSU5XYkJjUWJVbkZibm1WQXJMeS9IaUJFalVGMTllazc5UDJYSGNkZlUxR1RiaStEbzNFeTRBZW4rb0FIZ1JuTnljdGEzdExSMFJTS1JiL0ZUUWJpNHdCcUYrdnI2K3RValI0NnNHOFNwSmJKQmpjMnBaUXMvbmFCMnNudlZ6Z2l3QWNEWXNXUDd3UzBMMkN5NG1RbTNiSEF6LzF4WVdQaHNZMk5qZE5pd1lmTUVRYmlJUDZXNXpuVnBtdmJXdSsrKysrY0xMN3l3RWYxblB3ZHI2YkNnTmxoT3pZUmFZV0VoeXN2TFVWMWRqYkZqeDU3V24vMlVnbzBRZ3JGangyWjFiUTYvYlZnSDV3ZzM0L05TU2lrZFBuejRQM2JzMk5FNWJ0eTRiNHFpZUJWL2FuT2Q4VHIydTVQeWFWTXBiZk9XYmJ1ZXZtcm0vUzFNK0dtZi9ld2h4cnE4VEtoUmpSQktSWUZRVWFCVWxuVElvZzZYcE1JdHEvQXFLZmpkU1FROUNZUzlQY2p6ZDZFd0ZFZDVYaFRWaFowWVc5NEdFbjM5M0FFYkFNaXliTUZ0RU1mRzV0dXl3WTBhSDZkbWFEcHg0c1FQMXE5ZnYveWFhNjVwVlJUbGEveVZ3M1d1cWJzNytjVERqMjE3ZnY0ZGY0NE9BTFZlQWlSQVlLdCtRaU1FYWFpSmhNcXlBRVVXNFhKSjFPMlc0ZlVvOFBsY0NQamRDSWU4eU12MW82Z3doUExTWEZRUEw4RFltbExJa25qYUg0UFRzdkxPN1haajdOaXhqbmsyMXEyeElTa2hCS2xVS24wVVNQci8wL3JZbHVuY1pzeVljYkNtcHVaWGI3enh4aEcvM3o4ZmZMVWYxN2todGEwOS90RDRmL3V2bHc4MngrMDdDdGp6MUV5bzJad2FkSUdBQ2dLaGtnRTFXUmFRNkV6UXpxQUxZM0xTVUFzR0dLZ1ZoRkJXbW92cTRSR01IVk1DdDFzK0l4NkkwL2FDOS9sOEZ0enNZTE9IcFlRUWF1VFQ3SzBnOWdrRmFzSnQ5KzdkZWlBUWVLeWxwZVZ3SkJLNWhTOWw1anBUdGYyZSszSHowZjhYNy82NjloUHZEYVdVTmpUdU83cW1lc0tpOTVHNVRhcmZlV29NMU5TQm9LWW9JblVwSXFpUVJGS1I0ZmU1RVRDaGx1ZEhVVUd3RDJvMXBmQjVYYWgvOXAvWW5qOE9OMzdHNy9CZHhySDF2bWV3NU9uOWFJcEppSXdiaDhVL21ZNHJTODRpc0FIcGM5ekdqaDNyNk5qWXZCeDcvd2FCRzJXZEd3QmFXRmo0YkYxZDNlRlJvMFo5WFJURnovS1hFZGRaWjlOVWJldjJOeHFlbm5yMUw1eVdHZHVQODA2QTlCM3AzUWMxUWdVQlZKSUVLa3ZFZ0pvTXQxdUFKaEtJTGhjQ0FUZHlXS2RXMWdlMVFNQU5RRVhkYzY5Z1pVbVZJOWhhbjMwR3R6MHRZZWxqdCtPNmtsNXMvZEVhekx2akRXeCs3Q0tVblUxZ0E0QlFLR1RCYlJDbzlZT2JrVzlqejNPemdHYkFUUWVnMTliV3ZyMTY5ZXBETTJiTStOanRkcy9oTHdXdU0xV0paOWRoL0lQQWphTVQyTHF6RGExSkY2YmROaFBMUDU4SEYxcXc3RC9XWVB2b0tyajJ0S0FwbG9CWU5XYjFlU1BWTGIrNTV5OHhaTFp6Mk1OUGErNlRVcVFFUWpRUTZDYlVSQUZVVGVrMG1kUUJRcWdnRTVTVnl2QjZSR2dTME8xMkdWRHpRRHUwSDM5NkxvWk8zWXZ5Qzhmamh6OGVqdXVDKzdIa1A1N0Mya01hWWxpRFNYc3V3ZU1QWDRTK01FbkZqdWNPSWZqdnMzQmRpUVRBajJsenhxSDZLeDlpZSt3aVhKK293N3l2YkVYa1o3ZGk2V2ZPQXJBQjZZMVhBNVdIVGNBUlFzeUxFa0tJbVhNemMyMjZybE8ydjQxMWJqZmVlT01oQVBlM3RiVjluSnViZXd1QVl2NHk0am9qZGVnWWNOY3NiUDZaSDlGWG44SDBPMTdDcHMvT3hIVUJBRWlnVlJtRDlYLzVRblB5NC8xL0xKdHd6OXRiKzVhcUpCbUlzVWQ1SndoQmtsS2tRS0FLSUJvSU5JR0FFb0hvb2tCQVV4clZpSUNjUEJmMVN4VHRyUW0wZElzb0szQkJsUVVvM25UNDZUbjZNVmJ2Q3VLMkg4L0F2TXR6OGZGanorTG1iMjlHNUM5WFlmRmZic1dFMjMrTlpTVTM0T1VGOWhHcVhyVEdWRVJLR0NlWDcwY0V2V2c5Q21ENE1OeHkxNzhqT080c2NXeW1jbkp5TXVER1FLd2YyT3pPRFFCaDVrcjdPVGNBdXVIZWFGNWUzbC9yNnVvK0hqVnExRTJpS0Y3T1gwVmNaNXhLcWpEVENPV0NvNGVoT3ZrR1dtTUFBZ0Fnb21aeXhVdDd0Mys0NFpLcmZ0R0VnYmV6OTlwQ1R4VkloNTZFUUJjRVFnV0JRSklJSlJwQlVnY2xnZ2lYMzRVUnVVRW9YaStDQVFrcFJVRFU3ME54Z1F2MXIzV2gra3VmeDd6TGh5RW43RVhPYlpmaHVxZlhZYzAvcG1QS1lJbWVmcXNiUkFBcVlra0E4R1BpWi8xblR5aHFoOXQ1NTUzWEQyb0RRSTZTdFBybDNDd2IxOWNPWW9hbVdtMXQ3ZHMvKzluUEdyL3puZS9zOG5xOS9NaHhyak5YUmpVaFlXeGo2VWxwRDcveTJOcVhIMzV1VzQ4dG45Wi83eWVRcEVDS1dGQ0REdlJCVFJRSmxTUUNXUktnZUNYcTdra2gydDZOenJZZUJDSzVPTC9Zalp5d2dxUmJSR2NvaVBJeU54cFVMMm92SElHY3NOZE1KcUdxUk1YelIzc3g2TGkyWXYrQUJrQkNRRG54RDlzWjF3WVJEb2VIQkRkN1dHcStieHlOcEp0QVk0b0tPaUhFZEc3NkhYZmNvZDl4eHgzL2UrREFnYjJscGFVM0UwSW04bGNSMTVrcXF0TjNkdTA1c3Y3dVZ4cjNBbzJxUXo0dHc2VVJnaVNvQlRTTkVHaWcwRUZBQlpGUVNTQlVrdEx0SElvaVVna0V2a0kveXYwS2ZMS081bytPNHQybWZFd1k0VWZTSTZFdE53Y2pxdk1RclhnZnIwWjE1anVMbytHb2hFaitZR2RRdUJISmw5QjZLQTRnbFA3UTBUaGE0VVBrSkp4bUpKeUpOekVVQ21IY3VIRVlPWElraGcwYmh1TGlZa1FpRWVUazVHUmI3VWNWUlFHejJvOHlxLzAwNDR6MkZJQWtJU1JCQ0RIUGMrOHVMeS9mdW03ZHVoLzI5dmF1NGk4ZnJqTlJxcTZ0ZnZHSkxmOVRPL2wvZGlOeno2ZjFQR1l1YTBVZU5aMmFjWlphK2hjODI4NGhHSTIzSWxMSGVyQy9UWVhzZFNPVTQwZStYNExpODZHNEtJaDhuNEpBUVQ3R2phbkJGMmNQUjkycUY3RGhrQXFnRnpzZTJZb05HSU1iL2g4SmdBU1hTMEtpN1JoYUUvMDkxSlRMaGlINjNIYXNiVlNCeERGc1d2VU82c2VOd3BSQUdwQTdYbXhBZmVJc2RXeW1Bb0VBeG8wYkIwRVFIQzlDaVAydDVkeFNxWlJaTVdXTENwUUpUVTMzcGdIUXZ2U2xMelVCK0UxVFU5UE9rcEtTbXdnaEUvakxpZXQwUzlmcHV4L1d0NjlmKytHYmU3RHNUWlVKUFpPT0xvMkJHYVY5K3dsSXVqOU5GeWhGU3RkcFQxS0V6eXRDVVNUcWRrbHd1MlhrajFDZ0hJemhuVGZqb0tLTWdvcGhtSDFWR1NyS3ZVZ0VYRGhZV29KQXdJM0E1NytBQjQ4K2d5WC8rV3NzaUVtSWpCNkR4YitaamlsR3lEemwrbkVvdStNcFRQM1BTL0RNRXhlRGJSNE5Ydlh2ZVBEUWMxZzA5OWRZWlBTeDNmZVRpZWxXajZQN3NmSkhXMUgybTF1eCtQeC8vYkU3NFZ1cVRyUjZlM3Z4d1FjZm9MNitIZ2NPSE1EaHc0ZHg5T2hSZEhaMklocU5vcXVyeTlwOGxVZ2t6RjBMaE5sK0JWM1hDYVZVTUM4amF5a0JrQ21saXBISmNBRndyVnExS2pKcjFxenJ2Vjd2LytFdkxhN2owU2ZhVXBWbFZqUWE2M24wZ2Y5OWNkc2RkejhWUjErQmdCMlBZc1BRZE9nSk52UWtPa0gvSW9Fc0NaQmxrYnFVdEx2eXVHVjR2YTZNaVlMOHZBQ0tDa0lvTDh1eHhxVE9sSW1DVDcxanN5Snp0eHZubjM4K1JGSHNkN0h1emViZ3NoVVZLSk43TTRzS090SlZVdzJBT21mT0hHM09uRGtQN2QyNzk2MnFxcW9iUkZHY3hsK3lYS2NzN0ZUMWwzZStmK0NaQ3krNzkyTURVbmFYeHViVWtnUklaa3dSb0s4L3pYQnFWQlNZSW9FaVVrV1I0SGJKY0J0UTgvdGNDQVk4eUFsNWtaL0h6SDVXRldEc21ETmo5dk9zQXh1UUhwd2ZQMzQ4SkVucUJ6YjdXd1oyVkJBRUlnZ0NWRldsekw2RjlONi92dERVcUJRUnpReE5BYWlqUm8xNmZjU0lFVHRmZi8zMTYzSnljbTRDVU1wZmRsd25TNVRpNEpIV1kwOStadHBQM21oS3ozbXlVRXM0WEVrSGw5WVhlcHFUQkdKZmtTRHQxR1M0M1JMY2JnVStiM3IyTXhUd0lCejJJV0pDclN3WEk0WVhZdXlZVXB5Q2hWTG5MdGlBZEh2SGVlZWRCMG1Tamdkdy9TcW1oQkJxaEtaZ25adVpkME42RzcwR1FQM29vNC9VM056YzlSczNibnpqc3NzdSs2TGI3YjZKdndTNVRxaEMvd2RkWFYxci92clh2Mjc3NmxmbmRRemkwZ3lnRVJOb0tlTVhzWFYrR3JPYkFKSWtPZTc4TkUrK3RlLzlaSS96UHAySFJKNVRZRE5WVTFNRFdaYk5DaWlNTldDT0lhb0pOK010WWVBR1BTM3JTQ1N6Z2RmSnZWMTk5ZFdOQUg1YlYxZjM2c2lSSTJkS2t2VHYvQlhKOWE4cWxVbzl2MlBIamsyVEowOCt3QUF0RzlTU0ROUlU5QTJ3bXhHSHRXekZPTWJiZkoxUVJWRmdQeURTaEZwdWJtN0dpcnpUZVp6M09RMDJJTDFEd1d6dk1DOFdjRTZocVhIRHJkQ1VxWnBhcm8wSlRUWEd2VmxQb3RyYTJyY0F2Ti9VMVBSQ2NYSHhsL2hKdlZ5ZlJMcXV2OW5RMFBETXlKRWpkNW0vUEcxQVN6cTR0SlNEUzlPWml4cS8yTE5DemV2MXd1djFJaEFJV0hzL0N3b0tMS2lOSERueXRDeGU0V0JqVkY1ZW5nRTM4MmFhb2FyZHhSbWdzK0NXU3FVb0ljUTg4TkplV05BWndHVzROd0Nwc3JLeUZ5Kzg4TUovUHZ2c3MxZm01ZVY5aVJCU3cxK3VYSVBuMGVpZTV1Ym1wNmRQbjc1ajE2NWRLcE1mWTNOcDdOdWtEV29xODB2WEFwcTVFazhVUmZhWFBYVzVYQmxRTTVldW1Icy9JNUVJU2twS3JHWEdwM3BGM3NuVVNWdVlmQ3BrMm1tbmZKejVkb0J4TEh0YTFKd3JoUUU0R0hDekduMU4yQUhRbTV1YnRlWExsemVrVXFrWExyamdnbWEzMjExQ0NNbmhMOTl6R2x5T0M1TXBwWTJ0cmEyUExWeTQ4RSt6WjgvZWYvVG9VYnNyNjNka045TExWWHJ0K1RSbWNiSFRSbllvaWtJVlJlbVhTMk9CeGk1ZHFhNnVQdVhMakxsakc0Snljbkp3L3ZubncvenR4RXdnWk9UaDJDdVJTRGlHcG94N000ZnJCVnQ0cWdGUWpmQTBCU0IxNzczM0p1Kzk5OTYvTEYyNjlJVnZmL3ZiMDBPaDBFeCtxQ1dYQWJTRzF0YldEY3VXTFh2cmw3LzhaUytURzNQS3BiRmhhQXJwNDRWVVFtQkdDeHBBK2tZRkFVcEFhUHFwU2tCQlFDbW9UZ0ZLQ1hRS2FEcUZwZ09xUnBIU2dKUUdKRldLaEFva1VrQnZpcUFuUmJEN293TUFEcHhWai8ybjJyR1prbVVaaFlXRmpxZUFESEhlMUc3Z3pCTjcyUk5DN05WVHk3MEIwTFpzMlpMNCtjOS92cmU3dS92NUN5NjRvTW5qOGVRU1FncjR5L3ZjYzJ6QllMQ3VwYVhsRDkvNzN2Y2VuejE3ZHVNLy8vblBYZ2VIMW0rbnB5Mm5waEppZ2RESXA2V2ZpNFFJRUFXUmlwSUlTVEp5YWJJTVJVbi9jbmU1M1hDN1BmQjZmZkQ1L0FnRUF3aUZ3c2pKeVVWK3BBREZ4U1VvSHpZTVZkVWpJRW55V1hrdnp2akpnK1BWeHg5L2pJYUdCalExTlZsVENoMGRIWWhHbzRqRll1anU3a1ozZHpkNmUzdVJTQ1NRVENiTlRmV0VYZXFzNnpveEwrTnhNcWNXMk1rRmlWSXFBNUNSUHJ2QXVxcXFxcFJYWG5sbGFtRmg0VFdDSUZ6TVgvWm52NUxKNVBZMzNuampoYTk4NVN2dk56VTFtU05OckVPekZ3Z3lISm94MDh5TVFoSHpseWhsSzU1bW9Zd3RFR1FyRXBqdEhHYjRXVlpXaHFxcUtsUldWcDdWOStLc1czSlNXVmtKajhkakRzZWJlWWVoRkJpb1VVMGxxcXBhNGFuWjkyYTZOU004MVFjSVQ1TUFsSWFHQnFXa3BPUUZBTnYyN3QwN29iS3ljcm9zeTUvbkwvK3pUNGxFNG0rN2QrOStkY0tFQ1kwTXpOaXdNK2tBTlJaMnFnRTFxOXBwZ0kyYXhRSGp1VW1aNTY0Rk5ET254aFlKL0g1L1JrNnR1TGpZeXFtZFRVV0Njd1pzQUZCWVdBaXYxMnNCenUxMmczMFMyT0hXMjl0ckFTNlpUR2JMdlZGS0tXSFBlRFBQZDJPZW1DbkR3Vm1BQTZDTUdqWHFkUUR2dlBEQ0MwOU1talRwVXIvZmZ3MXd3bzk1NXpxMVlXZFRMQlo3N3NVWFgzejdpMS84NHRFc1FIT0NtdW5PckdGMUk0K20yNnVkQnRSZ1Zqek41NnVUU3pPaFppOFVtTzBjWnVOdElCQTRKKzdQV1JlSzJuTWVlL2Z1eGI1OSszRG8wQ0cwdExTZ3ZiM2RHcUNQeCtQV0FMMFptaHBEOUVnbWsxQlYxWFJ2R2VHcHNYaEdvSlFTdzhHWjRhbDVzU0VxRzZyS0FKUWJicmpCdlh6NThza0ZCUVdYUzVMRVQvSDlGRWxWMVJjUEhEanc2dTIzMzc3cnFhZWVTZzBSYUNrNzBBQzJLSkFCTTkyY2QyYkRUdGFseWJJTXRwWERQa2tRRG9lUm01dUx3c0xDakhZTzhtbWRqK0pnYzFaVFV4TSsvdmhqTkRVMW9hV2xCVzF0YlFQbTNjemNXeXFWZ25sS0NBTTRZcXdNSk93MUFPQ2tMSUNUQWNpYk4yOHV2K2lpaXlZSEFvSHB2Qi91alAwRnVhZXpzL09sYmR1MnZmdkZMMzZ4alFHU0U5QlNXWUNtMm9GbUhueHFocHQybDhZQ3pleFBNMTNhUVBtMHZMdzhGQllXb3F5c0RKV1ZsU2dyTy9lQ2czTUNiQURRMmRtWlVWUm9iVzFGUjBjSGpoMDdobGdzWmgxLzFOdmI2MVJZZ0FFMllybzNGbkJNZ1lFRkhGdGtFQTBIWjRkY3h2WGVlKy9WVkZkWFgrenhlQzRIVU1LUmNscGhkcWk3dS91bHVycTZIWk1tVGRxUHZpcjRZRUN6NTg1WVYyY1BPYWw1SUFPVDQyVmRHanZyNlJoNnNrMjM3TXluV1NTdzk5UnhzSjJGMGpRTjlmWDEyTDkvUDVxYm05SGEyb3EydGpZY08zYk1PdHV0cTZ2TE90dXR0N2MzQTI0TzdzME1UODB6M3dZQzNGQWdaMzVNMnIxNzk3aUtpb3FMM0c3M1pSeHlwdzVtUFQwOTJ6NzY2S04zeDQ4ZjMyZ0xGNTJBcGc0Ulp2MkFCbXNQQnlnUkNCUlo3aGQyc2k3TkxCQzRYQzVyM3RQbjh5RVlEQ0lVQ2lFdkx3K1JTTVRLcDFWWFYwTVV4WFAyWHA1VFlEUFYzTnlNZmZ2MjRlREJnemh5NUVoR2FCcVB4eTI0c1lkWHNuQmpBY2NVRndZQ0hESEFKamlFcVpJTmFyTHRZOUxPblR0SFYxVlZUZkI2dlJjVFFzWnlCSjA0NmJwZTE5WFY5ZHFlUFh2cUxycm9JdGFaNlF5WUJnS2F5Z0JOcFpTcVJxWGM2bkUwTjZXeFFETXJuYnF1VTBFUTRYYTcrZ0hOSG5wNlBKNStRK3htNkZsUVVJRFMwbEpVVkZTZ3VKaHZsandud1FZQTNkM2RhR3hzek9oM2EyOXZ4N0ZqeHhDUHh4R1B4eTI0T1lXbVdjSlRDM0FPT1RqQ09MaU1YQndET0NmUVpmemR4bzBiaXkrODhNTGFjRGc4UVpibGkyRnR4dUFhb282bFVxblgydHJhZHY3em4vK3NuekZqUnBzQklIMEFkK1lFTmZhRWpYN0ZBTWFoV2Jrek5vZG1GZ1kwVFljb2l2RDV2T3p3ZXIvUTA0U2EzKy92MThwaGhwN0RodytIMSt2bGQvaGNCcHVwQXdjTzRNQ0JBemgwNkJCYVcxc0hySnF5b2FrdDl6WVk0TUFXR1d5UU01MmNHYWFLZHBnNUFRNkFPSDc4ZVBtUlJ4NnBxcXFxR3UzMys4K1hKT2t6QVB6OGFaMmh1S3FxYjBXajBmZjM3dDNiOEkxdmZLT3BycTZ1MytTSUxYVE1CalFXWnV6L285dUFaamswNDRJZGFHYllxYW9hRlNVSkFiOHZBMmhzYjFxMnFxYzV4RjVlWG43V25NckJ3WFlDRll2RnJOQ1VyWnFhN3MxcHIwSVc5NVlCT0YzWDdWVlVaQWxUN1pBelExVXJMK2NBTnNuMmQySkZSWVc0WnMyYVlTTkhqcXdLaFVLalpWaytqeEF5NGh6TGszMlVUQ1kvNk9qbytHajM3dDM3dnZhMXI3VTBOVFhwTmxmbTVNNnl1VFRyNzh4bWJOdm55SUNaemFHQnJYS2F4Mm14aFlGa1NvVWtTUWlIZ2hrdXpRdzk3UTIzYk5YVEREM1BsZDQwRHJaL3diMnhWVlBUdmNWaXNhdzlidzY1Tnd0d3Buc3pJV2NQVXhuQU9ZV3E5bkJWdEFITzZYM1JmdjNpRjcvd1gzSEZGU1dscGFYRC9INy9jRm1XUndpQ01CcldLdDVQclJLNnJ1OUpKcFAxc1ZoczMvNzkrdzgrOTl4ekxYZmRkVmVQQ1poQllKWU5haG52TTg0c0k4eGtRMDNZNW9tWncwMklwUWlYQUFBR0dVbEVRVlF0bURFdWpUS050a2drVTVBa0dYbTU0YXk5YVlGQUlNT2xtYUVuZDJrY2JFTldWMWNYOXUvZmJ6WDAybnZlc2hVV3NnRk8wN1RCQUdkM2NTYmdpQVBrQkFmSURmYSs2T0FHaGZYcjErZlgxTlJFOHZQekMvMStmNGtzeThXaUtKWVJRc294NkVydlU2WmVTdWtCVGRNT0pwUEo1bmc4M256a3lKSFd1cnE2dGk5Lytjc2RZQTRtR0FSbTJSeWE0L3YyNUQ4TE0vUXRBS0pzTWNCMFp3QWdTVkkvb0xGOWFXeHhvS2MzbVQ3RW9TQy9YNEhBcVRldHBLUUV3NFlOZzgvbjR5OVdEcmJqMStIRGgvc1ZGdXp1emQ3VWEwNHNPTGczcS9lTkJaeW1hU2JZd1BUQ3djSEYyU0ZuQVlxQjNHQ1hZSHRmc0wxdjVmOSsvZXRmKzhlTkd4Y3NLaW9LaGtLaG9OZnJEU3FLRXBRa0tTaUtZbEFRQkQ4aHhFOEk4UkZDUEFZSXpRTUF6TThKQmd6VzJqaEthUStsdEl0U0d0ZDFQYTVwV2t4VjFXZ2lrWWgyZDNmSE9qczdvODNOemJHZE8zZkdGeXhZME0zQWk5cEFSZ2VBbVc1eldOcGdsLzI4dld3d1kwRm11ak5tU3hvRkFFVlJMSmpaV2pneWlnT3lMS083SndsRlVWQlNYR0ExMjlwZEdsc2dLQ29xNGk5T0RyWi9UYWxVeWlvc0hEbHl4TnBuT3RTbTNxRUN6dWJpV0FjM0VPUWNZY2RNUHdnRFFFMTBBSnY5WXIvT1FCY2MzdHJmejBpRE9ielB2aDNvc29QTWZtVnphZjNlTjQ5K2Q0TFlZREF6MzdmdDFJQW9pcUNVd3VWeVpRV2F2ZUlaNytxRnkrVkN4YkRTakdiYmNEaU0vUHg4RkJRVVdBVUNXWmI1aTVLRDdjVHAyTEZqT0hqd1lML2MyMUQ2M295WlUzdDRtaEdtR3U3Tmdwd3h6V0NGcXN4OXN1ZmtpQU9Fc3NGT3lBSXpjUWhnWXdFbk9FQnRJTUFOQkRjNzBPQUFzWUVjbXA3RnJka1QrNE5DakNrQVVGdVlhY0xNS2dRd0ZjNk1IUnVpS0ZKS0tkeHVkd2JRSkVteUhKcTlPQkNOZGNQdDhXRFVpT0g5S3A1RlJVVW9MUzFGS01RN2VqallUcUphV2xveTNCczdralZRYTBnMjk4YTJoNWpWVTV1TEF6TjBiN28zZTA0T0RvNXVVT0RacXJGT1FCc0lic2ZqM0k0SGJNY1Rkam9DanFsT1pnVVlBeThXbm1Celp1YWYyVENUWFE3RUFJMnl1VFJLS2J4ZWIxYVhabS9oNkl4MndldjE0Znp6YXF4ejAweVhkaTRjTDhUQmRnYnB3SUVEbG50ektpN1lxNmRPclNHcFZNcHliamJBUWRkMTRnQTQxc25CRnFyYTNaejl6M1lvWlhWaUR1RXVHUVJzMlZ5YlBTU2xBOEJ0SU1EcFRuOW1vRFNRczdQL1B4bGZpLzJ6TGRTRTNablpnRVp0bFU3cmJEOWQxK0h6K1Fac3RHVm5QTnM2WWdnRWdwZ3lhYUxsMG5pMWs0UHR0Q21aVE9MUW9VUDlpZ3RzZURwWS9tMEE5ellnNU14aUErUGs3RzRPV1J5ZEhVUk8xNkRPakEySFQwYU96YlpVaHc0UmVQWUx0aVBkWVFlWjNaV1p6b3pKbjJXRm1SMXFKdGcwVFVNd0dCeHdhSjF0dEcwNWVnemhjQTZ1dVB3U2xKU1VRRkVVL3VMaVlEdjk2dW5wNlJlZXN0WFRvYlNIMk9GbW0yQndta2UxUTQ1dEhZRkRYZzQyS01IQjJXRUFKemJVZkpvVHpMSTV0cUVXRXV5QXd3QUFneDFjOWp3Wmt5K0RMVzltMzBPYkFUTzJmWU5kMUczUHBXbWFobkE0bkhXKzA2eDJtbUhud2NQdHlJOFU0TEpMK0lyYUV5bUpQd1QvbWp3ZUQ2cXJxMUZVVklURGh3OW5ETld6K1RjVGNIWUhOMUQxMUFGd2xNbkRFUnZncUExMDVrVk5vRkZLemNNRzJWOW9nNExLQ1lZRHdHeW9weG5Tb1VMT1lTMGliQ0VsKzI4ejNtZWNtU1BJSElCRzdVdTNCd01hZTJtYWhweWNuSDViMTltamhjeWg5YUtpSWtDcTV5OGlEcll6Vno2ZkQ5WFYxU2d1THU2WGYyUGJRK3lBczgrZVpta1BjUXBScVFrMVRkT3MvSnNUNkV6QU1hN09oRjAvMTg1QWJEQm9aUVBZSndWYlZzQXhKNy8yMGJnUGRyQTVzZ3lJMmNMTWZpQXpONmpiUTgvQndrNTdEczI4VkZWRmZuNitkYXlRSFdobUhvMFBxM093ZmFyazlYcFJWVldGa3BJU0svL1cxdGFXMGYvbVZFRTlIZ2RuQzA4ejNCeWJnM053Y0hiWW1YQmozMlpBai8yN1U1SENZQjJYN1dQOTRHVjc2d2d4QjZCbDVOQllxTm5EenNFY21qMkg1bmE3a1VxbFVGSlNrdEdQbHBlWFp6WFp1dDF1L2lMaFlQdjB5dTEyVzhjeXN3VUd0b0xLQXU1NGNuQU83czJwVGNRT3VuNEZCOVBaMlFISC9Ka3lSUW5XMWZXam1oUDhodUxVbk03aFp6L0dnc3ZteHV6dUxBTm1iSXRHbHZ5Wlk3ZzVWSWRtejZHWlV3T3BWQXFWbFpYSXljbkptQnFRSlA1U081WDYvd0hGMUZuWjhqMWl4d0FBQUFCSlJVNUVya0pnZ2c9PSJdLFsxLCJkZXNjcmlwdGlvbiJdLFsic3JjIiwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFUWUFBQUUyQ0FZQUFBRHJ2TDZwQUFCTUMzcFVXSFJTWVhjZ2NISnZabWxzWlNCMGVYQmxJR1Y0YVdZQUFIamFyZjFadGlXNWxXVUwva3Nyb2draXFBUm9EaW9aNC9VZ201OXo0aWlOUnRJOUl2eGxtbElMM251dUZNQXUxdG9WcnYzLytYKys2My85ci8vMXZLbWtLK1czbGxiS3pYK3BwUlk2LzZqMzc3OTIvbnp1ZFA0OC84WHk1MS9QdjM3OSt1c2JnYitqbi94OTQrMi92NS9PMS9NL2YrQWY5M2pHdjM3OXFuKytFK3FmQy8zNUJoZitQWUYzOXQvcjd3L0oxOFB2NjAvNmM2RzJmLzhvcmI1L2Y5VHg1MEx6endmUG8vejVuZjU2ck45Zi92L3JYNzd3c2tvcmM2TVl3bzVQdk0rZjZmY0U4ZmU3OC9zOWZ3WSs5L0MxSG1Nc0YzODk4ZjF6TVJia1gxN3ZIMy9mOTk4WDZGOFcrUi8vdXY1OTlmLzYxNzh0ZnVoL3ZoNy9iUzNMbnpXNnkzLzlqU2YvMjlmalg3Y0oveUlPZnoxUitOZHYzQ0hGLzNpZFA3Ky9iOVh2MjcrMzYwaGhTK1dQUkozRmZ2NXhHVDQ0V1BKNGZxenc2K1YzNXQvditkWDRWZTkrVDdaODNmTWUvSnBQZXdLNzhsMVBldGJUbisvWjUrLzVUQjR4aFIxZS9nNWhobmkrVnVNYldwalJmVXIrZXI3d3hoWlhyT3piRFB0aTYxSU1mejNMYys3Ynp2M21VN256ZXZob2VMaVlXLzNmL3JyK2Q5LzhuL3k2dm0rNlJNOWQvMW9ybmlzbzF6eUdPK2VmZklvTmViNC8rNWJQQXYvajE1L3R2LzhtUDRncU81alBNbGRlc04vamQ0bVJuMy9LVmp6N0hQbGM1dStmQ2ozWHUvNWNnQ1hpM3BtSGVTSTdjSmNuNXFjODl4dkMrenlzWTJXRE9rOGVZZ3FESFhoeURvdUhSRjVpQ2RjYmF2RGUvTXo3bk0rR0hFcnd5OWdtTmlMSGdtNVZkcWl6V1NsbDVPZE5GUm5xT2VhVWN5NzV6ZlhLTGZjU1N5cTVsUElXalZ4LzQ1dmUvSmIzZmV2YjNsNWpUVFhYVXQ5YWE2dTloUmF4Z2JtVjlyYmFXdXM5WEowYmRhN1YrWHpuS3lPTU9OTElvNHgzMU5GR240alBURFBQTXQ5Wlo1dDloUlVYWm1LVjlhNjYydXI3dVRhV1lxZWRkOW52cnJ2dC9pRnJYL3pTbDcveXZWLzkydGYvMnJVL3Uvb2Z2LzRIdS9iODJiVndkc3JQdlgvdEdsKzkzdmNmbDNnMEo5azlZOGRDZXRqeDF4MUFvSU43ZHRjbnBlRE91V2QzQ3loRkRqeGtkbSt1OWJoamJHSGFUOGpmODlmZS9YUG4vcS8yN2NyMS8ycmZ3djlwNXk2Mzd2OGZPM2V4ZGYrNWIvL0ZyaTM5M0R3Nzl0TkMxL1NPYUIrZjZhRmUvTDV2L3ZqcmJ4NnA3cDdMNkhuMWtXZGVxYU1pOTc3ZkY0ZnljTm1aWW45M3YxTllPNlV2aHBUZUs5YlFhOFpPNWErTnNkNTdiTmM4c0Radit1cFQ4RnJQZHFuaXpwVTFybjIrYlkvNjFMN2pPOHZIaDNkdVY0bTR5QkV3WllWbHIyRnpFNHhmLzdob1N5ekJ5Ty9xZmMzMDNqUHcxbndYYnh2WTBkeGEvWW8rT283N1lzTy9Pbm1aK0w1ZnFXekQyaG1mSHNZSXZleU1Sd1FJUEx4bG5hT3R0Tk5ZTGZPY3VZWE1wbjdJRXdKVXI0RVJYcFhuQ3FuMVBWL2V1ZWIxZm04cjlldTFqUFkrWDBFb0lxKzVXMThkTzlNeisvSHVaM0NoTjIwOHdYczk3QjR1b3ZZdjU0OHYxUHlsOGQxblQvSGdkY2U2MlUvMnJxZUVvSTVVU3docnR2ZkZ3MVJXWkIzZHVjbzdubDE0elZsSGlqek5ZQWsvMUFJZHdINDlwYWtNbjFMNTdmemwrWlhKbzhWbnQ3ejJxdStlSDF0Y1VKRjVmMzN0d2Q1K01kWTc5ekJTdXRtZDk1bDF6YVVYV3QvZGVjYjhEbDV2ZlVoUFdPTmIrL2xtcnl1OSs3dDRpcXg0N1BjcDczZHZmTUhMejh4UjJteFl5UGQ5NHNhdnpwQnY5Z3VkRDNmSmRhUHJHNmYyN0luRVBTdGNJMDFla2o4aXQrbys5aGZualpjYjNyT2xYZGt5ZGk2dSs5c2pvVm85OFlnN3NJTVlsekpDclNHeC9ST1JhQ24wdlZXbnVUN1dsbHVQK2IwbzNVNEZ1WWozN3JQaWRYZGdDOUM1d2M2OUxoMVh3L1lnRi9uQ1BvVGt4U3BxRm5meC9kdHV3Yi9YTjgvL2YzcGhzNTZuWlRTNzNURTJmWGdZYjNpLzJIZGVJNjFyTEY0bTNQVkxyR0ZpRHpzT0tiY1JlL3RRY09CdVcyTmdtQ2Jid2Y4d1ZteFRiL0Vib1dDcGtLblUzdHd2Zk5OQ013YzdIVkpCcWdlR0I3QUFzcHZJRnpadWJZVGpyZXZMQTJVWmUvS1lOeS9sRFNKcjIrWm10NitOVGoxekZVeGJRMWI3eWx2ZGY3Rkk5K0JSRUtHMVFJeHo4ckUzSEQwc1dJK2V4aHorYnF2MDlhQzAyaWJjNTQ1ZUxjekdNOTJycHJLUnI0YXRpYngxZjduTGcwenNqcWxhcTdRV01GQXBsZHJ2dkxnT3lMOWl4UFljRHlZWlJOWEJWeEdiSWk1ZTZkdFAvbGhXVmd2SlNia2lNYTN4a2JYcUxPbDdFTlFYRlUxeFFpRSszalJyVEJIVittSXdzQVgrTDhUQjVzNCtaOFFmb0x4M1RoZ2w5QmdsMzl3OUxwVDNld0Y2b1E5c2RydmRZdlFUK01YYjgrK1krMTJ3emJIM3Q5NWpZaGZpM2RvM0s0dkNVOTI1WVUxNGhUbEIvckVzbHZ2Q3pNWE5qc3hjbnBSN1RSanE4S1EzSUlNZExxQ0h1d3VMZ3lmSWc0MGFoZWNjdXdGV3h1eGxsWVNIQUVUVW1QSjRja1RVSjJwWHNPOFQzTHJiZk4rdU1MSDNyT1BEc2lEc3ZQbHVHQTNXMFYzRXA3RWsvVVl2THBhNXBNRExEMjFMNHNWUUlDNTJmLzU0WGl4ZndnRU5SR1cvMk4rTVNxTDBmSzQyYm82d2g4MEY5dFc0WTR0NXJyY08xQnpuc0hCeXVES0VEdS9WMGZmWTU1MUtLTS9IdjJ2NVVGOU1PVDh4UDl4RjNEdmp4YUZaRzV1WEU1L0FBS1krc0U2OGJ1VXZURDVlQXVGOGU2cWozQk9GQm1VRE5qRnhlWHdGYlVZaU16N2p3V1d2aFJ0cFhoOW5tOTdhZW1aVjBRaFdGdkhINm1LR2ZlZkJNeU5ocjVMeGZJTW5hL1Y0M3ZXMVdhOUhDeUt3NXhuUkZzeDVMd0ZCd0k2Ni9BOCtHeWVSdElqTlZlVGJCYkRQVzdEUzdGaFQwbDRacEZ1TVVRTktZSGtqdHBSWHkxaFJWaWEvNkQrQ1dWckdrQ00rK0dGMHJRcW52N2xiU1lEUmtqdk9aVnpTZ3c5RzhJWVJac1VBeVZYQzl1SWRtVUpsa0o1VVBrREtoaXYwZ1lnakgwWFA5V0hNY1loTGEzMDlxT1VScFhYano5YUgycmR2K1lIN1F4S2hFQVVRa0dDbUxDYnl4WThoQTdtaU5COHJ6UjgzOXZZdDExc25GMGNKVndlODdiZXlJd3JkTXhZdTgxYmVzTjVUd0lBdmpCcTJyMmM4MkF4NHh3OVIrZmIrOENLOEsrZ0E0SUlSd29oajhZQmxqMjZkN1d2N2d4ME5FTTlDS0VGQktDNkM4RzBXUDdKNkg3NEJ4OUFSaHV2R0NvUjNERnowRER6ajNXTlJGVmtzU0FLUDJwQ0QyWW9jV0JQelljQUJPRHdTOThhVllranc3UkhqdjNqWmpkRkp3Q1ZZSVRkYWVPMWo5TWVHWlAzOUp4ckt6YnAvNzVHZmtBdTdnWVpYRFBlRjdlVWlEU2d4cEVUbFJWdEJGRzk5WE5WYnhlZEdQQ3U3RVNhZVQwY0xhdnhhamdwT3hnMWkwRjhBT3lZVUJYdWZVUEFLZUErMGxnc0F5OUJaeEhoL2d4WExHS0Rlbm5leStxazhENWduZ1RoNUlsWlFnM2E5RS9QTE9wWlBVK2xLN2FjQ0gwWmw2M3NyZWJUMEZxQVcwb2lmSGpqeStRRFlwakdDcXJpaTNUd1hRR3ZQOXVFQUZld0Y2c0dsY0dIVUZDZVBpUk01Z3Qyd1QwL0hGVWo5VURwc1ZQdHV0dkVEZk1PTm5uSTFuQVlxZzNIWkJiREY1b0Fmc1ZxWmpYM0FPTTEzNTJZVmc4NC84WDJRWGN3bC9qR093aWJqYVJIQWRDSHRTRmxjUVVNT21uL1RnaUVDVnNRNG9VQXFjb0JLbEl4anVKVnRkQWlaUDhnRE5BRXVMMkhnbGE1Ym1JTm9LWk1ReDNHV0hoZFhnYVlvOVlPdkJnSytHR04rUEpTV2xueVMxd3NaZ2NYL0ljWjNuZW1hRlRPMVZlOG13Y2REeC91TjBGWFdUY1NSMFV6RUhTL09Wb05YY3BoekF3cnhpWUhMM0N3N05xaVZLN0lIV0xnRy9BTTdJNzFvT1N2MXZLN3lnNTZIaGcvRCtBWXdOZ1FQdVBzaGVlS3Rtcms1cXBVZ1RQdnE2QlF3SVJlY1dBSXpJQWdvUHE4Rk9ZWWFKWWdIZDBIeUoyQ1ZIWi9JRlpqMXczTnZ2QUhmT1Z4K1hWaW14OGpKQ3lYNXg5ZVB2eTUxUFRLRzlmc0FGdVR2SDVuSHB2M3RKNi8vOXovNnJ6OTVuUi9kbytTN1lneDdhdGllQ0pxY1kySk9ZU21JNklQUmhaYUM5TERmQ0duTEVJQ1hIU3Fpa2QvYlh2TklLOWJoeGUyLzgrQUFkTFQrWXlWKzM0QkYrQzJWOTBBWlRORE56YUthenkzblRoY0NPUEZ5b0wrQUhtRnRYaUFyNm9PNkh1VEhQa0prOGdzZDJGMkhrekh1N0tDNEhVQlgvZlBETTErTDdVRzczeFVFZGcvTUFNVU9NczhjdlRXa1plRG1jVzk0dXcrdkpFNkxnTVEzZGpqMERSQWZSam91Y0hEQkdXT0JzWnNOZ2NHQWh4ZTRDS1ptS2JnbmRtMEFjZ0diUEdwTWNXZ1RFcWgxcEx1QmFoTnkzT04xYnk0RnFjR1BiUlpub0Myc0JPYVBqd1RKSUs0K1JGd1lWb2xIR2JBanJMRFJUNGhqYjN1UHZkYW8zMlhvQ3VBcW9GTFAwU3pVRFo0Y1dCQVlOWnRiRW1hdnMvME5HWjA0cHBtZk1NU243RFBVRzJOMGYvbXFjR3VBSmRDZ3ZrcEppaG4zQlB2NEtwNDVENXgrcnR4emRoRllTVktNaENHYSttN3Mwb0kyTDY1OVRUUVNTbGpmSVRwaWpYQ1djVHpwRzlEL1BsZzFlUDZIek1DU3gxZnhkanNISEJaaTFXU1JEMjYrclBGZzJManpCK3dBamVCRElBanZtNTk4S0FSK0FsU0dDUFhDWXQwaS9UZE05TDY5QVY1UVJTSnc2d1JrWHhlcUhmUlVCYnVCdEgxZis0UEhBTzl4WTVqYUVWaGdJZFlzd25nL1hOUDg4RHZvaUJ5eEF0VFp6eXRqL1Jxd0g2eitwTUJ0NWVMbmgxR0tHL3pBNCtYSTNtTjdlQzNlbjMxbmxaOE1Gb3BBOFk0RkRlMEZzYkVmUUUyZUExb0IyVUtxTm9SaXB3UjVZVWVDekF1VThvQ2NNSjZZeEFnOXd0bWh1Q3pYRGVTU29sekZYY2ZEQVhSMW5CbW1KYm8zcGlnd0xlZ2ZzQUdVenU0ME9JQXNtcC9sSGJZdWFjSjlNV1BodVg3OHJPTHRvSmE3djJ3VG9wQjVkNVQxWmxWdVREdTIxVEFHREI2ekNaaUxPTUNobjAyOFhrcW83cnc2SUJ0RWhrNFViUytPQ0hqVFdVejhDWTVCem9Ub1llamhNeDFFQ0JPRlRraTIyTTRIYUFYa2ZEUnNDVDNvN3g0c1BSc3k4S3FHSDlDV0RQRERjMkVuQk1NM2tPY2IyQUJzVHhBbmVqMGVMMkRNV2IzeVhtVWplOXNjQXpDczMreFN5ZTlCaDIvR3Y3RkVPTlpWV1JMamJzOExUT2tiRzdMd2RMT0FqaHJFbW5XL1FOWllpaUJaS3ZuQmlSbzFBYWJBMk8rV0gzWHpoTUxFdkRqWXdyTzNGY01xQUZ4NENlanZaUTN2Y3EzcUhtU2xjSFRNUm9YaUpMNElCSTJTWXZBTnNHM2hqWWFTQXR5SWlnV2k5T29IMVFud3o0MktIQ1lQbU1KVThTQnJ2U0I2bEIvaDRMNmJWY0tKWWM0Q0NpMFpHNVdOQmNITlc3Vzkzd0VoaEc3c0M0SUw5a0hVd2RmNS9NdWRnK096WXBDcWdJMUdZUGtTV05lUTR0d3ZPQmVibnNFdWhpUlFYQVM4WDRDWWdGL0FDNWFOUE9DS3RWdFRtTUR5dWV5b1RsOEdDbUtvYnc0cWNwZTJzbTRMRVF5VkZ3UDZzVGdZRFVRTXRVUmN1VGV5RVJxTUhNd0dhaENsVkd3OEhrcXZpejFselpDTXpUYm1nVEhSaE9QYnI1TTZBYUF2c1JXd0JtejVIU2dkY0NEZjIzSHVyQ0c2L0FFT2NKT2Y0ZllYSEtrQ0FYNDJjdUsvVFVKcEVNYnhaNE5iSWZwWWZvQldRTDVxeU8rRUxYVzhEbDRJSzQyZGwra0JHUGs4SkFLV2lWSzl6NVZnK1RqYXR1N2RxNnJBTnFJRHJHTElJampNYnJtQkt3TmV0OW5ISlAyR29mN2pTZjd4SU5lZkowRVArckdLQm4wRTFYeUszVUZJdjd4T2ZKZTFoZzBYU0RQWUM4VmlkZUpkTko2M0R2M0tNRmRNcnM1QUV0MVFiWDZnMUlKQVk3WmhjNGpBZzZiZmZjbFp2dkxuMW5qeDlQM3o5dGZmN3g4L3dLMW9BeUxLQXAwRjdTdmowZ0c2Qmxta1FjM29tTkUvQmJQSDUydVl0Tnd2VEZxU2loYklmeE5BZzhGYmRERmxzQzhNRFBuK2pPZ202YUN4SUpnanRwVXROY1I5Rm4yMGNDVThVT0N4ZkRmTU5xQVYvd2FpRHMrSVFPSUFqMVJtY2FiNU9TTHpZc1doVk1PYzROL0NHcGR4amRZYm5nSGZjb1JnSEpBbHNQMER0LzV0Zi83cjdibisyaDh0L3dDQjRDenlnLytGMytCWkY2UUhHd2JzeUxWZ09sSTRVY1VicExEbjBVOGo2U2pMdGJDUWErYktDMHpEQmdIbFlkTWIyc2MyYnJ4VWxGc2NvTDZtaUF0K05uQjc2QUFQeHhhRFRGaFlMT1MrSHlEOTB6b3ZLTTNMRTNzNDBFeU1iTkRIdzBsNTZnZUs2MTdpWTkvenFvL3g4cjM3VDFtdXU1UTc3cXJGRXhndnZQdEVHeUcxa3E0VEU0T1h5UnJZdXhPZFRudUFPejVzekY1VjVvOENsSHBOSENIS1hUTHdwd0NURUlRM3duTkJxQkFVS0hkZlQzQnRCMTZONi9POVZRV3VmQ0x5VE93cnVyazBJNGp5UFdEQUtCUm1tTFhwRVNLTW0wd1JVSUhsdUNWYXNtRGVIeXVFMVFVbFNZQ2VWZUhLRzNmMGpBdUVOd3dhR04xSFpoZHFKTlY4eDJkOEdCUU1iT25Rd2hoaVVka05XQS9qOEs5QmxLWHhiNnVFZFNITk1HbURuRHdqa2cxZGdLYU9iMlljN2FOWjZCV3lnS3hsS01xZTBxR3lzWlBHcGtQU25pSlZJMTFHemxwbmxYNTdXeHRPUUFnSHFtaFFkN09yckNFL3paZWtweGhoUStuaXVzREZjWlRnSy9qS1ZSc1cyRFQzL2FwTG9yeHZGMFhZVEFSTXNxT0NPSXFWMnNid3N6TkEwNjVTM0ZCbHZEclBpbndZUUtoNGlucmpiaXJVcU9ua2hpUUtSSSszaVJNVUE3UDdNc3VDZ1kzekI3d2dlUkdva21ZQThFTW82aFZFUWhEdWxjRlArMkExNE92M2JpUWFVaXdJM3puaTh5Rm5IMXF3OGJudkI1VGhKaCtXSEpOVDhKaFR4SmJCSCtyc1BPcTRqUzBYVmcyOE9TZTBjK0FqakFGRFFuR3ZZR040eHNkRmNlR1l6RlpyaWREUUMxNzhMcGRkMGEwNERmZ1JxMmlBazRWUE9HV2VGdyt3WWg5cjUyV0F3NDFQT3JPR0VKaW94dDVmNEp4dDNDRTBicmhrTDNsVTBFMHlBWUFUTytJWFBud3NXbmlYYjZQYUtUem9mdFhuelRkV2dOS2FWOTI0YjFEWWwydENzY0RNQ084TjhYMWdOaXR4dTdxQk94RHUvRDdnSDVNbmNEVXcyTTF0QUF0RDNXbnhNalEwWmNjUTZvQ3R3RHdsdFJpU2dHRCtJM1Jmc1UxUGh0aSswRWgwYmpYRVJ3ZVFWb3NnalNkZkFTMXlZVGRlZUVpbTk2dDEyNWlDRERLK083Z1Vmd3J2aTBhMFFMSWJDM2hYY3pHRkpmcCswUDdrUlpCZ28vT1BJZTBuSmFBekFzVStCaDB5MGczTzNkS0NSemRsNG43TTlRQkpjVk8vbkJKTG5LOGhHRExrZ1JGcGlCdmFiakR4UkkrQkpWSllFRll2RXBrUVVTSGVENUhGdGNNenRMcFFYNlNxWHhpVWtSQUVWZ0YvTnZQaHIxdG5BTGlJUXJXRkhHSjNzUmNMODhicnc5SVN1QWlmZVpzNGVCYVVhRis2U3p3SDJ3U0hob2EycDBZQVBDSnlnMC95RVhiSUw2enc0NEZmU0NBZlFHSzViMGJ1UWY1Z1JSelpCWHBjYnlxRGI0MEoveDc4UmpXNWhLSG5BcW9FUnhqL3VMR3p3TWNuTCtINC9WdmlweHFnV3l3NCtLaWF0OWVjaVhNTnYyaDBxa2JKYndCeG50dWcyOTExeVlhbDBINVkybTV4UFhsR0pRSGx1TVNNWUtLTjBVUldPaEJxcGkrRWJuWE4xcDFydCthU0dneUpBUGlVWmNOaGNTK01jWWpCakVvR1JGU3daUDhQNFJQbi8yM2RNQWg4TUdPckkvQWhvb1daLzk3WGVQYWRKMCtLOFc4bXBkQ3hKZG15eENlYkpHV2ZEVEZoRmZjRzYwTVBCQ2IvZmpzRThzY0Q0NlU0eG4vZS9jRlRZQ25yTUkya1NKdHJTeWNxQWorQmRNU1RoR0xYYTgreFIvTityWWZ4WHArRkxiVmpQMUhSMjlnMVJPTUYvSmYrejl1ZHUwMkRBRnQ0T3V1QkVEd1EzblBodXdCUEY4SmZFM2dmNElRNXg4c1VBd0o0RDN3cWZ0TjBYNnlZaDErdUQ3TVprczh3Ti9LQlFnQlZ4dERXWFB6YlQ2WXZZaWkzQWZ6dlpBbDkxN01nZnkwSCtKZ0hpVGR3UE9DQ3NXMjQxbFp4MVhEaysyS0h4ejNodXJqenJhaUJOYld2a28xK3RoNDhoZGxyLzRlYlhQKzRTejRTQVVqbTNZRUdhTFVMRDhaRDRUQ1l1THNPVDhubjhWL0EvTXQyQUE3bXlmTGhmQzdnYlJ6WTU0eHZlajRVR292c21zNlRqZjNYQi9qYnR2L0xlOFlhUVA0c0RSd0RJd0Zpd29Wa1RmR0o2V0F5Rzl1Q0RVSFpRWmRHa2JxazVlKzdoL1hDK3ZTeEwwZzZXb2xVeXRBTk9PS1hJMllWTVpic2pDZEM1TkZGN0RHODUzMkJ2K0E1SktkWDVDL3F2a3p4S1pENGJ6WUFJaVNNemxXYU5xdUd6amlDRkJGWUJyb3FYOUVHaFpueFJEanc5eTlRV2lhUThTckN1ZkVIbXFPVkU0cUxQOFVsUTVBYjJnUVZLQytXYlV2L2JwT0Z6MUdDWm1Ka1A5aFJkSGMrMTVCY0dNcUJ3dHp4WHVqbU1NOEsxb1RObWh6QmhKWjNjOUc4endhQVJUNHp0WkFoUDMxalBMQW9sejV2bU9tWStJTjlJaERjajJYR3g2ZjY0VzR4bFNiSndDYU5ad1E1cmNMeXN1S3NuUVZsR2FUUjkyWEFjbjBtYmtydlhBVm5oSWlNZW1kWkZUdUM2WjlvMEsvS1pmTHEyMWdZUGphelFkVTh2a1lTdXI0VHhpUHdYaWJSWCtPZDRQUnBUZGtUUGpOVThvcmVzWlhiSUJ2ODMyalpTUVVhNkNycmFld1BxTFlCOGg4MGZ4ZzlqLzBCRUxHemNuMWNTR2RqSnFaa2pDUFNWVUloaURBU3pjcnZZT1k0aHE4SHZFZzc5WWx3dTBNbFByamxoTHNWVEdRR3BVV3I2ZmdaWkMwcktWUEpSNlp3YTl6K1M1Z1NydjJZemxBNFRUVkhscDFWZ1N4Ymh2Q0xhWUg3dTVVajNEc05nQjU3MkxEeUw4eFJQd2hnQnRVQ0xaNTlSZUFsWkNHRHhPUjRvdDIzSVhsSlpJaHZMU3ZEcTFxWTZRU24yRXlBQyt5RE5UUytYdlBKNUQybTZSdDBMQlhUR2NhbzhTMWNURXR1dllOMFZTeXMrY1BIckVPVllJTmdqdlFrQkozNzQyMnhrZGZ6bUhTb2t4M0FXSXhqVzhQUCs4S2p1T01iNElNTGhJQ0lBSEJSYU1UcnRXZ21mZ0F6QUFudkhQY0ZSdkJicUpOcXcrc2hqTE4zSkI4b0JsK3RlTFp2UWVHV2dZNzhHTEpTLy8rNjQ3bWZ5VXo5MHhEaW95VG9kY1R4NExBZy9qSGhic1ZoaVYyREdDQkgrSFNUZ1BuRlU2TUJqOThQeGt1K2ZqWDhOTjVuQW5YYSs1ajZCQ1dDOFhBMlFxQlFqQUx4TGxDV3VGR2tsdkJYSjlsZEFRK2d5WkdLTU9yaVVZQndBNHVERHQ1WVU4Z0NOR3FEQVNyWU8rWDRZTGFRLzJjTjlxMGNIZ2JLUVluQjRQNjVFSmlKUGZwYmprSGNEMEJLdDRub1g4YnZ4eFVqeXB6TDRZcVlHZmpSQi9RQjVKZ2tTKzhEd1MvWDF3Y1lLaTFlQ1NrQ0lnTFNwN2J6T1lrSHhkbTZvQnVqbXcweWd6a3hqM2xqSncycjhQd1krcm9uaGkza29aNXVNVzB5Vjd0TXUzZkxPVUNDU0dRVXRMZWw3UlJuTHdQMzNTRGhTVXpHWDhyKzB2RkhqT1VIdU0zbHBEUitiUDdCdWU0SEJNYjN2NmFSK3IyTTBveHd2TG9CTVRSZUEvcU8wbGFVSE4rYklTbld2U0NrQmk3eGlUeC9SeXl5dFV5Z0YvQkJyZ0NodWs0Qk5VQ0xyNERoNGE1Sk5OSk1la1JVSlBWWFR6ZU56Z0ZhVTQ5dndpSWlnWVloZVN1VXZjUmtyQTV2UFlCSTBiRGNZeFlSUW54Rjg1UHNUckJLUmNxS2pWWU54aGkraDdSQnJ4S0xzVldjU01YWlltQ3hMamk3Y3E5ZkRLQ1VDd3NDclRnTEZrbytQNFFSZ09nQi9qQy9yQStBQTV1QmFPd0Y4QWNDQXFFbUdqYXdKcGdTN2h0R1hTQi9mS0pKQU5sTlJSUld4NkVaTitEZGJqbENONGpCYnFIWFZvcHh6d1MrRW02TXY3MzRCVStIR0ZtT3R3WXc0c0ZPZk1IYUZUZ2pNbTRsandnSm0rM1dtOUVBcXlRZ0dPNFl1Q2hlaEszZDIwcmZ1QUFGdFI1QjRQZFNIN0g0SCtnUEFHN3FxOFBsQSt4cmpNNGlsY3o2V0R0aTZWRzBYTUQ4MmdjdWhHdyt4Z0EvOXVYQnFQUEtyR1JzUTBXQ2txTmd3TEp5RnEyZTlRUFFtenFmM0lScllSTHExYUFQa0lNYmpXOHc5bkxTb3g5V0VYT0g4K0wzeHA0TWpIOTlUZm52Q21mbGZnS2MyMFRXOGI0alh0RVExWG1YOFA2V01Cc1Z3SFpCM1c1ajdvQXRrQ01vQkVTVWdobEJTQkdjVzUveUd2WitrSjU4SVphM0YwTGVZRHdzVUxvYmo5alI3bmJDRWptZnRCYTBJcUI3Vml4aWt0a0xzYWpKVXZQRk9OZXoySlhMNUhkRGk0ZWxBWWNWUVNCQUVhd0t5RzV1RUlxQVFiTEFYbUFMY0I1SXNNVlNaUm85bVplUlFaWnMrZDdvMVJyc2NEUXl0QXllNlRtMm1RYzRvNlYvb28vN00wc3hBYXQ4MFlvanIvZGRNSVdlcmVFU01vZGFjSW8zMXMyeWh3U0EyUEdZaVJ0bkF4UGNsdjRCQ252ZERVOENXTTBJR0VSdHRnc0xiRVJHZUpoN05RK0ZQcUxuR0xaNlNtMEF5dFdFTkkrWFlzWjZBL0JBaFZDajlWaFNjR1B1TUFpQUNKOEg2R0RXTFpyYlJ3YnFRaGJCVCtVK0pka1pzajF3MmhiSVk3QU53QUQ4ZFVZYkZ5M2d5ZU9hV0llTkIvOHNtUUpVMTJyQVFiMk0zQ0lYZ3pIZklSR3N0ZWw2MWpkWG8vaW13WkRxVkpHNE5pK3pmNXQ3ZjRESzl2Wmk2R3MrSUR1WEdBNkFJTnpCTU9YOWpmR3IzTDkzSEpZVkNzbk52N0pxTDA4VTc3UlByU0VnaDBldHByY00yUXdsUE9DZE1LVUdpM0FjaWJWOW1xVU14Z2kzVmVnQXNYNXFReStzTXBUS3pFMHlDbWxwT2xEQVNnWXhpTGNIWW1SRXorb0I2M2JBUVIwRWpzMTdFM0kxdW5VWEQ3dFdVVDBNTURmTTJ6SXpYdTNSam4yOFBqQ2hXU2RvY0EydjBMUmRZTDNCVHNPVmxjTlZlWGJBTjdxMnQ2VVZKb1lBWTcva1BNU2VhL28rMExkREE1QmtOQmMvaEhETEJMSjU3MkpRTm9ZVHVWMnNrZmdJZVFZbnZCVlFQakpFSkJqRGZEQWd3TE0raDZXVEZlakc2a0lGKzR1QUZ4WVpFemI3QXlEdWI3bjJDeFJGYmdBMlpyUmEzTk0wbXBVdmdCM2pJZCswd0hFYWNEdjUwUlBiVDM1NUxHUXhId1Qyb0d0VEo0MU83b3h0NFhkU3JqVjhlS1lFZThDVzNNZ2lXeFdNVnRZcFNlYUtBbDNRNjdRY05nZnJJUTNNNVhJL2tCWldoRXZpK3BOT2FvZk92ckFYdDRXbDc3REt3Mnp1bER1ZWNIczNqSmhlRU9GbE5lU2ZyRVBWMWticlJmamlMMWVMMFRTQ3pKZWc1Y215YWF0VzFBUjVpNldlKzBNSmNEd2cvd2NFQlMvTzJZdjF0bkdNT00vM1JhK240UktUWkR3UVdBQUQyd3pqcjJneGdMVmpTaVZNakFXODB2cnZIdmJmbjFWVGJURHpWeU1SYmhaQzd3d1Faei9EWlpoTGFUeDFtS2c5R0tDbmtLQiswRFEwS1dDWnBneWw1MU8rMEdSQlZqSk5YQWRtQmtJRkE0L3BDbXdDZ0FoUTllaXF6QkFhMWVhbnZ2L3FxZjQ4L2wvSmpUOHZNUEpsMGZ3NjN3SXBIQnVGbUJSYzZZa0NoY090Y3pzeDNtQ1VFb3FibW9GMUhPRDNFekxqd2ZsNjFYZDBQSXJIa1RFQXlkeDhTc2dLbEh0MTAxMnNncnk5N01NTjExcXYrQldvQi9NR0I3TW9zS09xMllQOFQ0dnFCQ2pWTkhJQy9tSnU4c2xnSitTdlllc0FRQmF2SlBQcWtOTU1HSmxZK0c0Y0IzZGtPMEQ2NlViNGZrcFFmbFZzdWs2QW5SVTFyN3NhVHpYYjhhemI2a0U0TEYrWURTZFo4Z1VCWU45Z1Jld1l6bUhqQW5selhIRUN5R1BaNTB3Z25oTVJXc2FlSDJzNWdSMUFWWmJtdzcreGF2bGIxMGtQUUZ4dXFIVGJKdE9NaFVBc3NIK1B4WkxoRzJKOG5xNzhJeG4xMTZNZDBqUk9VOG1GaEV0dVQyejlzMEpsR1Fsby9yaVAwSG8wdjZJMUh2aE1zem01emlBVlV2ajVzMDQ4NHVxWEZ1akd3VGF3dXVXazFZTGxWWGhOaUF0MkJjNkVId1pTbHB3TkNja09BaTRpVy9CejNoSE9CQWErREE3TWYrVEpYT1h4eTZEOWM1WC84MlYrVU9iRm9ZbHNva2I1UVk0TzI4REVBNkJTTU16eXp2SExWb20vaENtd2hwRlp4VkJ1dThRQzY4MWFuQ1JDQXdGalB0RTF5eDRFSVZDYisxZXZMdWRGc3dMTUJpY2ZzUnd3Q0FBbFFCUDZBdmNNbWxhV2gxZEQ5TEZhc29NcktYUTRuQWRFaUlnaWlqQ0EvUDVhZlY1REVjMUE4bmRhWnJDUzJ0d2hmWWJ5QjFDcFRQd0dGMTVHT0lOTzA0UUZhTjVtay8vcHFvME9wLzFMT05QM1d6WVliSTUySnlUUS9ZaWpiTE5rSnBmU3RKUUJTMk1kdnVXeWVSb2RLbTFqOFZ6c21HNWdXTU5Dc2tEdVBXYVMyeHNQQTMwWGlHckcvWElSL0FPWW9nUE4rdUVXMW9WRDdFTGdCYTluOU9lblljdFdqR0tjZy9VVnJVMDQ5ck9hL252SE8xY3ZPMFVQK0RhY0w1UVhzSG4vOUhPZnBIZy9KRk5qbXVJdjRHMkoySEcxL1RVektUVjNEZkNNWnBQWTViYnVDZWUwMUh4dUNDTzZGcXJkVmNiT2NVQzJKSmczZTFtd1pZa01vQjFFamd1d2pCbWtpZ0JhWUdZMDV6SHJmVVJUdjNFcE9YSFczMTU4M0JVZVBPMkNZVDErWDdQa2hGZEFoSThYeFVqaVFuaDNOZ0x6aUVPMi9tRmVGcjd4cWhYa3I3NDl1TTBPb1FRdnNWN0xORW5aQTlxQ0ZiRWFjejFtSGl4bWZNeStWZVB0N09vRE9ZNDYwUEVmcXdNcXYzK3loR0Z3RWJYOCtRQ1crQXZhd2FqdjM0TFpPSEJOMnpVUnUzdExhUkF2WkJiTWhLbXd6Y3NhSThqRGpqZ1JDMTk3ZldmOFFJL3NLeXhDWHZ2bFltejcrbGp4YWkyTHpTUlpQcHZ4MGJmdExpL09BZS8xOXZzRVZYMnVCM0tOMjJ0WW0xMnRBVUhGMFRzd01KNjJ3dzNSUlY1OFdjOWtqdVpUcG1JcGtDNEJTWVRnUG5pYWlkbUwyQ2pRSzFiaUJHYW14ZDVBTHhOMTJpejhlUW1nSk1OS3BsVHZhbTBBVUxzQVk0Vll0aHhabXdKSSs3Uis0S3p2VDVMbHQ3c1hMdFEwbVo0bnZQQlBsaG1iejJaSStBTXJLVjZEWnJIaEZ2MUkwb0hLbVBRblZ3dGo3dGZpL3oydXpEZmJOb0FjNWcrVHZVYXhPa2haSkFBVENMWWx4WHh5V2ZpVytreklyRVZRQWZyYmpCNWFvSDh0Z0FVZ0lTQmQxZVI5WVhkbkxUd0ZHUFMyNThzVldKWUpnaktMSllvNFh3MFZWaFhBL2hwVmczZGNyOTBYY2dKMHFoaVJoOEUrV2lwVExqT0NTTmVvZHhzTmlkZ2JXOGxxdjhaaW80MFZwV05TeG9Qc1h0azZCSHpkKzJCeWdsSEIrU3ZBUWJhQkc0LzEzVWpUOUFYWmQ1TUlzQm1yZE5rSGJIaGtiOENiejlYTVZHMW94eW0zaHNzK1ZtakRDa0I3b0hNd0dyVGlmbm5CdDUzL2krdzh3SWZDNDViN3k4K28ySlFKWXB0MlBVQnFqb3ZFZmlFcTdDbklOdkNEdkFiOGkzMS9DZ3dNZW12NTB3T2hneXNBdm5KRzBBT1lMZDZYajJ6amo3bE1rTmpIbTFkYlFsbExrVjB4RG40YmRoa25tbytrdG1iZUZJbDVQb3NXUkM2UER2SlRFYzQyY21md0Q0N05xc010UjlTc3haUFh0MFVMRk5qRWZiTmFVTUlMNTlNajh1d0tvN3V5clhRRHkxL3lDQ2dTNWl6ZktRMWZCMGJBUTJiYzkyTXMwdG9STTFSdno2ZTFDZE01Z0ZMUnlxcjdtaWhOQXF3SGlTRDJOT09hMGk4M2FtcmY2a28wNTlsTnltUmVmcFpmZFZjQ2MzMExXd2tsK3VVZ3NVVS9hMU9zOVVrblBXbjlaWVQ5M3ljNkZOLy92TmpmN25udWVFd3R5QlpJYWNFdmxvVmRlTEhSb1QvNCtSZjhCYUtHdFJnTkJNdklDYnNCOTlmb2lJbVJiMDZVTlYvdC8vS08vN3doK0FZVHZpeERyU2E4N2M1RmFhM3dTUkhQZ0RCMnVHY0hmZXlvODdyeEF5Y2E5Vm9oZ2FuVXVvU1RQWkFnblNJQ0VZTmVDUVpaUUhsOU5hNlAvN1Q3ZzBjMjNSbGhzUkRmb1Z0S0VkeHhlajh3VWJOWUpJV2hSeWNCZUJsa2JSRXR2aDlZeDdYYy9JQjFRMjNSVjlRT21kUDZOdDhEMHArUi8yVTdGcCtIcEUxNDVFSmI4WkpjRzhaeHdTV1RLZGhmSzlRR1hxSHBGdjFtU0dEaFNzc01NcFNZeDBCaGgybmJVWERMQlhNd1poNEdjUVVSenpCbmNXQkxzWENubVRwLzBVVThjTGF3RDNpQzhEM1JjdGJiTFBSdG4yTlBhTGloU2pRUnFsV1E3RlFiNzl2U25aR3pkMWx6Y292M09oOWZGVUthdHZWNUNSTm5NTXhrcXNFRzY5Z0NYc1VPVHZ2UHJyc2dIYmErbnh3UC95NHo3TzNEQVdYUVFuMHBXNGJjL09xUnBVNTRsOVBSQ3I4d0F3ZW51TnNWMEF0cnVOS2pKNzRQVG40Vm9iRU1BVUV0OGY0YlJKT2ZKNzBXTDVyQXd5aEFLdXZkclptNWJYaTVMTU14N1dyNDlIUGJySHVaM1M1bGlMaXRvV1lkei8vazgzN0JVaGFrSURaQVZsdDgrRUVxTDcwa3pnR2lqVk5ESG4rVVpaMllDczlYc2wwMXRzVzgyVTZ3Yjk4TDY0NzgzZ2FRUm9tb1ZOaXhBOWduYmdtaWd4ZXZ2QnlHTmR2THRhejdlNUM5TzdZS2xGNkdUU2ZTMUsxdVpHdGhNdWltVlhPM3paR1h3QUF0T0cwNDNTNDRXSWkxNEFhQXkraEpUbWlqZGJVTlZGekhmbzdHU3hhOEdnYUNTL0V5a0pwcVlVZTBUdGdRTldzSGVPa2Qzd3FCdzQzVjlySkpBM0UwaEhvSGJQbTh4UXNadHJwdk9TenZrMmE2VUtNeHVqS0FZMEVpWUpCV0JrUGp6SzJjZXBLVkxLQkI4SzFyUU1wQ01kVS9iQi9iL3VCbnc5WUZ2M2hhdEpuRnNva0F4YzNCZVJmM3I5YnVSbmZ0ZHNhaVBuYmRCUXRSY284OEtMeDJRcE10dE9FUnJsb3dYSmFMNWZJcjRsdFc0Q2Y0S3lzUUJGYlR3dlZ4K200TlAwQWZaaEozUkIvSmZvbnRGNjVwRUN5Q1BBTTd5UTZkdklVSklkdU9yZGhXdUc4YlhvNCtkb2pIaVowbGJESTA2WlVUQUNjYWlDM2JDWVVrQTljQUN2TUdsL0pjR0tiSFFrVCtGeUhaRTJDTGJ6c1hodUdoU0o5MXBza2NCdVFlTVBxOXk0NkJ2WmVGRVR4dzA2SGp2TEIrRTdlUXdwa2ZnM0pHYXhYU3hEODZvY01ucVZDYys3SExPZDBYVEhQcVI1TEpLdllIRHhQMTB5Q0dZWUh6S29hZzVBKzFZUVVlcDhkZ1RCMytZZXZHTjdYSTczZGZ0amxBNmNxSk0wRlU2N0JLcDM1cjFldzYxYzhNdnNoNC9ZQ0JxTWxzQUNEbEVXQUF3dTQwODFWOW0ydzduOTcwcy9lMS9Cclg1bTZHbFJxTGdLMnA1b3dlK00zYVVsTkpGTFNhMVlEZUcrd0crVnZHWTc3SDNtQTBrS2Q1Z0ZWZml2WU1Uc3VFT3lLMW95M2hGUU9hZGZqVzJlM2JKQjZvZHdQSnJtSlZTbU9EYjZYUnZjQm5yYkNiblpYdzNXN1ZrQkdLN053STY3UUZvdEUxSzlBZElPTEhOaFY4L3pUaWpFMThiUEpIeUhsKzhET1NadmtiM3FUWitYQnF0WUJHcHcvOE5aN1AweGtIMlhrL0wxaDNYdzZqRU5OKzA1N0pOblFreFlnNkdCblFBWTQzYTJmYStiMTF4VUYyRFhZQVVOcDUzcExWOTNkZjF0V2VkdDFoVzREeFk3NE5Pc01OSUl3ZmJubldoQldQQmdRUWVBUG9GZFpSbXBqelRTa09uU2xVMU5nc1A1QUE2MWd0SzhiSE5FbHJWcGVsL3pCaFJuZHIwaDU4QU5wbldYbC85L1pLWEhqWWVLb1ZyeFd0SVFpMXNCZWdZNmc3b29BT2dUZGZkTk91Tml6OWFjUTlsQjFVYlR2TEJ6RUFoMkM1WHl2VjU3N2ErQldaRG1zUGRidG14Z1BtdHFBWjdaOEJqMTlWOG10MUNBb2dvOXNGMnJibWE2UTVQMTRJMGJqejA0Q2N2Ryt5cHZnQnRYOEZEV1Q1Z0w0MW9HR1ByL3VZcWJxdFM3N05lZWRXT2c3SWZQbjEvcXJ4aDROYzhEbFBISVlEcG9Ib3ozUURLc0pxdXRSZ2pNZUluVld0cHBRTmt0aGlubm41K1Z3NEJUdVJXQXVjckNKcXRCTjErVTVoRW00Y0IyQVBMTjZtM0tnQ3FMNHFVN2NGNFNpSVVVQnpubGUyNnY3cmpyVndwdE92SWp0dXlmZzdzWGpnZURBR3VHM2g2N0NqdU9SaU5RTzBZdXNaMDM3N2hqZGNXQ0tNMU1RczdSYTRLL2NGYUNHYmdxS1RHTFRVWWJGSTlRYkZma2lWN1BDSm9DTkVyL0ZKZk1LS0Y1YWRsMElKMlV0Y29ETkxPbStLYWk1ejZhY0ZIWHNOOWJlYnhYak10T01DOGNMNTdkSHQ5V1Ezd29VVHNjcGpXZXNJVzJQdlFPb0wwN1ZNY3RwbWpwRzBmQVQrRDdSZldlVXdpWUFYZWh4SzBGS0hKdGNMa05tcWVTcXc5djFBbEY0N3lScXV4a2hOTjR4Z2Vid3NPZWlYK05mRFVxNVRwZXRiUGpaajNlV3lsZWt0UDZsRmdzSEh4aExpOXhPMkJVbi9KckxQQXd3aityb0txQjV1R1JkbW5oUjBoSDNvOTRWZi9MYWp2bmdBMXRlNU5tOUplaUpNdC9sSWEvVlEvZmJXZFR1TUJ2Q1Y5T1dnTUVRdWI5dGcrOGJUc3N2UnhnUXc5T24vS0Z6RGZIMDJ3anpzdHVrbnM1cXNYeEJrOFg3N0FQb053WjRpZzQxRHY5QWZxNHJpWmx0ZkVISkkzRGo1aW1aaldEU2d4Wk5QQjhrN2VVd2I2TjVrODNFQzlKN1lKdGJpVGxjMXhMYmpFY1RYQ29ieUxITjJtelY1T3VUT01sSjlYNXoyR0pRVDI0aEFBV01rQ2JMQ0RvQVp0aW9DSm0wMjRRRnZsMk5xRElhRlU0c01qZ2Nvd21aVjkzVXlOTHhVc0RTam4vQTlnTkVlUno1eC9SOCtNalY0amhWd0JFMjI5UWw2SElUUHVRZ1RtdlNnN1RFdWx1T0VrdW9uQUQ1WUhQL1FyVjV6aEF2Q2JEdytBVHhaN2k3RXdqd0NjREFlZWw1bk5mUU9sNzJXTlZ2TEhuVzIzampqNTVRU1NERG1OcGlLcktlNjZnUjBiTGxCK09FcUJnaDVKSk42RTlNQTZkYXdMV014V0ZjZ0JzWTgzRmErTjF3K1pBYmJOTHVXNmJOQ0xDNThWYlpRcWpxSkI1Y0hBZ0syaHcxZ3R5WWt1Z3Y1c1pxa1Q4RU1PajA2U0F5aTRKZ05pOWJnUXhubEFrbkFOQkNMRzFBdjl1aklHUkR4dXdMaS9xSHp4K1kxYVIwUGorMHpQbFVuMnc2a1FPb1RwdlBESkp0WTBYMXR5eGZnbmNYQ09FenRnSXNBSzlIM2ZxclJDN29oY1IvVituNThiTWFCUUwrZUlGbllwMjhyYXdzNkFHb0xxNDhWQW9kZldscjlFdExIUzFoNitKMUY1Z2J2djRpRGRERGJBUzl6U0hZeXNrN29BQkFIckFBVnhjOXo5UkhOSzRNVnl3dHdHTUVVQjI0ZkszU2Z5VWgvWFZONmJ6RDJ4NVhHTDBMQUNseG4ySkpWYTVoYXMwcnJWM1J6NmwzLzdjdkcwSEw5Ynk1NS9mT2EvNzlkOHZxdkh2UC96U1d2Ly8yYnM3eW9JaVEwWUc1dmErS0UwaWY2a0g0TGVUY2NuM0ZJSno4c2crejMrSS9ML0N5SGN4Qit0c01zcGUyK01QZWdudmZmNElCVHUzejkrOWNOSHYwWEwydWRKT1lGTmQ2SW81MVV1ZjFvMTdMTTlBdVhRMXVnWkpnaWZDZFcwTUxuUGord0lod3BoMm84aEhXd1pPOVRGRzFtMUNUb2gwUVR1RFdyTnN2VjNtMFBLZmJ3WE4rK0tCenhySzRab0daVnNEVWVEN3V3d3B3T3ZVR1o0SkhMa25qMFJraHM2T2I2Yk9iN3JIVUdXNVNCWmRoV2d6Vjc5RHNlYXhzVS9PSXgzVlp5Ykl0aGI5dUJIUDBSc0RtZkk1UXNxMzd0K2Zxd3pSbHNpRU5FeFpKOWF2MTVMSVFBRGZNMVRNb0NobXJQN0NmQUFuNkdtZGpFNmJTRDFDOHNhSWZEdEZRQ2pPMFdqanREN3hqT043ekxyakhML1lKeE5TY2c3UURnZHZyTTUydzE1MDdBQ1pwZ0ZPV0hDc091b2cycmVPelA4SDg1MVpyUkJ1cGttZlZuZGFMZjFDZERPNUZLeUkzSjB1L2t0aTRXQzRNSjd0cXdTQ2lDcHNkd2RMRjB5ZGk1ZnZmT1Bwd3pZWkJBOFFrSXlDNGwyeUFDSGlHWXA1MW45bHEzbFg3Y0VrTXB4YlFxeGdkN1RxT0ZKWHF1ejBrZm1kR0VBZHoxY01ySG1Ed3NITjZQaXVUdTlwOUNXTVR4dzJWRDdTUEdaanl1WlJVR0Z5aXAyYXcxOEFNQnAxS0JSMUJFeGZDYlZpQTQ2ME1PdFV3YWhWT2ZHNXpmeGc0bm96YVc0UzRuN1NRTEd1eFVqK0FzYlBOdFJRcStyRDN3NHl2Y2dvcVN3UWE4VGNUeDV6OFZvM3NzaWRadFlNT3hwSC85emZPNkc5WEpmQUJyS09kNisyazZaWXNGS2pmN0J2QzBWdWl6TXNRYVZZQThrRWFpMUUrdi95ZmEzV0JPbU9TTFR6eTdDRS84ZURVVGRJb2pxTW5tODQ0b2djNWliYUJCNXlYc2FmOEZQZ1hRQjVKdXhyVGdDcEs3NUx5T2poOWErOHJZb3duS2YvS3AxRWdXUHljdUVSMWpneHFuV0V5ekJPZENEV3ZZY1U3ZzlUd2gzUlUrTEZWMlROYUZsQ2MyNjh1SHFZSWRkRitESFoyK0g4QUdqSlljdW1tRkRSNThkaE9pZmhWRDRyZ1pOSW1kWEpkUkloTVFvSmlOWEgydnBEbmV6cjU2NFg0cVYwOGpBNmFkV2NXK3JGU2NGS2dERFk1WG04NDhLdG1vMzlkT0k5ZDJMZyt5REw4UW0yMk1VMWI5VDIydGc1ekEzTnpsRG1YUDArQTJzSm1RS0d1ODlycDBxOUFqT09aR0pleTdHTUFnZUpEQk1yRzNSb0RYV2M2RjNmT2t1azl4Mk5yUG1UbGtyUkZZNW5MU2hma3RMckRoZjFnaVVLdzlybzRjYWxoRzdNOHdDZ1FZU2grNkQyMWgvZXhiQ2ZZSll0Yy9jeUFYYUJMLzBFOVMxcENWTHNGYXRXTE96NVJEd1ZhY1VZZjlPZldkSWc2elFRc0FyN2tyZ0lRU3gzVmluTEZZQ2RydlZjbzlmRzNjdUhNRTZzTVhpZ0d0WkFWQWZENlFyejBzNjdTUGFLakdyOVF6WFRhclpYWUJPOEp0UnNDMmQyZmcyYTE4UTFidGVVZ2RDV2RKNFZDQWJYOFkyeGttcnFaTjJQWTBUMlMveUJtN0J1RjdEeDU2TjRza1E4NmlWTVN1MktqRm4vZG9MTEp4TmlObnA2TXBuNVNNYzBDUWJKaHFzTGJ2a043cWFLVDFhODBGOVpuWVBKTTVXalZkbWlIaG5aOXZNZVBud2xNYmlNYlpjbjJQeXdRZTc0a3ZOblE1MnNuK081M1FjVnRZQXNjRWFwNHNjajJ6dzZ4emN6aUYweGpPYXcvUktkQVA5SjZqeXBOWTUyVTMxUWpsUWNTeFRyRWt5M3B1NzIrRjZQUHNXakQ4VHJsN0xTWnJ0eE4ySHJqdGRhZmpEOHcvcnoyanRWSGR5SEoyaGw5dXpuY0tSVUxmVDVrOWhuangyZnV4YlBpWmhnNmM2d1ZkLy9uWGVpcWJIY1ZoNGVkbi93WDZvYklIKytiTFk1UHhkNHZwSFhoMWhpZ2FIclZjMDBMQ25pOVhKbUVMTS90dWJMTGJPM1Izakk4aW5aNitrbk95N3V4a3BGaDRHMkFKQmlvNGQrcEdxODZPTDltUlBkWTJDWmNQVUFwc3hySWo3TkRLWUVrR1BoZGJiVkhyTklyOXZwRnJwdllhY3NDbFlBWlJaQnplWllrUUpwZGZ4dGp3NmdnWHBEU2JjSXhBR2tHV3lRTWNFMGJXR1VkTGlldDJMeUsvcVpyRFIvaXZIdDlqZDRXRGVWdkNzaHl5ZGhlbkZqcVdZdHNEOENDMkdhWTc3YWVQMGJHTUZpZmFBWXh3d0huMjlTVEZ5akkyUXpTdlJhWld0Rm5aQ1dNNENWVWJIeHpYTi9NTkkzMnpOWHhzMVQ0ekcvakJidW5tbGM0d1A3dVRMYUZ3N2hsTDU1N2ozblNNZkF0RFllVXNpejgveTU5NTlPZU1UMFRScTJsQVRFbTRGbzZuSTF5aE8yL3FQVW1KOVN3c216MkdUa2VDN1V3c05zNGpXcnlhTFVhU3o4Q0Y3REdjSnJYTGQ3R3BBZEVjZkJpY0JTYkFlN0NyOTJtQmdKRGd6c3prRE16WXNsckRNa3pZQ2lKdWxHd1lZYWpXS0Y3UjhaTnZTaE5ZWkRML054Y3lzcW42S0EwbHBGdWRuZlo4bmdHZ2IzUk9TdnVnYXhqak1IckFGa0pGNFd1MzAvdk1pZ0tnSDZqcVowc00ybXdyOEdPc3pDNzFZVkwyc2ZZcjVJN1cyNVhpNEZvTWZKLzlzby9Ib1c3UStmS2NXQUsySG5nRkZIbzZjbXJMUzNSaURBYnZVRFU4OEl2QnNzRFRFR2VWUXUvMlh2OSsxNmM1akxLT3YvYzhmWWJtWS95WGovNzZzdjc2OEh1dDk5ZFcvMTkrMm9vMm0yWWNzMkUyMFhtOHVNOTlPOVJnUkl4TGV4elhZbkVGRmc4bnNqNGhweVhiKzFFTllBc1pmeUJCZk1kVXV2bGpPa3V0bWpVQnlpS214Y0ZmcjlXYVZlTDMzZFZxSmRDUVBQcUhqZUtmUk1GcGRCSENHN2RhemFoc01xQUVORWgvbWltNjRjaHBFZ29keHVVMWg4bzR0Z3RiYXhjTUxtVmJ4QnJBUnN2ZWRXY1VtVmQwMUlkd3pFbHNnRmZuV1h3dmJKZzFTaFp4T25vRFZjZHZPNW5GMnVRSFk1ZjRGNVE0ZEllMTJnem5GSVc3Q2cyUkhUNnpiS2kzY3ZlN09tNmt4dGpkVkV3Rk5sYWh0b1J4Vmt5aXFmZmRINU5od0JVd3kwUUhUdkI0MkMyQnA4cjJaMktQQnR1R0dSeU90SUx5eDlNeVBIL1ZNL3V6RUZLSkY5Q2VOdlAzaHkvdE1NZ3NPOHNhdXBQYS9vemsrWDNpei9lZnZ5N1gvMzQ1bkVMOTE3djU3Yi91ZGYxdTl1OFgrM096WVp2Nys0QTV3Vm80R0lDNWZ0WUpldXUwQUpuUVFjRGJudGVmQldubHY3amQvKzNMT1hYcE1tZ0pLbUdsTFRIRkJtbGZJVWFmVW9WWGhoWENYOTd6OWRhSHhjdERhaGxQL05GUkRUZ3QwL1NuZytZM1hYU1YrMDlsSms5d2lza1EwMU95akhNM0R2NENjRWM2VVQ0SDU1bjNodUZhSHhGUTJwRk8yV2h6dUZKQ21VQjNUbHZxanJMVTRSekFQN3M1cVpNTWdQMCsvVFBiWnJldmRSdzM4RHBldTZYdHVCSHMyRDZyMCtkWmZOdEsvenpzNzFGdDFYUFNiOVJsT2k4UWQvUmFaZmZZZkYydVV1dVlaM3pVdkUrelROb0NNajAyUy9Ic3JrNTd5QU5vQlB5NW5hV0tBWWRBUk4xVy9jZmNFNUQvZno0SnBOc2hLZEVaK2RCdWEzdUxJZG9jMFhWbllCUTBKRm4zWkozS1owOTV1OEJMdnF3ZUlyNGlIaTlvbThuRWJ5WlRKM3pNTmlWOFcwTmc3RVpYZEVhTXpaejN3Tm9Laks1b2JNRkptTmIrUCtBU3A1YzBwMDNNRklVV2svZm9qNjIxMVhHNElRR1FNVEh4VkduZzI0ZTlmV1ZjajhQRUJ0cGxGQmlvYU9VOGZqOWhrbk1GYTRyTnkraHloZDEyY1p6U0ZCa2tFQjdvdEk2WXVnMjBsNjFWM1NZQ1BuMU0xWTBuZXV4bTQ0a2l2aWZ3b25EMTNjTnJ0UGdkQ2JyanF0NE9jVmI2TUV0ZnZZenpucTZ6eHlwSFVLajFuZWNnQ2V4S2tIL2IwZFFCR2RaSlllMTRUSStYZURCM0Q4NFhSODRTTFZURWRBQU95RWpseDRJRGNhM3NjOXpGc24rVEpjTTNkU0hDVmdhMHo4dVNRRzdzU0lSL3pDZkhIVG1rQ2NDNUNqemV3WWZnRjRVa0d2QTNiZUhJamZBNndoaDhVUjF1QnIyMFFMSTFnS1V6WCsxcnR1M00rbDdBbzUxcnhyMlg0UkNibzFhUmtiWHhxNlJ3dHgzZmhDMVpqcmJzTnQwNm1yVFpKaDB1eHgrRWhIOEZJSUlDYjhlNkdNazRKWW94T3hrSE1IVWI0clJyYWN2R3JCaDZQV2pEZ24wVERFajhoWVlYNmJNSldyTVlDM0wxOEdKcERJY0JZYmQvTTZET2ZJL2JRVnBPWWdOUVNIWVY3d2VaMzIxZGRhK1RSbmVrS3B3ak8vZDFPRVlrdm80RGRoaitHY0UwbnJ1eXVHYzJGb0RTc3JFNzlacWxXT1djd3ZEdW5PWTRNeXV6Zy9HQmF3cmk0OXptTTRoa2xGL2hub2JVbUlVc0h3UGd6Q3pUU2hpQ0JkRy8wRWhRSE5UVnVUWkNuTGFQVmV2NnVYUTdadjZNZVYrMnpmSVNvaGRyWVZ0M0lJS2xhckJLUU9qRjdqZHNlL0pKSC9reDkrbmpjZHpjdG9LRjFUZVNid0dVbHNpQUZBcjhtQ09icG9ZN3RBY29FQzZQNG5BNmh1VU1wMVJTWkF1MS9aVk12R2N5N2VucmQ5YVZPZW5sK1EvUVFoN3RwSHM2M2hZNVlkZnMzT2UvWmJNaVVtU2dXQzREL012Um1qaUhYNkQzMzRrcjZWSk1YclpTTEZnSzFpc2lzN2tEajQwN09rd2hPQml1UUh2Q3llTTVvVUxzYW5IYVlndWRGdkJ0M1FKN0trVnZUdGlTK0ZsMnM2NWRtMDAxd1JqUDVIbWR2TXVsM3BNYmcwQTUzVzdBT0RxSVk5b0xFZ3pXTEh2Y3NqSzZNekFBOGJvOHJXR2lYc1ZoUGdrRWJsMHdHSUdmZXUzOUErdEg1MjFpRHI1cDgyTXBnaEVicE8xU2JiYVBhZ0l1UHBIbk5LWGNuUC8rQXZkWlVaT1EyUTU5RkhhaDNFdTM3YnlRVkxjUTBLNEpHTnhmWTZzUXlQYzR4WDhiWFNVN05nQjVCOGRRMkJ6Q2wxOVgzY3dvUHRFQ0IxOCtRVTIzU1piM1FsOHcrc1d1SjI5bkhhd1RtQ3Mrb1RrWTM5Nlphbitla1JoZHExMzlheGd5ZlMzeVAyVk1kN292MFZabDI1MjZaZ3NORXE4WXY2ZmRhVGszeHZPRndxL0JIcVlFN0YvUm1oU25POTlHZmZjSm4xeG85d2VOK0R5eUJXenMzTXR6cHNpWG5taVJxWjBrMlJkeXRONi9KSU50NFBubjlLcnJIK09yVEtEQ0dUTmNaN0c1RGljMC9HWHp0T2MxRkN2MStNNjJKZ1pQd1FaOFR0UnhJalFPTWJXckJBczZZTVBmVi9LMFlRN1NaOVExc3owUTRyVTEzcGJPSWsvd1hTRVFLMnByRXR1S3ltcEUwYXpMbWNlbWltNk1xSFBRVVN4Vzg4WHJZYXUxTmRHT3U1NHpNb0IyczhBc1ZySGJHR3hnLy9oSTR3TTJYL3pFYmdXS2R1YnpXbklML3d3NHJYTEdMNy9Bc0FhWUZacGhvOGF0TU5ZRFpYRzJSbEVRUGxCTHV4eTFaVzh5WkhwYlhWeFEvU0JjeXBhL3MvK3NpaTBzRStWenFJbmlzazlTeldCeGMyZzRPajQzMEs4dHkrbnRHSnlXN3o3T3VMVHpGbEtDSlBkamRyR1k4ajBFRmtwNFc4Z1c3UzB2ZGpWYTd2YU9LNVpzbDUvbGx1WmJMVnBIc09wdnN1RnRkR0hnWXZDZEd2Y1puWmRUbkl5UTYzSTlUd0pOWUFpbi9aTzZPeGxkMFVOVU1SMGE0dWtWUnRxR0V3YWhxb2diemdRRDVLRHc0V3d4NEpLalZEd201REswLzFpdENUTTFodWY4VjR3R3JBVHFZRDdFNmdOKzJxa2dIbjZ3OW01TlAyREdIblZQSXpqTE9WOUdjd1ZheGM0c1h1ak1WaXlDWVhTV2wxL09tNjFPbHd6bU1UM0lZMkp0YnE0TWppcFlhUnM3Vzd5U0pjd1dlM2dTVDdkZHhxNlp6d0pCNTc4NzJEZWx6MktVN3FCb1c1Ujl3QVlROFpBSmpicnp2TDdMN3A3SE1qOXIvZTFZemM1dEJrTHdBamR3eEc1ZTRLVGRjZmZuREJSNzI3TnMxK2trZ0tsbEZ0U29INUxvZEhlWVBVNDBPZXI2WG83ZDRvR3FJNVFNNnpsVnhsWk9BRldRaGo5dnFnNmpBc0tNQVo1QkNLOGNxMVdqeDhyWkxmSXRwL0tpQU9PTWREemFuZnA2MGpUZ21BcVFvempVeXFiRktEY280NFRqcjdnZE5aUkFqc2FoOENHYU5SdjM3UFczMHZhY0t1QUV5Uks1UGU4ZUhndlBEWE8vNGJSNG5ua1dGMGlNYStOYnk0QjB6MTJ0ck5tMm56c2tKWmorQjNJNXU5NmhQOWlNZGlZdUE4R3JVME9BQVRycVdmQnI0Y25HK2ZjNlJYK2FmRmJsekFGd2hEbDY1VVNvOGZvc3phbGMxZW5IajUyY0Uvdm5SdkNDa0pyUFNhTGRDYjIydy9NR3dlZ2g3QmRXL3N5RkZZcVpKV3ZsMXJ3NnRON0RFU0FhcUtiOXBJK1R0dU80VGtsalBpTnRlWFVIRVJTN2tzNEc4TXI5eklYVVRPOVR5K0dFdDJLMytQSzRCWUJJZXZGdjBJUExlcGQ1NnRpc3BrQUZzeGwyRzNpVDRjVjB5cDFCeUtjMXJoZWJHQjlyMkVHK2lBWXdydDVuY1AzRmF0ZzZjc1RaZXEwajBGYk1taWRxdi9USmc1Zi9qWjArRVlwZEJ5YkMzcHUvNmNBRk5NaE9ybkFvTzk4WTlVRnA1Nit0KyszaHN4MzgzeTU1M01XLy9CVDdmdjFUcUo3M0RoV2M4WnRmWXJGci8vZEw1cDlYL3R2UDhQUU94NTdyT20yVCswYWRzUnRTYXRERnVqMW1BU2NkMituelg4dEoxckZnWHUvOHBqUE80SFpHbmJPajJqaHZlUDF6WFg3dktFUDlQZS8vN1BtdWYzM0FmenhmQkF5MVZSeW0rOEFUKzJ0YWJqdkl5bXJoUTF5emhXVDNoSGdIZSs4dkovYWw5MCtiMTlFV0RHaG9XSC9rZStVemdqd0Fkb0tSR25iOUhJanpyQytmU2pxTGFDTlE5SmtYWnFaRkIvc3VvOVZuTXZqNDRFZXh2dG5vZkxVa3NaME9pZ2VOeEZuRFJEeTJCMzY2ZktMNkZ1Ti9PTWh6Um9VejFWeWFOTmc3UU8vZVRwNWo5ZTFYckxhaW53cHBpRVVEbmo4TldqcjBmYzE0Q2N2M1hhdlZYNXYwOTF0SUNhN3pVREl3ZHd0T1FBZ1RrUWQvWVdxRFhadllrOWNSQm1VN1IvZ0k2YzBhbVd0NURFenY0VFN6d0NxaXN0WWJCdE4vTm9FTmNVWFZ2d1duckdFZnYzNDdGTlFSY0o0MDhhNXdkWTg2K3V4ZjhBWE9tRnZMVm5mdytKM3Q2ejZPdkhNMmNYVjJKWllFWUx1YUNuZU9IOWluRmlWZmxxUGFUSHhPZkxOMUlOakNid0lFUGJmMGZ2eDY1K0IybUNzc2tvWFJ4ZXBRNCsxR3c5S1JLL3Y3djl1aEl5ZmJ5czlaQldqZm9xTVpyQzJ3V1QyZlV5YUgxWFZPLy84emF1V2NKWlp4cGUwdDhiSVl4a2s1M1FtNU5pVG96VjRqTTdnQThlOVg4Ni95b1FBcU1xK0Rld0wwSlBzRXVBTmMrbkd3OThVS2VKbHQ3UUUzUDRPeHN6ZCtrNGVzeE40aG1DRjNZenJkb3NqOGNadnhXRnp1WEliang1RDBxenZHY3o4bmlLSHZyVGJtWkxQaWJNd1pNbXF6VGdkYW9uUUJSdW5vM2Y0NlhkSnVtbkRuQ2NWdFRxdCt6VkRKSGVNYWhqeUJkZmFtT0VqUUdDOEtnVm0rMjdiY2FscUNPVTVlRURmYThSUEd3aGNvK0tyMXpJYVlRcVRtQ0lPMnh1TkpLZklLbTVReEl1MWRIdGpscVZGRzBJeS9BL0tjTXhWQ2RneUVzUkdXWVkxaUF5dEs0OFFBNTQyYkM3WUxZTnRKNkltWXpkUFdLamltQzEwZGlyZXNLM0RlM2tuSXdXblptTmRZemF0QnhzRkJHQjE5WlFlM2pYek9Gc1dGaFhQZ21BSFdSekRrbE9wcS80NVRCVjdJU2djZTR6bFhPeHJ5Wi9TdXAydkFkeE9BRU40SWJ1RkMvT2NjRFFkY1BMMm1hdU5wSHBaUVlRWHFQblgrc05nejZXZTlEalRCdkw0T0VKbFEvV1dCOTdaSFBEbnUxUW1tQTlLUDZRQUNkdFlEYWNKcHJRZXBnRUpnOUFLSUpUc1haTThITjdsZ0pVOWU2RFk0eTVZK2JMVEhVRFJQV3pLR0hIakd4M0pwUWZaMndCaWtKanRFYm4zT3piYkg3QTdiNEpQUkZkVFc3cmxselpxSnc1RnN0RHZiOThEWlBCT3c1V2p5MzlOVjJEVTczTGVueGxodzRpR3NPem56RnZBeUVCM256TmdEYzN1Y1hDLy9NZ3Zid3FZeS92VFRycitaczV6Ly9xMS8vYzRabW1uYTBJSFl3K0Y0UzlTUXpubHNGakpWcURrZ3k1NDlKMzRqMS9FYzFWTnRRUnVucmdZaFRzbngwSmJjSUFqYjNyTFZGcDdmOGV6RGFjVDFnajBEOG5KMElNWXBiYkpMNVQwWmlQa2pkdUNrLys3ckczUUtDYXM5Tm9jcHNKbzVRSjZxYzJaYXNNRTZ6M040MFd0SU5XRzduajRkNjNwbVROczBkUXBJbXhYL0FHOGUrWWtYRnN5dzhUWTFmbHNOOWo5OHBtS2ZmQndEbXJXT3EwcTFTcThmRUplZUZ4S0FaUTZ2aFl5ZkI5dkJBWmI3MW9LVkFsOHpjT3RKVFhaNVBFNFp4b1JYNnlLQTBtMUQwVzB5ZDZiU2lTTFhYMlRZczI0TVVuaTRubU1oNDVsWWdwTjBydkNKdStWd3JZVjdtVmJvTzlvUjhaaXY0WVBxcUJjd045dDRuai8vNmEvL0RRYTNtZXNjOTJVbTZNaEx2STY0SEdGaDFmNHBTUEhmdmk1OTNicXFmQkQvYTBHRFZZdFdtc0FFZXJ5SzNTZ0E4d3E3M3NYSTJGcWVCd0J5SEE3L2RDWXpiTTA1ZG5Za3hOcUNuaU9ZK1JlZFA1S2hDSVc0TmRyc1dMSVlmOGsxazNOajJWL0RpY01tdkEvVzBJMktuS21yd1ZybjRyRmNGbEk0SWVXazFhLy9OcS91bVhiMllldTRVWWN6a0FvRzRsUVV5UFAwRUtVQldoU000OFB5SmZDK25VeGdCYmZSUUtlZ3JlbjhTNk9aZzgxM3FMZVZMdnM5YzZzdDA5SmFhRS9EbTlGOVF3WVhNS01EVENRUWNMSnVJSEtoaFBtdVRsVi9uQ051QjJIOW5ML0V6MGhMMGpuQXprSG9BLzU5ZzRiZ0ltd2hPM1huQXVwbzVuMC9SMTZCTlp3VU5rMEdkU25lNjd3TFJKQTEzQVpyc0VpR3J6M2lZSUFzYzRjYzgzT21ML3M5U21HM3BtY3VuQnBtMkxWSUJhdmxxWmlJUEk2U0hmSGNTS2crVHN5bXJWR0h1WWpud29BQmNZemRMTlNnVFV3OHJnL28rUzRMOFo3SHR1bmkzTnhzTyszbm9CZ2I3eXdaYm5mQlRCZWpwL0IrVEthbkFWVHJoTE4xRS9HYzNnT2d2SGZGY0g5R0hFQmlXRldMV0lZRDQ3ZERNTG4xNjdsTnNFN2VCRjJ6dkIrSGV0Y0tCbkcwZVA4OHhJN25OR2NUbjJkWVovZm55Q3VQd29IUy9zN0lhcmdvdytYaEhKeUVxN0gvKzNNTXR1ZXdObWUwNEM3UllLUm9mUlVid1NXZFUrUVl6SEp5TGE5aHlBekJCZTE0RWtPdWwzUEhXN1dYd25sdHJPOEh0a2FlbllrbGxQdHpHaU9nRVE3eDA3eFBMTzNRaG5lZHpqbFk1MFQ3YjRQbU94NmxnZi85YjM3VW9IWTk4WVRxSkpYaWFXZkJUbmRXMU1DNFUrNnNuSmJtZTlBZGd2NzhBTldOdEpuZ0c4bE1DVnpkbXdIdEhBRXp6bEdScTZEWW9ER25ERGY3MHhNd3FZS1FuRFg3SENMdHlOSzdmZFhUT3owNTljeDNRZnJyY0R5RGRyTEFMSUQ3RGxENUtydW14SnlJaVpUSHMxODhaUS9rN2FHNHcrSCt3U0ZMOFQ3Qmxwb2R2Z2VLVjU1UGR2QnJUcXF6VzB4bzRQUzY0Y1JGRDBldFFLSzZQQ1BTOFN4ZHN1eXI4azlBaFZVL3ozMGFBVHlmMDdwNGJFbnY3VHFKRjlDbGcyYVZpZWloNVpDOVIrb3ZCN0RCQW9kUTdIQW8vVlFhMjBKbDFROG0wSEdKU04xYkFLTnJuek1ub0dCQi9adU8vQm92YkJzRGFrMmRaNTNZbG92aVBBR2kxUDNCZGViVm9qT2V3NGJKYTVmcC9qcks0MFFLWE16ekxEM2RFZ2tKMnUzYVQvWXpkclBsWUdnd0ZKL0pmNTEzV3IrVCsyK1hkWUgzT2RySEJLNVJUTXUxcW9uaVlEdExZVjJBTnBESUkySi9CQXhrekZZYmN3ZGwyaUNZRWNoVHNXODk4ZkFvd0hsS1psNm5IamhRRTJWemlwNTl5UkNkZld1dHYyakY3ajZObk5PQmRaQ3Zqb1hzdjRraHk5RVA2VitWd29nL01CYnoyNm9IbW9KYVdjRURuVzE1bFgwWDV6eDdDb01UYjA2eDJZdXVCeVVWTTJ3MHhWTnVZckFGclZycDQ2a3RrQWZyR2YvMmlrZUhqZ1pkOXpsQ3B0V0Q2SXNUS29LWml2dmJ4VGtZY1hoZ0FZVFVIdXZYOGRlNWVBNFpodFVVK3R4V2lHREIzOHVXQkNkdzJXdDc2di96TDBiQzR0WlFmMlhwMzUvM3p2aVArRHBrT0dJYllybmxaZjEwSHEvTGcyWFFWQ2ZRVEg0WXhGcXNUNDIvbmhZYzFmcmZYZnJrcllLRDA2OGwrTFp0QVJpTU9GcmRoam1ZeDQ5NTJOQTU2UTYvRmZSWDVvdXR6RVB6RFZ4Q0FZUHRPaWJBTDMyQ2dTZURqWTZiRHg0UGdHTENjczdad0k3QWZEenBHTFY1MDFoMnVLZmJ3ZmJ2OGEzZ1c2aFdIRmM5N1dhbWRPWHlSVnhjelMzb2Y3Y1ZFY09od0NhMUM0N0trNUE5Wm1NYmdCcWVWWHNMdWt5d09ISVhMQ243aTZiY1BxY3RHdE1zUVVwMFRpbHFKNmQ1bzMybUl4OG5WNWFENWhIK2FJTnptUFA2cFNvRmFzSDB0Tk9mMDJEOWxxTjNuZEViNHpyVG1jMnN0VE9ZelVEZjQ0bW96aDdwSnkzem9tdmpOdDFqcVdKeGlxT2xNL3lZODFNcUsvVUFwUjJtV1crUHV3UkhGRHRjQUJrdGdmZGU1eUszUC9OcWVVaVk4TW5Rek5TZEMyU2UrSDR3QUx1ZVNQR011OGJrTWI3WkRCZU91bnFlRk16UU10MTRDbUcrQ3dkV0grY0N2bVUxc0E5NDJuNWJ6MzUxdk1BNlkxdzgwZXh4TGsvK2RWTThmODdWd3NCdFQ2NEJkRjFXVE51UTcvR0FyTE9UL2ZjNUhPWjh0QjYzUEpvbm9Kd0lUc0M3cjRvcmk1NTYrcDFScXg3TW1PRDlWckZBUUowWGpiZXlpTC84VFMwOS8vdUZCTWZtYVFwT2RUUUVacU9EU2Z1VEVUeERVQzlNakdiWmVRZkl5RzBGblFPbUhIYTBUenF0NU44NVB0WmRGYWVzMjBING4vcC82VUtkby9DZHZQM2ZLODNmWnZBV1JITGFCVDNsN1UzNHhWb2RURkE4M3ZKek9Qbjc0ZyszWi9ud285cEtlSWhkM2s2VUN3NTl5MGlRMjQzOFZLTXIwMk5Wc0g4blR2U2UwN1doQ2oxWURjb25ybmhxVFpEa1UzblRuWjU0c3lMb3dMelBJUU9qMlc2SkVFOG5LTnA4YjNHeUliYnlPRGtaaGdEb1NKY05MdGFQV1RtMmh2UGhrc2ZrZ2FFZmg4TUhKNWEvbmdyNjJnemRuTzJwTDNMNnFSV1lucldCdkVIWDM5Zmp3OFR4ai9OOCtSbW5PK0NJZGFaVzdLN29zTTl1L1E0Tyt3WjJPM3I4T2NWeWVBQjJhRHBNNERvaEZBQzUrR1U2MmdGZzViQWdnOVBSVThLRHh4RTUvTXpEVDZ5dGhPeDc4dDN5YURsSWhBS1M4UDAvMG9LY04xTmlnR1pEMTJFNnJjYUoycStORGluODh0SDJiaWZVOFBXY0tTdXRjZVhKUXVkUTdzdGNkUXdaMW0rZWR6aXVZdDNDUWp2UkRldWJLNUl4enhPVHczMldPVEFsb3g4azBldUlLRE9vMXJNU2tXWGRUSUZJMktsUkRKbitDaXcxVE02ZTN0RkRmSzN4N1JhRWJ1TUwyR0hrZFR2MHNUblo2ODlrMDduUElYTWUwcERGYUd4ckd5ZlZoS2tmMjlsbUVtalBTMHltZjh6ai84NDdBdXI5WnJLOEMxT0JlUzJlK1B4cmdiUW1wSjRobmtYRzZRR04xVm5pRmlaaDRxMW1mbXgxeEtmYmpIUTZXS1pudnp6YndWTzRqVGVlZkIydjNlOXdzdWFPbnJSb3pCU1Z3NXo1VEE3QWh2cjFnOWJ2RHlYRHRYbTJXSmFZcHRrU0Fvem1PdEhmRTZsTjRRR2x6cEZHTnBRQTh5d0xIUjYxM2gyaTNKNXFzNEg5V002cmxXQTg1dDNSeXhoMlFHTU1uajJtRHgzUVVCMmNXeXllbHVadExIZ3pjZUV1TzVEV0pDT3N0bDFud2l3MjIvTy95K2U1Z3ZhTlRKZGx0R001a2NQbjlJMDZDT0oyQm9PRFloVE5aRnZyT1FzbExZOXlhaWY1eDI0YVhiSHhxV25lVHZyT1pKd3pSdFhZN1duQVZreGdFdUgxL3RqZGpWTGpBNnRERkpNQmJxOS9oMk1oRHBIU1hFSGVsdG45bU01Uld4N0F4TDdaRzh1NzJyaWhxelljdWJIMmw5VWVyem56Y3pTOURHZW5NN2FwV2ZOd0NsZFc1elhmOTNSOFk1RndtZG5HRzZPQW52c1R6N0hmRitUTmdqVkxTNXI4SXVPNTd6dzhkQ0pqNlJaYllDVkZFaDA2K1EwM2pYM1RJWGd2K1pCZHA5YXd2eDdlaWcyd0VNYUtKcnc2VDJYMGRGcDMrbVhyWVQ4dUNNSEN1WmZsb1IzWXg5SU5aVDN1Z01uVHkwMVlaOTc5NE1udTVaRVlDSUJ6Um9Ta0ZtK0pvTGZGM0dkbTFobG83UkN3dXM4QjMxYTdsUFpkQVMvWjdNMEtUdHdkOXpuc09WblR0RHpCUWpWOXpDdWJFblM0UFBhZWIyZUh3bGI3MTdPbkZmZStMOXVqSFQrRjNtVlAzK3JPQnZEY1AvdFh3bk1PVlBMUUdBOXhxaWJnMkYvSlp2ZkllZyt0d2F6cGY2NXpMQ3JJNWZyL0FwWVRxQThhSmVyWUFBQUJnMmxEUTFCSlEwTWdjSEp2Wm1sc1pRQUFlSng5a1QxSXcwQWN4VjlUcGFJVkJUdUlPR1NvVGhaRVJSeTFDa1dvRUdxRlZoMU1MdjJDSmcxSmlvdWo0RnB3OEdPeDZ1RGlyS3VEcXlBSWZvQTRPVG9wdWtpSi8wc0tMV0k4T083SHUzdVB1M2VBVUM4enplb1lCelRkTmxPSnVKakpyb3FoVjRRZ29CODlDTWpNTXVZa0tRbmY4WFdQQUYvdllqekwvOXlmbzFmTldRd0lpTVN6ekRCdDRnM2k2VTNiNEx4UEhHRkZXU1UrSng0ejZZTEVqMXhYUEg3alhIQlo0SmtSTTUyYUo0NFFpNFUyVnRxWUZVMk5lSW80cW1vNjVRc1pqMVhPVzV5MWNwVTE3OGxmR003cEs4dGNwem1NQkJheEJBa2lGRlJSUWhrMllyVHFwRmhJMFg3Y3h6L2sraVZ5S2VRcWdaRmpBUlZva0YwLytCLzg3dGJLVDA1NFNlRTQwUG5pT0I4alFHZ1hhTlFjNS92WWNSb25RUEFadU5KYi9rb2RtUGtrdmRiU29rZEEzelp3Y2QzU2xEM2djZ2NZZkRKa1UzYWxJRTBobndmZXoraWJzc0RBTGRDOTV2WFczTWZwQTVDbXJwSTN3TUVoTUZxZzdIV2ZkM2UxOS9idm1XWi9QOGE3Y21MdzBYeHZBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINUFjQ0VDUVNSMS9VTVFBQUlBQkpSRUZVZU5yc1hXZDRGRlhidnMvTTFuVFNFd0pKcUVLb1NxK0NTRkVzS0tKK29vQ2dpSXJTdXdndnZTZ2RRU2tXUkgxRlJJb0ZDL0tDZ0NDQ1FpQzBrSkMydThsdXl2YWRjcjRmT3pOc0dvWVNpdXh6WFhOdHNqdTdNM1Btbkh1ZWVqK0VVb3E3VmY3ODgwK01HREVDZi8vOU44TER3OUd6WjAvRXhzYmlxNisrd3Rtelp3RUFHemR1eE96WnM1R2JtNHRISDMwVUxNc2lKQ1FFYTlhc0FRRHMzYnNYSTBlT3hPblRwNUdZbUloR2pScmh0OTkrdzlpeFkyR3oyYkI1ODJZVUZoYmkwVWNmaGR2dGhzUGh3TkdqUjJFeW1RQUFvYUdoU0U1T2hpaUs0SGtlZ2lBb3I0SWdRQlJGMzcrSktJcnczU2lsOGl1aGxFTGVBSkN5cndCQUtTWFM1U3V2WmQ0ajU4NmRpNG1JaUlqVGFyVXhMTXZHTUF3VHhUQk1CQ0VrSEVBTkFDR0VrQkFBZ1FBQ0FPZ0JhS1NOQmNCSXZ5Y0NFQUI0cE0wSndBSEFUaWt0QVZCQ0tTMmlsRm9vcFdaQkVBbzRqak82WEM1VFhsNWVYdlBtelUzUzcxQ2ZyZHovaEpDeW44bnZBUUFsaEpSNzlka293ekFnaElCaG1MSWJaVmtXTE11Q1lSaklmNnRVS3VWVjN0UnFOZFJxTlRRYURUUWFEYlJhTGJSYUxmUjZQZlI2UFFJREF4RVVGSVRnNEdDRWhZV2hSbzBhaUl5TVJIUjBOT0xqNDNINDhHSFVyWDhQL0hKamhOek53SFk5NHZGNGtKdWJDNFBCZ0lLQ0FsZ3NGaFFWRmFHa3BBUTJtdzEydXgwT2h3TXVsd3N1bHd0dXR4c2Vqd2NlandjY3g0SGpPUEE4WDJxVEFjeDNFMFdSeUFCWEJzeEtBWm44ZnhrQUt3Vll2djl2MjdhdGdWNnZyOGV5YkYyR1llb0FTQ0tFSkFKSUJLQzdUWWJaQmVBU3BUU1RVcG9oaXVKRmp1UFNyVmJyaFFFREJweVh3YzBIMkNvRHZISUFTQWloMG5oUkVISjVZQWdwQlh5K0lPY0xlbVhCemhmMGZNRk9wOWREcDlVaU5EUVVNVEV4Q3NDRmhJUWdMQ3dNNGVIaGlJeU1SRVpHQnRxMjd3UzFXdTFmWEg1Z3UzWVpPWElrVnE1Y2VWdWRVM1IwdEZmTnFRRE1aSzFNQmpiNTNzbWFtaTk0K2Y2L2IvL0I2SmpZMktacXRib3B3ekFwaEpBVUFJMEFhTy93VytnR2NGb1V4Vk9DSUp4eXVaeXA2UmZTVXgvcDI2ZEEwaFI5UVUwc0E0Q2dsQ3IvWDBHam80Umh3QkFHREVQQU1ES1lNWlJoMkFwQmpWV3hVS25VVUt0VVVLblYwS2pWRWhnU3FEVWExRXBJUUVCQUFBSURBeEVjSEl5UWtCRFVxRkVET1RrNWFOcXNKUVJCUUV4TWpCK1ovTUIyODhSb05DSTNOeGNta3drRkJRVW9MQ3hFY1hFeHJGWXJiRFliSEE0SG5FNm5vcVdWMWREK1FVc2pzdGxaQnRCOE5iTlMybGhaVUh1NDd5UHM0bmVXdE5icGRLMFlocm1QRUhJdmdBWjMyVzA2SjRyaW43azVXY2MwR3ZXZlk4ZU0rWFB2M3IyaUQ5aUpsUUNlWk1ZU1NnZ29RRUJJWlNESGdHRVpzQXdEaG1GcEtZQlRzVkN4bDdVMmxXeWlxdFVRUlJIQndVR0lpSWlBWHE5SFFFQ0FZcDRhalViVWIzQVBha2dhWEd4TUxDS2pvdnlMemc5czFTZkZ4Y1hJeWNtQndXQkFmbjUraFdhbjArbUUwK21FMisxV3pFNk80K0R4ZU1EemZDbFE4L0dqRVY4L1dnV2FHYW5BWDZab1ptUEhqbVVmZSt6eFR1R1JVZTJEZ29JN0VFTGFBd2p5M3pIQWJyZkJXbEtNVnZmZGE2T1VIdUo1L3BEVmFqMzg2cXV2SHZyaWl5OTRRa2hab0JNck1tM0xhSEcwbEYrT1VjQU5MTXVBWWIwZ3AySlpzTDdnSmdFY3d6QmdpRmN6TCt0L001dk5xRlU3Q2FHaG9WNFROU0lDMGRIUmlJdUxRM0J3aVArRytvSHR4Z25IY2NqS3lpcWxwUlVWRlNsYVdsWDhhR1cxTkZrNzh3ME95SnFaYkdiNmFHUyt2akpDS1dVc0ZrdmpvS0NnKzFtVzdRS1Fya2VPSEFtTlQ2anR2MWtWU0c3T0piUnAzYnJjYytyUTc0ZjNSVVhIN2k4b3lOL2Z2bTNyTkFuVUt0THF4RXBBN3JJbXh6Q1VJVDRhSE11Q2xiVzRjdHFiQ3FJZ0lqSXlRZ2t3NkhRNjZIUTZGQlVWSVM2dUpnS0RBaEVjSElMUTBGQkZlNHVKaVVWd1VCQ3lzekpodDlzcXZkN0F3Q0FrSmRkRlNHam9MUnZ6a3VKaVpGeThjTXZQVTNXM1RYWktLUXdHQTB3bUUzaEJnTTFxclhBL2k4VUNrOGxVU2p1ejIrMktkdVlMWlA4QVloVkdOV1dIdjJUL2dQajR4OHFDbWNQaDZLYlJhSG93RE5NRFFGUGY4M1E2SFg0RXEwU2NqZ3JISnRUdGN2YlZhclY5YTlaTXdLWHN2Sk04ei85aXM5bCtiWnJTYUQ4aEVIeUJqbEphVHFPVC9ITUFJWlNJSWtSQ3dJZ01CTUpRaGhIQXNneGhHQllzejFLZTVhRlNTUm9jcDRJZzhMRFp0TkJvTklwMjczSzVVRkpTQXExT0Q2ZkxxL2s3SE42NVpyTmFVVkpTZ2lKTEFRSURBeEVXRm5aRkxUWGo0Z1UwYTNIdkxSdnppK25uNFhEWS8xR2JydTd6Vk4xdG9IYnMyREdBTUFnTUNrWmdZQkJpWWt2djQzQTRrSk9URGJlSEI4ZUw0QVFSZ2tnaFVpaXZGS1QwUmxGbW82QVVFQ21GS0ZJaUtwRkw3MWJXeEtTVUVpcVptY1Ficm1PY1RtY2ZqVWJUaHhEU0IwRE5hNzNtSDNmL2dJMGIxc05rTWlJK1BoNGZiL29NNTg2ZHhkQWhnNVI5SmsyWmhvY2Vldmh1eGI4bUtwV3FTVmhZMkJ0Wk9YazVnaUQ4WUxmYmYwcHAxT0FueVZ3VktnVTVTaWtGb2Q0QUt3VWhJa1NSUUJCOEFJNWx3Zk1zV0JWUFZid0tvaWpBNFhDQTR6aW8xV3JGWFdHMzI2RXBMbGFBVG5adE9CeDIyT3cyRkppTUNBME5oYzFtUTJSa0pIUTZYYVdnY1N2bG4wRHRacDNuWFFWc0JvTUJJQXlpWStJcU5sMXljNUdYbXd0VHZnbG1zeGxGaFlXS0g4M2hzTU1wbTUxdU56eHVOenljQjV4SDB0WjRIeDhhTDBBUWVNbmNGQ0dLc3NsSkNhVWlLQVVCS0xsc2Nuci8vKzIzQTkwVEUycy9HaDhmMy9kNndNejNlaGJNbjR1WnMrYWdkZXMyS0NrcEFRRFVxMWNmUC83OEt3RGdwYUdEcTIyOE42eGZoOGNlNzRlSWlJaHk1N1ZzeVRzNGNlSnZhRFFhOUhpd0YwYTgraHBZbGdVQVpHZG5ZOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHBHT1dmUEV5Uk12YXJYYUY2ZE1uWll6ZE5qTDM5bnQ5dSthTldtMFh3STRvWXpaV2xhTGs0SVBJa1NSZ1NnU3lnZ0NCSVlGS3pCRVlIbUlva2lkVG1jNVlITTRIRkNyTlY1WGhqUy8zRzQzbkU0WEhBNG5DaTBGRXRBNVlMZmJFUkVSZ2NqSVNMOWE3Z2Myd0dUS1IyQlFjTG4zYlRZYnNyT3p2RGxwK2Ztd0ZGcFFYQ1Q3MFM1SE85MHVGOXdlTnp4dWp4ZlVPQTQ4eDRGVEFJMEhMd2NFRkZBVEpUQ1RFMmk5SUNhYm1hZE9uMjBTRUJqWWoyR1l4KzEyVytQOC9IekV4OGZma09zOWszWWFrWkdSNk5peEV3QW9DNEVRQXExV3EveGRYZkxoeHZYbzNLVkxPV0NiOGZZME5HblNGUCtaUFJmRlJVVVlNL3BOMUV5b2lYNzlub1FvaXBnMFlSeTZkWDhBcytiTWc4bG94TGl4b3hBVkZZMytUdzJvbHZPczVKZzFvNktpaC9WL2FzQ3dyQnpENmM0ZDIrMzR6K3k1Mzc0dzhQOU9BUkFrN1UwZ3hLdVlYOWJrS0tXVVVFSUVTaWtob2loU1FrUUlBa05aMXV1T2NMbGNVS2xVVkE0cXFkVnF1Rnd1cU5SMnlhWGg5ZE82UFI3SlhIV2h1S2hRMGVaY0xoY2NEZ2NjRGdlaW9xS2cxK3V2NmJxLzJ2SWwzbHU5RWovOXNoY0E4TXJMdzJDeFdFcTVZeVpObm9JZUQvWUVBSncrZlFxN2R1NUE4K1l0OEdEUFh0VytYaGZNbjR0dmQrMVU1dWpySTk5RS82Y0dJRDA5SFV2ZVhZeVM0aUlFaDRSaTRxVEpxRlhMNjJjK2VPQTNyRm16K3U0Q05sN2dFUmdZVkVaN3lFRnVUaTZNUmlQTVptOEtoMWRMczE3MnA4blJUby9rVS9QSS9qUXZxQWs4RDU3M0RRZ0l2bWthcEhSQUFNeEhIMytpNjl5bDYxTXN5L1luaFBUeWRhcmFTb3F1K3pxUEh6K0dHZE9uS1pyQTQ0OTZ6Y3grVC9USG9NRkRxdlFiaHc0ZXdNb1Z5MkV3NUNFeE1RbGp4bzVIU3BNbXl1ZDdmOTJERFJ2V0lkOWtRa3hzTElZUEg0RjI3VHNBQUVhKy9pcXlMbVVDQUVhLytRWlVLaFlKQ2JXd2N2VWFpS0tJcmwyNzRlRytmYUhWYWhFZEU0TldyVnZqN0prenltS3FFUjZPNXdZT2hFYWpRVUt0V3VqWXFUUFMwazVYMjd5b3dqRWJFVUlheGNiR1RyaVVuYmZiNlhSc256SDlyUjJmZmJiWkNZQ1hORGNaN0JTUWszMXhoRkJRNmpWVEthWFU3WGFENTNraUJSVW96L053dTkxZ1dSVjROUStPdit5ejVhUmdsTFdrUkFsTWVUeWVVZ0FYR1JsWm9mWW1paUlZaGluM053RGs1ZVhoMjEwN1MrMi81djExeXQ5dWx3dERCcitBanAwNkF3QldyMXFKOVBRTGNOanRxRmV2L3RYWitrMmFLSW5zVnpySHN2OWJ6R2E4dCtZRE5FNUpLZldkV2Y5NUc2TkdqVUh6RmkyeGErY09MRisyRklzV3Z3dVh5NG1GQytaaDVlcTFZTzRtWVBNTkZEaWRUcHc1Y3dabno1N0Z4WXZweU03T1FsNWVIdkx6VFFyQUZSY1h3eXFab2phN0hRNjdBMDZIMHlkWHpRMjMyMDNjYmcveEJoRTg0SG1PU0RscFJCUkZSaFJGaGxMS1VrcloxTk5ubTJkY3lwN2RyZnNESjFRcTFRZStvT2FyUFY2dnRHalJFdHUyNzhLYm84YWdaczBFYk51K0M5dTI3Nm95cUYwNGZ4NXZUWnVDRWErOWpsM2Y3Y1pUQTU3R21ORnZ3R1EwQWdBeU16TXdlOVpNVEp3NEJUdS8vUUdQUFBJWXBrNmRESWZrckYreGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF1OUpXZ013K0M1Z2M4akxLeUcxOWw4TVIwSGZ2c05iZHUyVTdUS0ZTdFhRNmZUS3hQOStMRmphTmFzZWJYTmk2czVKaUdrWjBCQTRNb0ZpOTdaWDc5Qmd5bHIzMS9YakZLcWhUZmhXUU5BRFZBVnBWUWwzM2Q1SGtoemduQWNSenlTTnVaeXVZakw1U0l5V0RtZFRqZ2RUampzRHRqc2R0aHNObGlsd0pYTlprTnhjVEVLQ3d0aE5wdGhNcG1RbDVlSHJLd3NYTHAwQ1c2M1d6blBJMGNPWStya2llQTREaGFMQlM4TkhWSktHMXUwY0Q1R3Z2Rm1wV1B5M1hmZm9sUG5Mb28yT095bGw3SDRuU1dvVTdmdVZZOXZTRWdJTkJwTmhaK3RYL2MrTm4rNkNRQnc0c1RmZVBPTjE4czljTXI2eVI5OTdIRTBiOUVTQUhEUFBZMWdsZ0F6THk4UFlXRTFVTE5temJzdkt1bzFTWTNJenNxV25pTDVLQ3kwNE1LRkM5ajl3L2ZvMXUwQnVGeE9PRjJ1eTZhbnBLVmxabVlnckVZTkVFSWc4RHpoZWErRzV2RzRJUWdDWVZVcThCeEhaSkhOemQ2OSsvUlorOEg2Wi9mOWIrOVRIMjdjQUk3alVMZGVQVXlhUEVWWlRMZVQ3Tnk1SFYzdjc2YVlzTDM3UElUdnZ0dUYzYnQvd01EblgwQkVSQ1EyYlB3WXRXcDcxZjlISG4wTVM1ZThnNnlzUzJqWXNHcjFqcWtuVDJMMHFKRnd1Vnk0djF0M2RPbDZmNFg3clhsdkZmUUJBWGpvNGI0MzdmcXJja3hDU0sySThJaFJRY0hCb3pLemNyZVdsQlIvMVRTbDBTOEE0YVhJcWlCcGJZS3ZCZ2VBOGp4UEdZYVI4eGVwbE5kSUdJWUJMNmdvTC9nbWNYdjl0MDZIbzFRK3BLelJlUlJ6MVd1bVJrbEp2YTFhdGNhdmUzN0J6Qm5Ua1pPVGpTZWZmQXJoRWtocy8yWWI2dGF0aDBhTlV5bzF6YmQrOVNVV0xuNVhlYTh5WUxwZWVmYi9CbUwwcURkZ05oZGczLy8raDFsejVpcWZtUzFtVEo4MkJXYUxHVzNhdE1Yb01lT2cxV3JScjkrVHlqNWZmUDRaZXZidURRQ0lqWTJEeFdKR2VucjYzYVd4aWFLSTlQUUxPSFBtaktTbFhVSmVYaDVNSmhQT3BLV0I1M2xjeXJxa1ZCTEllV3BPaHhOT2x4T1VVbmpjSHVKeHUwdHBhRkxhQnFHaXlCQkNHRW9wMCsrSkoxVVhMbDRhUEc3OGhCKzdkTDEvcTlsc2ZtckY4bVY0ZCtreWZQTHBaMUNyMU5qNjFWZTNiWkFsTHE2MG42OTI3U1FZREhrQWdLQ2dJQnc5K2dlR3Z6d1V6ejM3TkFhL01GQVozNnBLU3BNbTJQM1RIbnp4NVZiazVlVmh3L3AxNWZiNStLTVA4ZnZ2aHpCMzdueW9WRGZuR1Z6VlkxSktZU20wSUNnd0NBekRQQkVXVnVQVFM5bDVXOUxPbm4rMmVmTVdla3FwRHBlSkFYdzFPSVpTeWdpQ3dQQThUM2llSnh6SEVaN241Y0FCY2J2Y3hPVnllVk0vSEU0bFYxSU9IdkE4cjFRc2hJYUdRcS9YdzJReUlUYzNGMWxaV1VoUHZ3QktLWVlQSDRFL2ovNEJyVWFyZ0xUUmFNQ083ZDlnMkxDWEtyMjIzL2J2UTFKeUhjVEd4bDNYV1BidTNSdjkrL2RIZkh3OE9uVG9nUDc5KzZOeDQ4YWw5Z2tLQ3NJcnI3eUtMLy83QmJwMTcxN3F3VGgrL0VTODgrNVNiUHIwYzVqTlpueTlkVXVwNzI3NThyOG9NQmZncWFlZUJnRG85WHBNbmpJTjgrZk52bnMwdHFLaUlwdy9meDZzU2d0VHZoRVdzemMveldyMW1wcFpXWmNRR3hlSDNOd2N4TVRFS0U5Q1ExNGVPSTRESVFTVVVzSnhIZ0FFSE1jUlFlQ0IwaldhWlBOblh3UXZXamgvOEpLbHl3Y1JRcG9lUEhnQTgrWXZCQlZGdkRGcXRHS0NOYnpuSHVUbDVkNldZeFVURXdORFhsNnA5M0p5c3RHeXBUZnZhTi8vOXVMVFRaOWd5ZExsU0toVkN3RFFwVlA3aXJTYWNtRG5kcm53M1hmZm9rK2ZoNkRWNlJBWEY0Y2VQUjdFL3YzN3lrM2FIM2YvZ0dVclZ0MjBoTk9yT2VhUkk0ZWhVYXZSb0dGRDMrdnRHQmdZMkhIN3ptOWZkcnZkbjMzOTlWZi9uVEJ1YkFraFJKQjhjYklXcC9qaUJFR2dsRklxaWlJNGpvTWdpSlJsUlFpaVFBUkJvSUpLZ0NCNFFjODNKOUp1dDBPajBVQ24weW5sV2JMLzdmeTU4eWpJTDhDYU5hc3c4UGxCT0hzbURRdm16OFdreVZPeGM4Y09XRzFXdkRMOEpZQjR5UnlHREhvZWE5WitBSzJVUXZMRjU1L2g1VmRHWFBkNGZ2Lzk5d0NBRGgwNklDTWpBN201NWVmN2hRc1hNSC9lSFB4bjFoeHMzTEFPdFJPVDhQRERmU0VJQWxxMHZGY3hoWHYyN0lYRHYvK3VmTy9YUGIvZ3h4OS93THRMbHBlS2xyZHIzd0h0Mm5lNE96UzI3T3hzbkR4NUVsbFpXY2pLdW9TODNEeVlUSmVEQlVhREFZSWdJaWd3Q0VXRmhZb2ZyU0EvSDRJZ0lDUWtsR2kxT2tJcGhTQUloQmQ0SWdnOFlTUUJ3RHo1WlAvd2k1blpZenQxN25Jb0pqWjJjZHJwVTAyenNpNEJBSktTa2hFVkhZM09uYnNvaTN2SGptL1FvOGVEdHk2UUlwazZBRUFseWlRWmhCN3Urd2oyN3QyRHc0ZC9COC96K09XWG41RjY4Z1I2OXZLNkJNMW1Nd2dCR0paRmNYR1I0aU9oWXVrcWxyajRlQnc2ZUJBY3h5RmZvbW5TYUxYNDVPT1A4UG5ubThGeEhJcUtDckZ2My8vUXJGbXp5NmJ3anUzWTl2VldMRjIrVWpHZnF0MzhydUl4M1c0M2ZqOTBFUFBuemNId1YxNUZZR0JnUllEZVJLZlR6WG4yMmVlK1AzOGhZOFRxOTlaR1NScWNsbEtxb1pTcWZUVTR5US9MZU1rUGVNTHhIUEVHRGR6RTdYWVRsOHNOSDU5Y0tlM05icmZES2lYeHlyNjNyS3hMT0hUb0FPclVxWXR1M1IvQXRPa3pvTkZvWWJGWU1IVFlTL2o4aXkzWStORW5XTE4ySFRRYURUWis5SWtDYXFkUG5ZTGI0NmxXbjZhdkhQM2pDQ1pObm9yN3UzWEh1MHRYNEZUcVNWQktVVnhjakJjRy9wK1NvblQ4K0RFa0pTY3JmMy8wNFViTVg3Q293dkVIL3VYcEhwUlNuRDE3RnBtWm1RckZFS3RTbzZTNEJGYWJGUTY3SFE2bkU5azUyUWdJMEV2T1Y0TGk0bUlRaHNEbGNoTzFXZ1VQNTRFb0NnQkFmT2lCR0FEa2h4OS9DYmwwS1hQWWdmMzdoakVNVXhjQU9uYnNqSU1IRHlJd01CQ2RPM2N0Wnc3UG1UTUxEenpRbzFJZlIzVkwyUVRkQmZQbllzSDh1WGl3WnkrOE5YMEc2dGR2Z0xkbnpzSjdxMWZDa0plSDJvbUpXTGo0WGNSSTJjeDlIbm9ZSjArZXdOQWhMNEJsVlhqczhYNm9YNzhCTElXV1VzY1pNMlljRmk5YTZIMFMxNjZOZFJzK2drYWp3WUtGaTdGeXhUSjg4ZmxuVUt2VjZIcC9Od3dhL0NJQVFCQUVMRnJvTlFPZmZicC9hVE54MCtick5vOHFrcW9lYytScnI0SVFJREV4Q1dQSFRWQjhrRmVRdWxxZGJrYmZSeDU5b2NlRFBULytadHZYbjQwYk83cFkxdDRrLzV1aXhYbFRRNGhJS0FYMVZxaFFRUlFoaWdMaGVSNHN5MUs1Y3FVaWlpdjVZV1V3NUtGR2pYQTBhTkFRWjgrZWdjUGh3Sml4NDZxVTJ2UDVaNS9pcVJ1Y1ZuUGd3SUZLUHh2dzlEUEszeEVSRVJnL1lSSUFJRHc4SEM4T0c0YlhYeDBPU29Ia09uWFE3d212YjIzK3ZEbHd1OTBZNVJOb21QclcyMmpRb0NFS0N5MTRlZGpRZjIrdHFOVnF4Zm56NTNIcDBtVS8ybDkvL1FXR1ZjRnVzOEh1azV1V2xuYjZzdlpDS2RScU5kSHBkTEJhclRMdkZwR0lJQW5ETUlSU3lpUWxKYkY3OXU1L21XWFpsMy82NmNmRysvKzNGelArTXhzQWtKNmVqbmx6WnlNb01CQ0RYeHlLNXMxYktPZTFiT203NERnTzQ4WlByRGdpZVM0TlhidDJyZkoxN3QyNzEwOVFXSWxVTnBhM2NNeE9wNTQ0L3RIeTVjczNmL2ZkZHg0SjRCUVRGZDdhVlBtVnlzWDJETU5RUVJBVS9qZVZTa1ZabG9WYXJZWktwVkxJTFdYVE5DbTVqc1QzSnBGWnhzU2daczBFSkNjbmxVdDN1dEZ5OExmL1ZYbmY5aDI3Vk50NS9DczFOcVBSaUFzWExpQXJ5NXZDNFVzRXliQXFyelBXNllUTDdZTGRiZ2ZQODRpT2lRSFBjWEM2WE1SaHQ0TmhXUkJDaUNBSWNpNmFFdVU4ZmViOE15OE0vTDhSUnFPeGJYeDhQUExLK0E3cTFLa0R1ODJHZ29KOE5HMTYyY1RhL09rbW1NMW16Smc1NjRaZHExNGY0RWV3cXh5Yld6aG1qV3JVQ0orL2MrZk9KMHBLU2o0TUN3dmJRUWpoZkFGTzB1S0lWNHNEcFZTZ29sU3JKL25qSUlvaVVhbFUxSmNWUnRiYUFJS2lvaUx3SEs4ays3cmRicmhkTHJoY1RpUWxKbFVySFZKQVFHQ1Z5cW9DQWdLcmRhRC9kY0NXa1pHQjlQUjBaR2RuSzBtQmN0S3QxV29GdzdCS0tvZkg0NEhGYklGS3BZTGI1U1k4ejROS0JlcmV0QTJHaUNKUEJFRWdBSmcyYmRwMmYyZkowbGNEQXdQN1Rwb3lGVk1uVDBTTjhIQ29WQ3dDeWl5V2pwMDZvNlM0U0VrMk5Cb05XUFBlS2lRazFNS1FRZDRvSXNPdzJQalJKOWQxdlN6THdtNjNWZnVUK0U0VHU4MWFhUWtXYzR2R3pHNnpnbFdwUUFocEV4b2Eya1lRaEw0bWsrbkR1TGk0QTRRUWpsTEtFMEprZ0JOQklJSkNoQ2dxQkptaTZNMGFrYW10UkZGVXpGTUEwT24wc0phVWVGTkNlRGtsaEx0Y3llQnl3K2x5b1pZVTlMblJrbHluM2o4V3dnY0VCQ0s1VHIxcUhldC9qU2xLS2NXWk0yZVFucDZPbkp3Y0dJMUdoV1pJcnZmTXlja0JZUmd2SzBlcHNpaWVlTms0ZUYvNklGbExZMDZrcGpVSURnNStqUkR5eXEweW55b0g4a3lZTFJiRXhNYjcwY3hYYXpma0lqSXlBb20xeTFNNlpXUm13bXkrK1dObU5PUWlJaUlDU1ltbHo0bmp1SFdwcWFrZnQyelo4Z0lBRGdBdlJWSVZINXpNSCtmTENlZERjRW5MbXFVeUpaSWNNWlZUUThMRHd4RVZGWVc0dURqVXJsMjdXa3ZxYnFYOEt6UTJ1WW9nSXlOREFUV3oyWXppNG1LZkluWUgzRzQzUkVwOXk2SUl6L1BnQlI2aVFpdEVDUVVsb0pUMGYyb0F1M0RST3lOWmxuMERRTUxOdUphZzRPQ3Iyajh4c1RieTgwMHdHbklSRkJ4eTEydHVkcHNWTnBzVkFzOVhDR29Ba0pTWUNKUHA1bzJaZkU2aUlKUUROUUJRcTlYRFdyUm8wY2R1dDYvdDNMbnp4OGVPSGZQSUFBZHZrTXEzQUYvaGhwTkJqbUVZSXZuZnFFeFI3dHRjUmdZNFg5WmV1ZWRDdzRZTnI3blc5SGFXTzE1akt5d3N4Tm16WjVVOEdWOE90Ykpra0lXRmhmQldDL0RnS3RmU0dBRGszSVdNbmhxTlpoU0FCMjdtb25TN25Xald0T2xWYTZzWE16SmhzWmdoOENKY3JydVRvMDJ2RHdERHNvaU1pRVJpWXExLzFFWXlNeThodjZBQUFpOVUyNWpwOVFGZ1Zhb0tOYldLUkJURlBTYVRhVjFjWE53K1FvaHZnSUdYTkRkQkFqUlJEaTZ3TEV0OXdJeXExZXBTSkphK1BSYmtCakp5ZDZ5a3BDUTBhTkFBTldyVThBUGJiV051R0kybDBqbGsydTZLR0c3ZGJqZnNkanRjTGhjUktZVWdFVUVxV2hxbEJLRE1rYVBIWXFPaW9rY1JRa2JmN09zeEdmTVFGeHVEdUxnNCtPWHVGby9IcytxWFgzN1oyS2RQSDRNVVlKQTFPTUVuY2lxREc1VzFOVmxUVTZ2VlZHNEJXQmJjZkUzUytQaDRKQ1ltb2tHREJ2K3FKakozckNtYWxaV0ZjK2ZPSVRNelUwbm44RzJ1SXRPNitETGRDb0pBUEI2dUl2WU5CZ0J6NGVLbC9pcVZhalNBKzI3bXRUanNOdGlzSlFDb0g5VDhBZ0RRYURTdjllclZxNFBaYkY0YkVSSHhIU0dFbGNDTjg4bC9JMTRsVHhSOUd2NVFINnA1V2xtdVcyVjFwOVVWVlBBRFd4WGt3b1VMT0gvK3ZBSnFjanBIMmVZcVplaTdDY2R4QUtoODArVXVUOHkyYmR0cWhZU0VqTW04ZVA3Vm0zMHR3Y0hCVUtsVWlJK1BRMnhzckg5RisrV3lPVVZJeS9EdzhEVWVqK2VEMzM3N2JVTzNidDJ5Q1NHTWJKcFNTbmxjWmw0V3ZWNEo2aHNwSmI1UjA3THBJVEo5dlMrMXZjZmpRZDFyWVBEd0E5dDFTbHBhbXBKNEszZU5LaXpGZE9zb0MyckVweGVCNGt1RFZEbmdkcnVmVUt2Vll3RzA4aThsdjl5T29sYXJYK3JhdGV0OStmbjVhNktpb25aTHZqZEdBalZaZTVOVFFjcHFiK1hTUXNwV0x2aDJUcE1CN3A1Nzd1eWtiNUtSa1hGSG5LaGNIaVVIQ1h6OWFXVzFOSjlPVWNSYldPenREQ1duY0ZCS3ljOC8veHlXbUpnNGptR1lDZjZsNDVjN3lQZTJiT3ZXcmVzblRacFVDTURqaytBcnlQNDN1V3BCU2dueDliMVIzd29GdWZWZlVGQlFPYitiSEZTNFU5TkJWSW1KaWJmOVNYSWNoOVRVVk1WM1ZsR0hxQXE2UXZsMlUvY0ZOY1p1dDNmUmFyWGpDU0U5L1V2RkwzZVl2RGwrL1BpVVo1NTVabTFTVXRJUkFDd0FPWHBLVUpySkY2SW9naEFpbDJRUm1mK3RySWJtVzJUdmNEaGd0VnBSVkZTRWxKUVVxTlZxdnlsNm84WGxjaUUxTlZVcGtaS3JDWHhiNGlrOUNTVENQVmxUazAxUENkZ1lTaW5qOFhpR3N5dzdFWUEvbzlVdmQ2UXdETk1qTVRHeGNVbEp5Y3FRa0pBdkFEQ1NlU29ubFpjS0xNZ1dEL1VLa2FzWGZQclk0a3JGOVNrcEtaVjJ4YnB0VGRIYk9kM0RicmVYQXJXeTFRUmxHeGJML2pUSi9KVHJQQmxSRkVsdWJtNThkSFQwQkVMSXEvNmw0WmZiMWQxaU1CaGdOSm9nQ0FKc051cy9mb2ZuK1hWSGpoeFpOM255NUZ4SmM1TXJGNVRpZXArOE4waXBJWElTcjVMekpuZW1MMXVsRUIwZGpabzFheUk1T2ZtMkFMZmc0QkN3TElQbzZPZ3JaaERjdGhxYjFXcXRGTlJraGx1NTk2SnZrRUFHTlovSUoyTzMyenRydGRxSmhKQUgvY3ZITDdjcnFCMDdkZ3dVUkttR3FHSlcyYkQ2RFJ2WDZkcnRnZmM2dEd2ekJ3QUczc2lwVElEcXBVWHkva09sdnJkZWpZMVNMME9TMUFkWDN1UWV1b0pJd1FzVUhDL0M3UkdRbUp5QW9LQmJYOWxpdDl1UW0yZEFibDRlN3J2MzNqc0gySXFMaXhWUWs0dlp6V1p6aFpwYUpaRlB4Wi9tZHJzSHFsU3F5UURxK1plUFgyNVhNUmdNb0NEWFZML0tNRXozV3JWcUo1NU1UVnZSSk9XZUhhQ1VvWUJ2M3cxQm9nc1J2YkVBQ3NrQ0JienJoQ29tcVJ4UmxjeFVVYVFRcVJSTnBTSWFObWlJNEpDUVd6cFdnWUZCQ0F3TWdzbVlCNFBCVUdHYTFHM0ZvUHZERHorZ2ZmdjJpSW1KUWRldVhURmh3Z1RzMmJOSFllaW9LQUxxVnZvUGVIMXEwc2FJb3FpYVAzLytsUFQwOUxYZmYvLzliUU5xUE05ajFLaFJpSTZPUm1ob0tJWVBINjUwZC9MTDNTc21VejZDZ3E4TE1PcUdob1V0UG5mKzR2Q0c5elFLQUtDVHVtZkpQUmRZU3NGU0tuZkxFZ2pQYy9Cd25KZXAxK1dXZWl4NHUyTlpyVllVRnhYQllqSERaRFFoSnljSEdSY3ZJdTFNR2txS2kyK0xNUXNNQ29aUjZweFdWdGdaTTJiY0ZpZTVkKzllOU96WkV5a3BLWGpnZ1FlUWxKU0VvcUlpSEQ1OFdJN3NLSUJXMXZ5VXRUUXZ0YkxBcEtTazFQcjg4OC9uZHUzYWRjeUFBUU9Za0pBUWRPblM1YmE0em9rVEoyTGJ0bTM0OU5OUDhleXp6MkxwMHFVNGRlb1VIbnZzTWYvcXZvc2xOemNYTmNJanJ2cDdwMCtsWXQ1VTdNZUhBQUFnQUVsRVFWU2MyZWpWdXc4QU1DcTF1dU96Ly9kY1NLdldiUzU4dmZVckIrQlYzU296ZnlsQWNMbVJ0MlNPMHN1YnBLa1ZGT1RqME1HREtDd3NSRVJFQklLQ2dxSFQ2ZkQxMTE5aC90eloyTFp0S3dvdGhXZ3BtWWI1K2ZsNGE5b1ViTjY4Q1QvLzlCT2FORzJLME5Bd0FNQmZmeDNIdENtVHNIWHJGaHcvOWlkYXQybDdUVjJ3TkJvTnJOWml4RmZnYTd0dFRORzFhOWVpYWRPbWVPYVpaNUNWbFFWQ0NGcTJiSW1DZ2dLY09YTUdLU2twbFNYZWxnb1NQUGpnZzYwYU5XbzBwVnUzYm4zbG0zZTdpTjF1eDZwVnE3QnAweWFGbXVqOTk5OUh6NTQ5c1dEQmdncWIzdnJsN2hDcnRRVFIxMkNHTnJ5bkVkNmUrWjlTNzZuVjZrRmR1blNKL3VYWC82M3BmbitYRTVSU1JrSTN4VFNWc1UwVUJKR1hmRzJBOTlVTGVCS3dnZUpDK2dWd0hBZVdZUkVSRVlHTWpBeFFBSUdCZ2RpNlpRdldmckFlR28wR1k4ZThpU05IRHFOMTZ6Wll2V29GdW5kL0FIMGZlUlIvL0hFRUMrYk54YXIzMW9MbmVjeWJNd3Z6Rnk1R1VsSXkxbjNnN1N2NjBzdkRyMm5jZkhzRjMzYW1hRkZSRWV4Mk8zSnljbkRod29WU1ByWEV4RVFrSmlZcUtSMTJ1eDM1K2Zta3NMQVFOcHVOdUZ3dUlnZ0NJNG9pazVTVTFQdkhIMzljc256NThyNkVFSFRwMGdWSGp4N0ZXMis5aFhidHZBMTUyN1ZyaDltelo2Tjc5KzRJQ0FoQXZYcjE4UDMzMzJQWnNtVklTRWhBYUdnb2hnMGJwaEQzVVVveGI5NDgxSzlmSHhxTkJoRVJFUmcwYUJEc2RqczhIZythTm0yS0J4KzhISlBZdEdrVHRGb3RqaDgvRGdEbzM3OC9Xclh5RmpVY08zWU1UcWV6Rk45YTU4N2VUdHNIRHg3MHIyNi9sQk96Mll5eFkwWmgwUFAvaDhHREJ1TDNROTU1a3AyZGpRSDluOENUL1I3RnFEZEdsdnJPNUluak1XVFE4MzFtLzJmRzFKU1VsQzRBZEtEVXQ1RU1LNG9pSzY4YnBZa014NkdrcEpnWURIbGVRa3FudDNGelpHUWtHalpvQ0kxV2c1S1NFdVRtNWlBekl3TzdmL2dCS1UyYUlDREFTN0phSTZ3Ry9wTG0vVjkvSFVlWEx0NTVIaG9haXJTMDAvQjRQRERrNVVHbjF5TXB5ZHVZSlR3OEhIOGRQM2JEeCsyV2EyeHlvS0JkdTNiNDl0dHZNWGZ1WE1URnhTRWtKQVI2dlI0eTE3dWMwbUUybXdrQXFGUXFRaW1WdTY0elZxdjFXWTFHTTdWdjM3NzFHelpzaUVXTEZvRmhHTFJ2M3g2UFBQSUlwa3lab2h4ei92ejUyTEZqQnpwMTZvUlhYbmtGL2ZyMXcrT1BQNDdUcDAvajFLbFQ2TmF0R3g1NjZDRTg4Y1FUV0xWcUZSWXVYSWpObXplamNlUEdPSDc4T0FZT0hJam16WnRqekpneCtQREREOUd1WFR0ODhza242TjY5TzBhT0hJbVpNMmVpUllzV0NyQVZGaFlDQUhKeWNoUnc5SG02SWlJaUF0bloyZjVWN0pkeThzWG5tOUdzV1RNTUd2d2kwdFBUc1hyVkNyUnQxeDRKQ1FuNDc1YXRPSGZ1TE9iT0xrMDFQMi9CSW1sdEZiVVovdExROEE4LyttVEY0RUhQZnlzcE1rU3lUamtLQ040SE9CR2xmRjRRUXFoS3BTSnV0OXVyeEFHZ29DQ0VnZHZsZ3MxbVE3NHBId0JCWm1ZR0FnSUNjUEZpT2xZc1d3cEJGQkFzK1FtTGk0dWgxZW13WS9zMytPbW4zZEJvTkxEWmJDZ3BLWUZXcTRYSDQ4SEtGY3VRbTV1TG9xS2lHejV1dDFSajgwM3BFRVVSQXdjT1JOMjZkV0V5bVhEcTFDa2NQWG9VcWFtcEtDa3BnZHZ0UmtsSkNaSEFRSW40TUF6REJBY0h2L0xsbDE4dTBtZzA5ZVdHRnpxZERocU5Cb1FRaFZsVWxuNzkrcUZidDI1UXE5VjQ0b2tuNEhLNU1IZnVYQVFIQjZOdDI3Wm8wcVFKVWxOVEFRQkpTVWxZdjM0OSt2VHBnOFRFUkR6MjJHUG8ycldyOHZsOTk5MkhTWk1tWWZ6NDhSZ3laQWlhTkdtQ0NSTXVWMms5ODh3ekdESEMyNlBSNFhCVW1BdWsxV3FsRGxsKzhVdHBhZDJtTFg3KzZVZDg5T0ZHdUYwdUxINW5TWlcrSjRvaVpzNTRHdy8zZmJUZUF6MGVuSFlxN2R3QUFEcHAwMUJLMWFCVUJZQUZLS09rUndHRVpWWGdPQS94dUQwK3JmN3NjSHM4Y0RnY3NCUmFrSjl2UWxGUkVVNzgvUmZHanh1RDU1NS9BZDI2bGFZdW5EZG5Gakl5TG1MeE8wdWgxV3BMS1ROalJyK0p4bzFUTVBLTk42dGwzRzRac1BrbTM4b3BIUzZYQzNYcTFFR3JWcTNRdUhGalJFUkVRQkFFR0kxRzRuYTdKWFlPN3hOSHpsSGpPRzU4U2tyS2d0VFUxQ3AzcVBBdEk1TUhQQ0Vob1pSVFVnYWF2bjM3b25idDJwZzVjeWFlZSs0NXRHalJBdDk5OTUzVU9NTXIwNmRQUjBSRUJQYnMyWU9QUC81WTZYTlFWdlI2UFR3ZVQ3bjMzVzUzcGYwUi9YS1hBMXZyTmxpNWFnMXFKaVRnNDQ4MjR1MjNwbGJwZSt2WHZRK2RUb2VCejc4QUFGSEJ3Y0Z2ZmYzTjlzRUE5Qks0YVFraGFrS0lpbExLQW1COEFuQ0U0M2g0T0E5UklxWk9KemlQRitoS2lvdGhzVmpnY2J0UlhGS0N4eDkvQWdRRUpkWVNoSWFGS2Vabmg0NmRNUEtOVVZDcjFmQjRQQXB6YjBseE1VYVBHWWZlZlI2Q3krVkNtUFNkT3g3WWZNdWtzck96a1pPVGd5MWJ0dURpeFl0S25ockhjZERyOVFnSkNTR0FsLzdiRjlSV3IxNnQ1amh1T3NNd3MwVlIxSlh0T0g1RisxdFYzZ0t2ck5oM3laSWw2TkNoQXpJek05R2hRd2VzWGJzV3ZYdjNMcldQMFdoRVRrNE9LS1g0OWRkZkt6MXVRa0lDWEM1WEtkV2I0emlZeldiVXJGblR2NHI5VWs3bXpaMk53MGNPbzBlUEJ6RjV5alFjT25RUS96VFg5Ky9maDcyLy9vb3BVOS95bmRlNkprMmFUcm4zM251SE4ydldQQkJTT2dpbFZBMHBIUVFBUzBXUjhEeEhCSUVuUEZjNkhZVG5lYmpkYnNXa1ZHczBjRGdjS0NqSXg4V0w2ZGo5dy9kbzFMZ3hBS0JGaTViS2VmNTU5Q2lTa3BLaDBXZ1FHeGVIMExBd2FDVUxhdisrZldqZW9zV2Q3Mk9UQzlwOWF6K0xpb3FRbjU4UGg4T0I1T1JrMytSYkltczRjdnM3QUdUbnpwMUJQWHYybk1vd3pMaWlvaUtjT25VS1E0Y09yZkI0MTh0T3NHVEpFa3llUEJrelo4NVUzc3ZJeUNnVndYenBwWmZRb2tVTDlPdlhENk5IajBiUG5qMHJCS3FXTFZ0Q3I5ZGozNzU5ZU9TUlI2Ukp1QjhNd3lqQkRiLzR4VmNHRG53Qml4Y3Z3T2ViUDRVb2loZ3pkandZaGtGMmRqYkdqSG9ESE9kQmNYRXhCdlIvQXZmZWR4OG1UWjZLbGN1WHd1Vnk0YlVSTHl1L3MzTDFXZ1FIQjJQQm9uZEd2N05vb2FhZ0lIOWRibTZ1L0lTVm82Vzh0TllFYjJNc3dldGlrL2JoZVlGNk9LODVDZ0lFQndVakxpNGVuMjd5ZHBLLzk5NzdFQndjREo3bjhlcHJJekYvM2h4OCtkOHZvTmZyTVhIeUZFV3BtREwxTGN5YU5RT2NoME90V3JVd1lkS1VPeHZZS0tYbHlxVGs2R2R5Y2pMT256K1AxTlJVQkFRRVFCQUV1TjNlcHdRaFJDYlRJeWtwS1RWbXo1NDlOU0lpNGsyMVdvMHBVNllnSkNRRUF3WlUzTDA2S0NnSUJ3OGV4S0ZEaDY0SlBNTER3M0hnd0FIazV1WkNFQVFzWExnUXAwNmRRbE9wTDhINjlldXhaODhlL1AzMzM2aFhyeDQyYmRxRWwxNTZDZDkrK3kwQTRQUFBQMGRoWVNGR2pCaUJ3TUJBREIwNkZLKy8vanFDZzRPaDBXZ3dmUGh3REJreUJPSGg0ZjVWN0pkeVVxdDJiU3hidnFwQzdmKy9XN1pXK0ozUC8vdFZwYjkzenoyTjhNSDZqYSs1M1c3VjVrODNyWnYrMWxTenRMWjhsQUVHbElxQ0tES2x3QzBvS0FnYXJVYTJua0JBVUNNc0RFbEpTWWlJaUVCTVRDd3lNekxBc2l3YU4wNnAxQi9ZdEdrenJIMS9mYldPMjAwMVJhOVUwQjRVRklUWTJGaUlvaWlibzBRR05aWmxDYVdVWExod0llTDc3NzkvS3k0dTdzMEhIbmdBWGJwMGdWYXJ4Zjc5K3l1MTAxOTc3VFVjT0hBQWd3Y1B2cVp6M3JCaEEwcEtTbEMzYmwyMGE5Y09OcHNOa3laTndwOS8vb21zckN5TUdUTUdVNmRPUllNR0RjQXdERDc0NEFQOCtPT1AyTEJoQXdCZ3k1WXRXTC8rOGsxY3ZIZ3hIbnJvSVR6KytPUG8yN2N2N3IvL2ZpeGJ0c3kvZ3YxeVUwV3IxUTUvYnVEQWwrY3RXQlFGUUN0VkthaTl5bzVTcFVCRTBadDU0RzNBN0Ewb3VOM2VLZ1dIdytFMVN5V2ZtOGxrUW01dUxqSXlNbkQyekpsYmVuMDNqZDBqTFMwTmFXbHBTb3M4dVp1VVhDYmx5M3hiSnZtV1VFckptVE5uYXRTcFUrY3RRc2hJLzdRc0xhSW9JaVB6RWl3V0N3UkJnTXQ1ZDVabzZmUjZzQ3lMOEJvUlNFcXFYV2tRUjdZZXZHTm1CczlYMzVqcDlIcW9WQ3BFaEVjZ0thbHk3c085ZS9laWJ2MmJ6MXJyY2JzLzJMVHBrL2Zmbmo3TkFzQkZDSEZEYVJ4REJFSWdFTUlvRFdQVWFoWFVHZzNWYXFTK3BRRUJDQW9NUkxEVXppOGlJaEt4c2JHb1hiczI2dGFyajNyMXFyZWFzYkkrdkRmRkZKVjdGSlRsVTVNN1NSMC9mdHkzUW9ENDJ2M1NGbFN2WHIycEFQN1ZvR1l3R0s2NlU1RGI3Y0ZmZi8wRlZxVkNjRWlvdjYrbzNZYkNva0lVSE0xSGkrWXRvTkdvS3dTMVAvNDRDb1psRVJSYy9XTm10OXRndGxpUVg1Q1AxcTJ1ekVDZmMvUHpHVi9xMXEyN2VISElpMnMvM0xoQldZZGUwOVJiWWdXSWdpaFNVRzh4UEJVRWtRaThRSlZ1OHo0a2xVNkhBM2E3RFZackNZb0tpMkF1S0NpVmNYQWpwZVlWZnJmYWdTMHJLNnRVajRLeTNka2REZ2RxMTY2dGFHb2VqNmRVN2VmcTFhdlZ3NFlObThvd3pKdndTem5KTStTQlZhbjhuZUFsa1prZmpJWmM1T2JsSXFrQ2h1aUxHWmxnV1BhbWpabnZPV1ZtWGtMaUZmcUwxa3hJdUJYRE5uenF0T2w4UmtiRzJsLzMvRktaaGl0Y0JqdVJVaW9TU3N2M1VlQWxabDZQaDRQTDQ4MkJJNFFnL2laSC9hc1YySXhHbzlJaXIyempsUW82U1pHS3VOUWtVQnZuWDdJVmk3bkFqS0NRVVA5QWxKR2c0QkFVRkpnckJEYUx4WUxnV3pCbVFjRWhLREFYWEJIWWJwa1pyOU85OXY0SDZ6ME42aVd2bDdWYU9hQkF2ZEVGS3BiS015RVVJQVFnY2xkNkVFTEFlTWtzd1RBc1dKYUZpbFZCNVRWZkVSVVZkZWNEbTl5aFhXNlJsNStmWHltZGQxbWZtbS95TGNNd1UvM0x0REkvRVNBSXdsMXZmbGFtSlJVWFdTcjg3RmFOV1dCZ0VJb0xMZGYwM1pMaVltUmN2QUM3M1hiRjMwOUtyb3VRMEdzRGJiMWVQenJ0N0FYWFBRM3FicEx3VEpscVBtTW5YbTdmeDFHTzh4QUorRUFZQXNJd0VyQXhZRmtHS3BYQzFndU5Sb1BRME5BN0Y5aWNUbWNwVUN2THAxWUpTYVRjZklWSXZRbGVZUmhtMnBVWDl0VlRLZDl1VWxXcTQ0cUVFTURwOUhPNVZUb1BLK0c1dTVYQmxXdTlYeGZUejhQaHNGOXhIN3ZkaG95TEY5Q3N4YjNYQWI2Qm8wK2VPdU5vMHJqaFZoOVFvMlUwT0JFQUZVV1I4RHhQblU0SFlWbVdNb1NBRUFZTVF5Q1hObm8zRlZScU5UUnFEUm8xYm54VEtNWnZPTEJSU25IbXpCbWxUWjRjL1N5cnFaV0pmc3FOSlJpSjlmWlpsbVdud1Z2NlVlbHhycEZLK2JhVHFsQWRYNnY4dVBzSGJOeXdIaWFURWZIeDhmaDQwMmM0ZCs0c2hnNFpwT3d6YWNvMFBQVFF3MzRrdkkzbG4wRE5keTVkcjFVYUdocjZ4ckcvVHRwYk5tL3l2YSsyVmdiY0FFQ2tsSHA5YXB5SGVIc3JYQVkyaG1YQk1oS3d5VnFiVm9QR2pWT3F2YTNmRFFjMlgxQXIyOHpZYnJkWFNPZnQ2MWR6T3AyOVZDclZWQUJYTk1pdmgwcjVkalNiL29ucStGb2tOemNYQytiUHhjeFpjOUM2ZFJ1VWxKUUFBT3JWcTQ4ZmYvNFZBUERTME1IVmRsMGIxcS9EWTQvM0s4Vm1JcC9Yc2lYdjRNU0p2NkhSYU5EandWNFk4ZXByWUZrV2dKZVNaOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHZtblkzYnAxQjVxdFJxRU1FaEtTc0tRb2NQUXNXT25meXVPUmtWRVJMeTZjdVhLa3RkZmYvMUFHYzJORWtLbzlEK1JtMkR4SE9mbEltY0lKUXdCUXlRL202UzVLY0NtMWtDcjBhSmUvZnJWZWdFM05FRTNJeU1ENmVucGxlYXB5ZFJEVW9zOCtMTGZVa29acTlYYVNxUFJUQVh3ajFkOUE2aVVieitBdXdMVjhUVTlaTkpPSXpJeUVoMDdkb0pHbzFIS3dBZ2hTbWVpNm54eWZyaHhQU3dXYzduM1o3dzlEVFVURXZEMU56dngvZ2NiY09qZ0FXemZ2ZzJBTnlkdjBvUnhhTkR3SG16N1ppZFdyRmlOdmIvdXdkZGJ2NnEyODZ6cU1WZXVYb01kdTc3RGtLSERzSGpoZkd6OWFzc3RtU2VFRU54Nzc3M28yYk1uZXZUb2dmajRxM3U0QzRLQTMzN2JqOGtUeHlNN0s2dXlZOVNMaW9vYXZtREJnc2FTNVNUVGpLdVZ1bEpLNVc3MGhPZDU4SnczOWNOVEt2WERqc0tpUXZ6MDQyNnNYZk1lNXMrZmcvMzc5eUZMT203V3BVc1krZnFyZVBhWnB6Qm0xQnNvS2lwVXp1R2pEemZpdVdlZnhqTlA5OGV1blR0dWpjWm1OQm9WVURNYWpRcW95YmxxdmwzYWZUcTBLNkJtTUJocTZmWDZLUURhVnZYbS9OdWM1b0dCUWJCWnI1OVAvdmp4WTVneGZSbzhFczNNNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWc3JtZW9XaXdVMXdzUHgzTUNCMEdnMFNLaFZDeDA3ZFVaYTJ1bHFHL2VyT2FaZXIwZkhqcDJnbmpJTmIwK2ZobDY5Kzl4MFpwYms1R1N3TEl2ZHUzZERxOVdpZS9mdXlNL1BoOFIrVXdxdzVTUmwzNy9mZk9OMTFLeFpFNmRQbjRJZ0NsY0MwTmFKaVluRHhvNGR1K2lkZDk3SmtiVTJINStiSEdBUUJVRUVJYnkzN3BFd2xEQU1DRVBBc0F4eWMzTkJDTUVEUFhvQWxHTEQrbldvVjc4KzlEb2RsaTU1QjQ4OTNnODllanlJTHo3L0RPK3RYb1hKVTZiaHhJbS92WE5zNDBkd3U5MFlQbndZV3Q1N1g1VkIvSVpvYkZhclZXSHE4SzMvbER1M1h5bXRnMUpLWG56eFJUWWlJbUl5SWFSdjFZOVpja01uaTlsc3h1UkpFL0RjczA5ajN0elp0d3pjS3FNNnZocHAwYUlsdG0zZmhUZEhqVUhObWduWXRuMFh0bTNmVldWUXUzRCtQTjZhTmdValhuc2R1NzdiamFjR1BJMHhvOStBU2RJbU16TXpNSHZXVEV5Y09BVTd2LzBCanp6eUdLWk9uYXcwcFZteGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF2WGVDY2N3K0M1Z2M4akxLeUcxeWwrTVIwSGZ2c05iZHQ2NjNnakl5T3hZdVZxNkhSNlpVRWVQM1lNelpvMXI3WXh2NVpqdG03VEZoNk91eVdsUTVHUmtjak56VlY4WGFJb29rYU5HcVgyT1hMa01LWk9uZ2lPNDJDeFdQRFMwQ0d3V0x3UjJYZVhMTVBrS2RPcXBCZ3dETlA3dnZ2dUd4d1RFNk9YdERhZjBpdXdBQmh2UnppUnVGd3U0bks1d0hFZVlqR2JrWmViQzVmVGhlTGlJZ1FHQnFLa3BBUXF0UnFDSUNEMTVBbGtaR1lnTGUyMGN1OGZlcmd2RHY5K0NBQncvdHhadEdqWkVscWREaUdob1dqZnZnUCtPSEw0NXBtaWxOSnlWUVcrbXBwdkJOUzNRN3R2QkhUTm1qV1RDQ0hEYnNSTi8yckxsM2p1MmFmeDdETlBZZjY4T1hDN1hGWDYzdnRyMzhNOTl6VENwNTk5Z2JIakxoTkZtb3hHN055eC9hNXlWTy9jdVIxZDcrK0dqaDA3UWF2Vm9uZWZoM0JQbzBiWXZmc0hBRUJFUkNRMmJQd1lqVk5Td0RBTUhubjBNWEFlRDdLeUxsWDVHS2tuVDZKbmoyNFk5UHh6dUtkUkkzVHBlbitGKzYxNWJ4WDBBUUY0Nk9HK04rMzZxM0pNUWdqQ2E0VERkdjNPK3FzV2pVWURRUkFRRVJHQlRwMDZRUlRGVWtTT0FOQ3FWV3VFUjBSZzVvenBHRHZtVGZSNzRrbUZhT0ZxRzZlb1ZLcm5GeTFhTkJCZUxqZGZrMVFsWVFnalVrb1lob0hINHlFMm13MHVsNHNFQmdiQzdYWkRwVkxCWU1pRDFXcEZkblkyQ2dzdHlNM05SVzVPRGlJam95QW5CUjg2ZUFCV3EzYzg2OVN0aDZOL0hGRW9rbEpUVDhKbXM5MDhZRHQ3OWl3dVhicWtwSFZVcGZkbm1Ram93QnVWcTNiaXhOL1lzdVcvV1B2QmVueTYrUXN3RElQMTY5ZFY2YnZuejUxRGg0NGR5OTM0L1B4ODdOanh6VjBGYkFhREFYRnhwVlgrMnJXVFlERGtBZkN5UEJ3OStnZUd2endVenozN05BYS9NRkRSZEtvcUtVMmFZUGRQZS9ERmwxdVJsNWVIRFJYY3A0OC8raEMvLzM0SWMrZk9yNUJEcnpxa3FzZWtsTUpTYUVIUUxYS0hKQ2NubzFHalJ2anR0OStVb0ZCWjRCMCtmQVQrUFBvSHRCcnRkVDBZOUhvOUJnNGMrS2JCWU9oWmdiL05xN2w1L1cwTUlRU0NJRUN0MWtBUUJPTHh1QkVVRkF4ZUVIRDQ5ME00ZlNvVkRNUEE0WERBWkRLaFY2L2UrT2FicnpGazhQTklUVDJKd0VCdi80VG16VnVnWjY4K0dQbjZDRXlmTmdVQitnRG9BL1EzeDhlV25aMWRMbGZOdDFUS0I5UlFVUVRVYnJkM2xwb1ozNUJaYTdOYUVSUVVqSUNBQURBTWd4ZUh2b1NMRjlPbHhacUhSUXNYSU45a1JHaFlEWXdiUHdHSmlVbjQrZWVmOE44dlBrTm1aaWJtenBrRmpVYUQ1NTU3SGwyNjNvK2xTOTdCc1QrUHdtQXdZUGpMWHI2M3RlK3Z4NGIxNi9Ebm4wZGhOQmlRMHFRSkxxWmZRR1JVTk41NWR5a29wVmk5YWlYKytPTXdPQStIOWgwNjRyWFhSNEpTaW5GalJ1SCtidDN4eUtPUDRjU0p2ekZuOW4rd2J2Mkh0MFYzYlYrSmlZbUJJUyt2MUhzNU9kbG8yZEtiaXJMdmYzdng2YVpQc0dUcGNpVFVxZ1hBR3pXc2FIR1ZCVHUzeTRYdnZ2c1dmZm84QksxT2g3aTRPUFRvOFNEMjc5OVhhcjh0WC80WFArNytBY3RXckxybWhOT3JsYXM1NXBFamg2RlJxOUdnWWNPYmZuK2tza1A4K2VlZkFBQ1daY3RSeTl0c05vd2ZQd1lEbngrRXMyZlNzR0QrWEV5YVBQV2Fna1ZPcHhOYnRteFJBWGpscjcvK01qUnYzdnhQeWRjbVN2NDJKV0pLS1NVTXc4TGpjVk9uMDl1VW5qQU1vcUtpRUJBUUFKMU9oNy8vK2d1aUlNSmlNVU1iRjQvblh4aU1CZzBhNG1KNk9pNWxaaXJIZlc3ZzgzaHU0UE1BZ0plR3ZZaTZkYXRlVUgvTkdsdFJVVkdGdVdxVmdCb3AwNldkeWMzTmpkZHF0Uk54QXp1MHQyN1RGalZyMXNUTHcxN0UxMXUzUUtmVG9YWHJOZ0NBT2JObm9XZlBYdmg0MDJkNC9vVkJtQzVSTEQvd1FBK3NmWDg5YXRhTXg3UzNabUR0KytzVnMyalU2TEdZTUhFS2twS1RzZmI5OWFVNHBOcTJiWWNaTTJjaE16TURIMzJ5R1pjeU0yR3hXR0EwR2hBWUdJQU5Hei9HeDVzMkkvWGtDUncvZmd5RUVFeVpOaDJmYnZvWWFXbW5NWGZPTEV4NzYrMWJCbXJTL2ZCcUg2S29hTklBOEhEZlI3QjM3eDRjUHZ3N2VKN0hMNy84ak5TVEo5Q3pWeS9GSDBrSXdMQXNpb3VMc1BuVFRkTHZsR2FLaVl1UHg2R0RCOEZ4SFBKTkpxODJyTlhpazQ4L3d1ZWZid2JIY1NncUtzUytmZjlEczJiTkxwdkNPN1pqMjlkYnNYVDV5cHZHVTFmVlk3cmRidngrNkNEbXo1dUQ0YSs4ZWtzbzNmUHo4eFdBMG1nMENBc0xLOWNRNWNLRjgramF0UnYrNzdtQm1EWjlCalFhcmVKanV3NnBXNzkrL1JkSGpSb1ZXNUcvalZMS01BekR5RlJqSG84SEhNOFJ6c1BCNDNiRFlYZmd6Smt6aUlxS2d0MWhSMUZSRVFvS0NtQTBHUERISDBld2ZOa1NQUGxVYVY1Rmp1T3c2Wk9QUVlpWHg2MWFOVFpCRUpDZW5xNEVDM3dqb0JXa2RaQXlhUjJFVXNwRVIwZFBJSVE4ZUNOdnVFcWx3b3laczNENlZDcSsvZlpiREg1aElHYk5ub3M2ZGV2aTdKazA5RnpoSmV4cjA2WXQzblc1WURJYUVSMXpiV205V3EwV09yMWVNVnNEQXZUZ09RNnhzWEdJakl6Q3hBbGp3VElzREVhdjM5SHJtNHJBNkRIajhQcXJyK0Q1RndhalNaT210d1RVeWlib0xwZy9Gd3ZtejhXRFBYdmhyZWt6VUw5K0E3dzljeGJlVzcwU2hydzgxRTVNeE1MRjd5SW14cHRmMStlaGgzSHk1QWtNSGZJQ1dGYUZ4eDd2aC9yMUc4QlNwbHhvekpoeFdMeG9JVFp1V0lmYXRXdGozWWFQb05Gb3NHRGhZcXhjc1F4ZmZQNFoxR28xdXQ3ZkRZTUd2NmpNclVVTHZXYmdzMC8zTDIwbWJ0cU0yTmk0R3o0ZVZUM215TmRlQlNGQVltSVN4bzZiY0VQejJJS0RnNnU4YjBaR0JzTEN3dENqUnc4QXdQSGp4OHYxMG1qZXZBV2FOMitockl1eDQ4YmZJUC9yem02dFc3Zk9BTERDUjJzVEFWQkNpRGRHU2tVcTE0dnlQRThad3BBU2F3bmxPUTZob1dHSWpvbUYzVzZIV3FXR1dxM0dybDA3d0RJc25ucjZhYlNYSXV1QWwrSjgrZEozMGJ4NVM4eGZzTGhDYmJPeWNic21ZUE9OZ0ZiR3FWWUcxR1FHQUxsY2FqZ2g1TlViUFVGUG56NEZuVTZIUm8xVDBLaHhDcjc5dGpFKytHQXQ1czFib0poR2lwbkVNS0M0OFZ4MGYvMTFITHQyN3NEU1pTdWcxZWt3WTNycHFqQ0h3d0cxV2cyWHkxbnRBTmFyZHgrNVEzZ3BxVisvQWY2My84cDlURHQyN0ZUcHd0VnF0WmoyMXR1bDNxdW80VzJidHUwcVpIbXRWNzgrbGk1ZldlRnZzeXlMdmZzTzNGU2dyOG94LzJtOGJzUTUyTzIyS2tVcTVhcWI2NVZQUC92aW1yNm5WcXVIYk5pd0llUEZGMS9jQmkvRnJrZ0JLcldTcC9DbWdZaWlLRktCRjhBVERvRUJBVVNyMVZHZFhnZTMyd1dudzF1Tm9GS3IwSzFiZDhUR3hxRldyZHJJeUxpSU9uWHFBZ0E2ZGVxTVRwMDZWM29lZHB1MVVqL29WWnVpZVhsNUNnV1JiMXBIQlJGUStJQ2FvcTNaN2ZZdUxNdE9ySTdKa1hYcEVoYk9ud2U3M1Z0K1lpNG9RR2hvS0xRNkhlbzNhSWdmcGFqZUgzOGNnVnFsUW5UMFAydHJvYUdoS01ndnFMQzdWRVZpTnB1aDErdWgxbWlRbjUvdnpZV1Npb2tOaGp5OHQzb2wzdjlnQXc3Ly9qdU9YRVg0dW5MSGJnRDhjblZqY3l2SHJMSmpSMGRIdzNHRld1ZUFnS3FadkZYZDczcC9LeWdvNkpWMzMzMjNoUkpNa0pyQ3lDYXBuQUlpaWdMaGVRRWN6NFBqUFBCNFpBWmVGeHdPQit3MkcwcUtTN3dNdlBsR0tibS9ha25xZHBzVjBkSFIxdzlzRG9lakZGdkhQd1FMeWlYaHBxV2xoV20xMnZFQXFxVU9xbWV2M3VqY3BTdGVIdllpbm4zbUthU2VQSUhYUjNwcDNLWk9tNDV2ZCszRTRFRURzWEg5T3N6NHo1d3FPVklUYXRWQzIzYnQ4UFNBSi9IQ3dHZGhOQnF1dUgrblRwMmgwK3Z4MUpQOU1IM2FGTlN0Vng5MnV4MDh6MlBtMjlQeDBzdXZvRmJ0MnBqNjF0dFl2SEQrZGZzOTVDZTlYOHBQK3NwS3NKaGJOR1oybXhWc0pScEdYRndjS0JXUmI4eXI4TnlTNjlUN1I5QUtDQWhFY3AwYngxajdEOGVNaTQrUEgvVENDNE5xeU9CR3k0TWJReWtsb2lnUWdlZkJjYnprYi9QQTdYTEI1WFRDN25EQWFyT2l1TGdJRnJNRkpxTVIyVm5aU2wrRnlzYlJaTWdGQ0NvdFA3d3FhdkRVMUZTa3BhVWhNek5UcVFYMU5VVjlLZ3lJckxWSnZqVkdvaUdheFRETWhCc3g2TGVLU3JtNnBUS3E0OHI5TFprd1d5eCtvc2t5WWpUa0lqSXlBb20xeTNPZlpXUm13bXkrK1dObU5PUWlJaUlDU1ZmZ1l6T1pUREFZRE9CNUhsYnI3YzlXNDNLNVZ2WHUzWHM5QUllMHVRQjRDQ0VjQUo0UUloSkNSSWxhWEtZdm9scXRsMW84SUNBQWdZR0JDQTRPUm8wYU5SQVJFWUc0dURqVXJsMGJ5Y25KNVRYRjRHQ29WU3JFeHNaV3FxMWRsWTh0S3lzTDJkblpNSmxNTUp2TkZRWUxQQjVQdWRRT09Wamdjcm1ldUZHZ2RyWE8xanRKcnZhNkVoTnJJei9mQktNaFYyRTV1ZHMxTlp2TkNvSG5Ld1ExQUVoS1RJVEpkUFBHVEQ0blVSQ3VDR3F5U1hxbEJYc2J5bXRaV1ZsbmE5V3F0VmYydHhGQ2xJQUNBSGhaUHdoa2NGT3BWTkJvTk5CcXRkRHI5UXF3aFlhR0lqdzhIRkZSVVlpTGkwT2RPblZRUzBvbnVscXBFckJaclZhbHNxQXNxUG5XZ1BxbWR2aWFvRWFqc1paYXJSNTdxNXl0ZDlLaXZOcEVWRUlJV3JWcWhZc1ptYkJZekNpeVdPQnkzWjBjYlhwOUFCaVdSV1JFSkJJVHI3d2cyclJ1amN6TVM4Z3ZLS2pXTWRQckE4Q3FWUCtvcWQzSlVyTm16Y0ZmZnZubDJhZWVlaW9ibDZPa01yQlJPWkxnSmFma0tjTXdoR1ZaeXJJc1hDNVhLU0pLR2V3Q0FnSVFISnRnME53QUFDQUFTVVJCVkJ5TXNMQ3dhMUppcXJTS1pOUFROd20zZ3NvQ1gxQ1Rxd3NJcFpTSmlJZ1lBNkRWalJ6TTZPaG9HQXpHZngyd3hjZGZmVG9ESVFSMWtwTlFKem5KYjROZXBiYWIrQzhGbTVzcGhKQ1dmZnYySFFCZ0ZRQkI2by9nalpaS3BKVHdFbE5TQ2R6QWNad0NiaXFWcWtKd0N3d01SRWhJQ0pyNGtDOVVWZjR4ZUpDVmxZV2NuQnpGbjFZWnFGM0JCTzFmSGFrZGlyUFZaSURqRG5lZU8rdzJyek1VOUlaeHNmbkZMemRUZERyZGtPenM3TTZReXEwb3BScEl5YnUrZ1FSQkVJZ0ViQXB1eUIydUhCTE5VVW1KTjBxYW41K1BuSndjaGVMb2htbHNkcnU5d253MVg4SklHZGg0bmk5bmdtWm5aOGVxMWVyUjFUV1k5OTU3TDR4R0k0d21FNndseFhja05ianNERTFJcUhtbitWYjg0cGRTRWg4ZlAyamp4bzJwUTRZTUVTUi9tK0JybHBZMVNhWHFCT3BMUkdtMzJ4V3RUUTRzaElTRUlEdzgvS3FxUEs0SWJHWHoxY3BFUG4zejFTb3lRVWxNVE13b0FQZFY1MkRHeE1SY2RTOU92L2pGTDlWaWtyWVlNR0JBL3lGRGhud0FnUGN4U1FYSkpCWGhaZDFWVEZLR1lZaEtwYUl5QzRodllLR29xS2lVcjYxUm8wWlZCN1pNbjZKVFg4blB6OGVaTTJkS01YZVU5YStWRFJ6NGNxeWxwYVgxek1yS0d1Mi8zWDd4eTEwbEwrL1pzK2RvdDI3ZERzdmdCaWxTS2hmTFMwMWc1S3A1aFZQdWN2ZXJ5NlpxV1RPMXFpMzhWSWxoUDVSN2srTUY1Ri9NQW5FYVFOeG1FRTh4Q0djREk5aEJCQmNndUFEQjQ5MUVqbEJSQUNnbDhqYjQvOXF3OWFQM2pQTGZZNy80NWU2VGhHYmkvOVZMcnZIMytZdUZQQUNCQUFKQVpiT1VnUmZOQUNxQ2lqeUY2Q1lRWEJTQ0F4Q3NJSUlPakdBQjRmSkJQTGtnN2t3UTV6bkFsb3I0NUZwUXEvNjU5MFdGd1lPc2JBc01wbUtZTFRZVUZUdGhzN25nY0xyaGRISnd1emw0UER3OEhBK09GOER6SWdTQlFoUXBSRW9KQlpqM2x3MGVDZUFCL3kzMmkxK3VUU2k5YzgrZFpabXVoL2RNZndSeUlNRWJSSkFEQ1N5VmlDbEZrVUlRS0hoZUJNY0w4SEE4UEI0ZWJqY0hwNU9EdyttR3plWkNVYkVUWm9zTkJsTXhMbVZWclZLbm5JK3R1TVNKM0x3aUZCUllVVmprZ05YcWhOM2hCVFdYbTRQYnc4UGpFY0J4QW5oZUpMeEFJUWlVaUpRU1VCREx4WGNic0N6emhuOXErc1V2VnljaUJReVdTSmdLd3lDSUxHeDNkanJpb0FVTEZoeVpPSEhpUmE5SjZnMG1lRTFTaUpJRlNrUkt3QXVFY2dKRFBEeEwzWndLVG84YU5wY2FKVTR0Q20wNkZGajFNQllGSXRzY0JFTnhDUEpLNGxBbmdVTmNlQUVxcTRvc0IydzV1WVV3NVpmQVVtaEhpZFVKbTkwTmg5TURsOHNqZ1JvUGp1UEIrMnByRktBVWhBSk1TSWorTlFBSi9tbnFGNzljSGFnZE8xY2ZZTU1RRkhKbjk4bVZwR1pDN2VUSEowNmN1Qm9BRDIrRVZINFZRUWdGdkczOENDRWdVck5sSXRFZHNTbzFWQ28xVkdvTjFCb3RORm9kdExvQWlDUVF4VFkxOG9vU2tHY093NzMxejFjSWJxVk1VV04rQ1F6R1loUlliQ2dxZHNCcWM4SGg4TURwNHVCeXk2QW15Q1lvNGIwbUtLRWlKWlNDT1BKV2RDZUV2UEp2bW5EanBtM0IvWDNmdVdHL3gvTUNSazMrQXRIMXhpRzA5cHNZUG1vVEhBNlBmMlhmNVdJb2pBVFlNTVRFeHY5cmtzNjFXdTJnUGIvdWE0N0xWT0lhU3VGREplN05uaEJGa1FpQ0FGN2dDYzk1QXdlYzUvL1pPKy93S0tvMml2OW10bVZUSUUxNkNVaEhhVkpFMEFBZlVrUkJCQ3NsSUFncUxZTFNsZDZEOU41RXBTZ0lpaUJLRVpBZWxDSUlVZ1VFRXRKN3NtVm12ajltZDVKTkl5Qk4yZk04KzBCMlpuYnUzcDE1NTIzM0hDc1dxd1dMUThaUDFUNUlKRDR1anVTVUZIUTZBK2dLY3pQZUw5ZHp1eGkyR3hFSlJNY21rNUNnR3JYVU5BdnBHZGJNdkpyRHNObnRzbUMzTzBKUUdVRUJBUkNOUnNQNzdrczBmd3diczVGTlAvek91czk2c1dsMUgzYnUrWk4rZzllNkorWVJSMVI4b2YrY1RpNUF1ZkxsTzJReGJBWlFER1NxVzRuTzFqQkpsZ1hKTG1HMzJ3V2IzWlpaRmJWbVZrVlRVbEpJVEV3a0xqYVd5SnVSZVB2NDN0cXcvWDA5VGcxQjQxSkpURW9qSmRWQ2VwcVZqQXdiRm91aldKRHByU0ZKTXJLc09Bc2NZa2JVdkRjRWdSZmRsMmplU0UyMU1HL3Bic0xHZHlDNGNTV0NHMWRpOGF6T3JGeHprSmhZTi9YUW93cEZBVW5TMzVHbmR1YjBId3dNdmZjcDdUTm5UaE0yYllyR2FlakV4bzNmRU5MbExVSzZkbklSNUltT2ptYmdCd040dTN2WGxpMWF0bXBNRmlweFJWSFVJb0tpaUE3bUh4UkhxNGNrMmJWMkR5ZkZVWWFqNVNNMU5aWGs1Q1NOVWp3eE1RbTdyTSsxMENJQ1dHMTJOUVNOVFNFaEtZM2tGQXRwYVJiU25VYk5XVEN3UzlqdGttQ1haQ1FaeDdJcHhJOC9hcTB6NkhYdlBlZ0w1T25ta3drZDloWEJiY0lJcWpHY0p4cU80ZnV0SjdUdGRadE1aUGpZalZTdFA0cmlsVC9pN1BsSUxCWWJZeVp2cG56TkVYZ1U3VU85cGhQWnNkdFZLTmRtaytnZCtpWGVKZnRUdlBKSGZEcHZlK1lQR0pQTUs1MFg0bGYyQTd4TDl1ZUZWK2R3NFZLVXRyMWoxMFhVYlRJUmdHTy8vMDE2dW8zZ1JwVzA3YzgyVkVYdkQ0WmZkTi9oanlnRUFWTFNoRHM2dG5LVnFvd2FNL2Flam0vK3ZMa3NXN3FFU3hjdmFpU3VBRmV2WG1IRCt2VXNXTFNVWmN0WGN1TEVNWTA4ZGY2OE9UUnI5ajlXZnI2S2Q5OTcvMVVQRDdPSE14ekZVU0VWQkVFSE9JMmJ5dHNtU1VpT1ZVdzJtdzJyTFl1eWZIbzZxU21wSkNhcUlXbDBWQlFKaVZLdU9UWTl3STBiQ1VUSEpCT2ZrRXBTa2xvRlRYTzBkbGlzZHF5YXB5YmhxSUk2dkRVMURQMTQ4RXU5S0tDQys3M0dnbVcvc0hWOVA1bzlWNFhOUC83T0sxMFdjbmpuVUdyWFVCYzd6NWkvazVVTHVtRXk2cWxVb1NnOSszM0JqenYvWU9HbmIxR3BRbEdXZnI2UEYxNmR3L0c5STZsV1JlWHJPbkQ0SXVYS0JuQjB6d2lPbnJoS2ozNmZVOGpIVE0rdWpRa2Q5alVXcTQzd240Y0MwRy93VjRTODl4bjdmMUlabWpxMnEwTjhnbHJldWg2UmdOR29KOEEvODhsc01PZ0k4UGZpMm8wRTl4M3VSZzdFeHNZeWNjSTRZcUtqRUVTUjk5N3JRNE9uRzNMdDJqVUdodmJIWnJQaTYrdkhpcFZmWktZN2huekVqUnZYQVZWMHlkUExpelZyMXdFcXJmK2NXVE5JVEVyRTM4K2Z3VU9IYVZvV0FPdSsvb29ORzlacit3UDBmS2NYUnFPUnNHbFRYTWIyKzRrVFBGVzNMcDZlbnRqdGR2eDgvVGh4L0RqMTZ0WG54SW5qZlBDQlN1amo2K3RicjBTSjRpMHVYYnEwR2JBNVhsb2hRVkVVMlJHU09sWWtTT2gwZHV4Mkd6YWJIcXZOMGFpYm5rNmFTUTFKRXhJU2lJbU53V1RJdmFkTm41NXUxWHJXRXBPeVZFRTFvK2JJcXpseWE0NFExT210Q1NmMmZWeElweE43UFN3WHdsc2Q2OUhzT1pXQThzVldOV2plcENvTGwvL0NvcG1xOW1XYkZrL3lXbnVWYUNRdVBwWFBWaDlnMVpJZXZOUmFWZjJlTnE0amgzNzlpeW16Zm1MbEFsVTV2VmpSUWl5YjB4V1R5VUNsQ2tYNTdmZ1Y1aXplUmMrdWpibDhOWmJTSmYwb1dkd1BUMDhqeStkMjVkcU5lRzA4YjNTb3AvMC9MZDJLaDRjK2x5U3JIb3ZWN3I2TDNjaUJyOWF1cGthTkdvUjBlNXRMbHk0eGY5NGNHanpka0ZLbFN2SDErZzJjUDMrT2llUEh1Und6YWNvMEFCSVRFK2o5VGc4K0dQZ2hvTXIyVFJ3L2x2RVRKMU84ZUhGKytuRXJDK2JQWS9TWXpPTnIxcXFWZzNrNEw0SGx4TVJFUER3OGlJNk9adEtFY1VpeWhJOGpUNWlZbUlqSnc0UHZOMzNIamgzYjhQVDBmTFZIejNmMkxGdTZ4T28wYkk1VkNaSWozNmJJaWlJSWFraXEyQ1c3WUxQckZMMHpKRFdvSVdsNmVqcXBxU2xxU0JvZmowRXZrcDR1WXphN2psRzhFYW1Hb1BHSm1UMXJHZW1aQlFPYnpkbXpsdFZiQTluaHJWV3RYTHduVU8xaHVSRHExSFNsb2FsZXBUaW56dHpRL3E3NGVPWkM4ek5uSTVCbGhZYjF5cnNjMC9qcEN2eHhKbE5YczI3dElFd21nL1ozL2FmSzhlZTVTR1JaWnNpQWxuei80KzhFUGo2UU5xL040YnNmVGxDOVN1N01yR1lQQTFhcmxPTjlpOFdPbDZmUmZSZTdrUVAxNmpkZzU0N3RyUHhzQlphTURNS216eWpRY2JJc00yYjBLTnE4MkpiNjlkVmc2cSsvTG5IdDJ0OE1IenFZN2lGZFdMMzZTNkp1dXVvTFZLcFVtVmM2ZEN6dytFNmYvb09SSTRieVR1OTNhZHJVdFNkLzBvUnhYTDc4RjJIVFoySXltYXAwNjk3amVWd0tDWTRLcVpvU0UxQzlObVJaUXJKTFNIYTdReXRCclpKYUxSWXlMQm1rcDZWcmhZVEV4RVJ1UkNibTlOalVuclVVa2h6ZVdyclRXN000UWxCbno1b2tDNUpkOWRhY3piaG53c2Y0NlhSaXo0ZnBRcEN6YVZ0bVdPem9kSm5GMzZ3R0pMdVZ6L29aV1lWK2pkbmNYYjFlUks4WEVVV1J0aS9VNVBxWktYeS85WGQrM1BrSHc4ZCt5L3hsdXptOFl4aWUyWXhWcVJKK1pHVFlTRWhNdzdld3A1YS9pNDFMcFdSeFgvZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEwxeXk1WWh2RmloVnpDVnYvQ1FvWExreEdSZ1poMDJkU3FGQWhUcHc0VG1GZlgyM2JNNDBhMDZKbEs4MWJMRjY4K0t1OWVyMjdjL0hpaGRZczRhaWRMTHh0TGw2YlhSSjBkcnZpVWlXMVdFalBTQ2MxTlkzazVHVDBPb0dvYUpsaVJRdmg1V25LOU5oaVlwTkpTRXhYZTliU3JWckJ3S1pWUWVWTWIwMVd2VFZuYnUzeGNvKzlEVHorTUYwSTRVY3Z1L3g5Nk1nbGF0ZkluVTIxWXZraTZQVWlCNDljY25uL1FQaEZxbFRLekR1Y3ZlRDZWRHQrOG0rcVZWWUpJWWVNMnNENWkxRjBlZU5wVmkzcHdmNmZQdUxVNlJzY1A1bVRRNnAyamRLWXpRYjJIaml2dmJmdjBBVkVVZURwYkY2akcyNEFUSm80bnZBajRUUnYvanpEaG8vazBLR0RMZy9kM0xCdjMxNzI3TjdOOEJFZnV3Z1dWYWhRZ2FTa0pIN1pzMXZMdDMyLzZUdVhZOCtmUDhmR2pkOFVhR3hQMXFpQjFXckZaREloU1JJSEQreW5aaTFWeTdSV3JkcmFPSS8rOWh0QlFlVXdtVXpsKy9UdDE1eHNSWVRzWHB2czlOclVRa0ptbGRTbUNpOWJNakpJVDFkemJTa3BLY1RFSmhONTA5VnIwOGNucUNzTVVoM2Vtc1ZpVTlkc09VTlFtOE5iazF5OXRkLzJEUGZSNmNTM0g3cWN4SVpmZWFiKzR6emZ0Q29yVmgzZzVPbnJyRnJTSTlkOWZYdzg2TmVyR1lOR3JzZmJ5MFNsQ2tWWi91VitEb1pmWXVyV0Q3WDkvamh6ZzRYTDkvRHUyOEVjL3ZVdjVpemF4ZEk1WFJ4R0w1SStINjVoWHRpYkJQaDdzV0xWQWJ5OVRacGhYUHZORWVJVDBuaXZSekJlWGlaNmRHbE0zOEZyOGZIeHdHalEwenYwUzdwM2VnWi9QeS8zWGV4R0RuVHUzSld3c0Ntc1hiMEtXWllaT09nalJGRjBLUjRrSmlieVdzZFhxUFBVVXd3ZE5vSzVzMmVTa1pGQm4vY3lVOTl6NXkvQ3g4ZUhTVk9tTWZQVDZTeGF1QUJQVDA4R1poTlNQbmIwS0JzMnJLZDkrdzYzSEZ2WnNrRzBiOStCZDN2MVJFSGgyV2VEcVZldlBnRHY5K25INUVrVFdQZjFWNWpOWm9ZTUd3NkFuNzkvaC9hdmROaStjY00zTnNEcU1HNTJWR1VybFcxWGJkcDE1TnBVcnkxcmxkUml0V3E5YlRvUjRoTWtvcUtUS1Y3VVY0dVNoRm1UWCtWR1JEeFJNY25FeDZlU21Ld3VlazlOczJwTHFUSXNrbUMxU3RqdGlpREppcWdvaU5ibytmMTBPakhzWWJvSW5tNCttU2VxbHVEQ1g5RWNPbktKR3RWTE1YMThSNTU5Um0ycHFOdGtJaSszcWNuSWo5cG94MWl0ZGthTy80NHZ2anBFUW1JNnRaNHN6ZmlSYmZsZnNNcjk5T0hJOVp3NUY0R2ZyeWMvLzNJV25VNWthR2dyK3J6VEJGRGJQUVlNL1lydHU4NlFuSkpCblpwbG1EYTJBNDJlVm1YUU9uWmR4T1dyc2Z5NmU3Z2puMllqZE5qWHJQbm1DS0lnMExGZEhXWlBlUU1QRDRQN0xuNkVzZWQ0NWYrazZscHVpSStQbjFqamlhcmZBeWxBS3BBbUNJSUZWZDNLN2xDMWtuVTZuV0l3R2pFWlRZcUhod2tQc3hsUHN5ZGUzbDc0K0JUQ3Q3QXZvZ2dOYTBtVUQzcU1hbFZLVUQ1SXBUVVN4bzk4eVhVWmxjTjdTMDJ6a3A1aEpTUERKbGlzRWphYklraVNMTWd5WXVmWDYray9XOURqTVBEa3cyYllXald2enVpaEx6MnlONGlpZ0NDNHYvdkRNbWNGL2V4SHliQXBpdkpIbzRZTjN2Lzc3NnNwRHVPV0pnaENPbUJCbGV5VFJGR1VSVkZVREFhRG9oSlBlaWdlSGg2WVBjMTRlbnJoN2UxTjRVS0ZFUVNGZWsvS2xDbmxUNlVLeGFqNVJHazhQQXpvVXh5NXRZd01HMVpMMXRVRldSYTVaK3RiV3pxblc1ZUh6YWhsaCtEYisxLzNnMGVlbTBiUklyZS9yRVpTOUZ5T3FreDhraDVKRnNsSWZ6UlZxanpNWm5TaWduOGhPMEZGemlJS2ViZlF5QXBjaWFsTWJJSUpTZGJkc3psVHh5UVRXTmhDMmNmTzN0TElYYjkyN1ZINHFhb3ZXTGo0MlJmYnROcnB5TFhaRkVXeGdXQVhCTFdRSU11eUFDZzJteTNUSU9KWTZTU3JLeFU4VENhMXVUbEZJakVwazlvb3FFd2crdFEwaTRPNUkxdHVUWktSSkZtUUpNV3h5a0I5b1NEcTlib3VELzFUSVdIUkkzRXpwOXY5K1AxQ0tmUUdEM3dLdTNWRlUxTlRpRTlPSWlhaEtqVWZ2NHBKbjVpclVmdjEzQlBvOU9iN01tZXBxU25FSmljUkZmOEU5U3FkeXRlNGxTejFhQkRqRkM5Um9nM3dpOE93V1FHOUlLREgwZGVHcW13bHFNdlFCUVVFUVJRRVJSVFZiZ1JScDhOaXRTS2drSm9ta1p5Y1FYeENHakV4eVpRcTRZZVlubTVUdlRXclN5TXVkcnVFSk1scUpkUkJucVNBa0haemJtdWc4Y000V1lkMkRIM2t3dERJdUNMb0RSNy9LVmFJZndJdkwyK0tGaXVCVHU5QlJGenVpbCtYbzZ1aDA1dnYyNXhsanNuTWxaakt1QUdpS0RiY3MvZEFMVEpKS0EyS291aFFLNlNxTlZNVUZFVldLNlN5TTRyTXVwWlVsU1JJVDdlUmtwcEJZbElhc2ZHcFJFWWxJYVpyUEd0cXo1ck5MbUdYSEViTkdZSm1NbmdJUm9QdVRmZlA4dkFnTnRIMG4yU0YrS2Z3OWlsRVRLSXAxMjF4aWZvSE1tZmVQb1dJU1RDNWZ4d0hTcGN1bmIzMXc4bjhvWE95Zmpob2paQWx0ZjNEN2xna2I3ZlpzRHBhUU5JenJLU21XVWxPeVNBaElZMlkyR1QwRmtzbWVhVFdzNmJtMWdTMWIwMXhXRTZFaENzem54UUU0ZFhiQ2drZjRXVDJ2WjRmU2RZaHlUcTNwNWFIbDVRWUg0c3NneWk2enZlRG1qTjFUSEYzOUpzbkpTWnkrYStMcE9ham9ldmw1VTFRdWNjcFZMandYUm52dlQ2bndXQm91L2FyOVYrOThYckhDMlJTaCtzRlFiQTd3bEZabGV4VEJFbVNGVW1TQk1rdUtVNnZ6VzZ6QVFvV2kweDZ1cFhVVkF1SnllbkV4YVdpVjNOcldaZE55UTV2VFZhTEJnbzQrZGE4dkV5dkYyVEEvekdLNDN2N0ZQY0VuVTZpaUc5Q3ZsVEh1VUVuU285c29hQWdTRTlQZHpGcW9CcVVCemxuNmVscGQvUWcrK3ZTQmRMU1V2UGRKelUxaGN0L1hhUkdyVHAzWmF6MzQ1eTE2OVIrRHJpYUpkZG1kWGh0a3FLb3VUWkZrUlZWeFVweXBUYXkyeEZRc0ZnbE1pdzIxV3RMemlBK01RMTlGdjBDTmE5bXp5d2F5QTVYRUFWaDgxZDlQRVJSZUwwZ1J1MC9SbkY4ejVHYW1rSkVnbCsrVk1kM2l1M2JmbUxGOG1WRVJkMmtSSWtTZlA3bEdzNmZQMGVQN2lIYVBrT0hqK1NGRjlxNGY0aUhHTGN5TUZtdnBYL1RPVDA5dmRxMGU3bjkrdSsrM1dqSnpMVmhFd1JFVUJ5NU5rRlFGQmxKa2hWSmxnUzd1a2dldTkyR0FGaXRNaGtXRytucFZsSlNNMGhLU2tlZm5VRFNuaVczbG5YNVZQT20xVjRGU3Q5cW9Ga3BqdDBvZUlqaTVlWE56VWlabS9GK0ZQT1B2eXVmZStQR0RhWk1uc2lZY1JPb1Y2OCtTVWxKQUZTb1VKSHRPM2NEOEU2UGJ2ZnNleTFmdHBSMkw3Y25JQ0FneDdobXpaak95Wk8vWXpRYWFmNThTOTU3djQvR0tuSHQyalhtekpyQnlWTW5NWmxNdEdqUmtsNjkzOHZCT25FM2NhdHpQdGU0SVFhREFVRVFDUW9Lb251UG5qUnExTmg5OGY1emxCcjU4YWdHMzMyN2NSZmFFaXRGRDBLbVBvSktJYTVremJXcGkrUWxRTUZxazdGWTdHUlliS1NscTdrMjBSbUNTcEtjMmVJaFo3WjQ0R3p4ME9rS3RPVC92MHB4ZkYvQzBueW9qdThFWi84OFEyQmdJSTBhTmNab05CSVlHT2dJeHdSTUpoTW1rOGxsTGVIZHhtY3JsaEVYRjV2ai9kR2pSbEt5VkNrMmZyZVp4VXVXYytqZ0FUWnQrbGIxK0dXWm9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuQWhKa3RpL2Z4L0RobnpFdGIvL3ZpOHBnYkZqUnZIV0c2L1J2VnNYenB3K3JXMzcrK3BWeG84YjA0d3MxVkVjNjBlZERMdVNKQW1TSkFtS0lndVNhdHdFcDdDeUpLa1JwOVZxZC9IYU5NUG0wdDRoT1NtLzFSYVArS3N6bmhBRVd0N3FDL3dUaW1NM1ZNOHRMNnJqMjhIeDQ4ZDR1VzBicGsyZFRHUmtKQyszYmNQTGJkdXc4ck1WQmY2TVF3Y1AwUG10TjJqZUxKZ2UzVVA0NDlRcGwrMTdkdThpcEdzblhtajFQTjI3ZGVIUXdRUGF0bjU5MytmbHRtcG8rOEdBL3J6Y3RnMTkzMzlYTXlMQndVM3BHdElOazhsRWthSkZxVnV2SHVmT25nVWdMaTRPUDM5L09uWHVqTkZvcEZUcDBqUnEvQ3gvL25ubW5zMzc3WnpUYkRiVHFGRmpoZzBmeVpMRkMxMFlaZThYeXBVcmgwNm5ZOXUyYmV6ZHU1ZWFOV3RpTUJoeU5kaTUvWDlBLzc3OHNtYzNaODZjUnBLbDJ6cDM0OGFOMGV2MWVUNGdjdnQ3M2RkZjRlbnB5ZXExWHpONDhGREdqeHVENHJqSVo4Nll6c3Z0WDJtMlp1MjYwbVRUSHdWMGdpQUlvaWc2MTQ0aWF6VUFTWHM1cWRXc0Zqc1pHVGJTMHF5SXpvS0JYU3NZT0xVTXRLS0I0TzNsMGI1Z1Q1STdwemgyUTBWS3F2Q1BjMnkxYXRYbTIwMWJHQkE2a0pJbFMvSHRwaTE4dTJrTElkMjZGK2o0aXhjdThQSEk0YnpYcHk5YnRtN2oxZGRlWitBSC9UWHVyaXRYTGpOKzNCaUdEQm5PNWg5KzRxV1gyakZpeEREUzB0U2svSnk1OC9sMjB4WUFac3lhemJlYnRqQjMva0lBUkZHa1UrY3UrUHFxbnVsZmYxM2l3UDc5Tkdqd05BQ0JnWUhNbVRzZkR3K3pkbk1jUDNhTUdqVnEzck01djVOejFxdmZBS3ZOcGhuays0bkF3RUJ1M0xqaGNDWlVpaTAvUDFkUC84aVJjRVlNRzRMTlppTXVMbzUzZW5RbkxrNFZHLzUweGl5R0RSOTVSdzVJUUVCQW5sNytod05ET1g3c3FHYk1Gc3lmNTdpZXptdS9iOVZxMVRFYWpWeTdwbnFLNTgrZm8wR0RwNmxWdTFhRFhMdzJFUkFWQlVFUUJMWHRROGxhUkhDMGdOaXplbTEyMGpPc2lIWkoxc1JabkdHb3JHU3llS0FvZ2lnS0wvK1RIMkxRd0ZCZTY5aWVrQzV2MGJYem0yelovTDJXMTNpdDR5dTBiL2NpM1VQdTdXS0c3aUZkdUhqeDluUUZ0djMwSTY5MWZJVVhXcmRnOXF5OENmNTI3TmpPNkU5Ry9tZU02K2JObXdodTBwUkdqUnBqTXBsbzFmb0ZxbFN0eWphSGtFZEFRQ0RMVjN4T3RlclZFVVdSbDlxMncyYTE4dmZmVnd0OGpqOU9uYUpGODZhRWRPbEVsYXBWZVM2NFNhNzdMVnd3RDdPbkp5KzB1WDg2UVFVNXB5QUkrUHY1azVKNi8wVjRqRVlqa2lRUkVCQkE0OGFOa1dVWms4bTFQNjV1M1hyNEJ3UXdadlFuREJvNGdQYXZkTURmMzE4Ny9sNmdUOS8rVEp3d25ybHpaclAxaHkxMDZhb1dxQjZ2VUlGZjl1eEJsbVV1WGJyRXpadVJwQ1NyOC9iNDR4WFlzM3NYWGw3ZXpiTVpOWDJtY2N2c2FWTmtSempxMUVlUVZNZE1WWktYc0ZodHBHZllFTE1ZTmExZ0lDdUFvMmlRR2pHM0dYZUJJZmVqSWNOWStjVnE1c3hid09jclYzRHAwaVdOM25ocTJLY1A1UTNlb21VcnZsNi9nVzdkM3VaUlFtUmtKTVdMdStadHlwUUpJakpTWlJYMjl2Ym10OTkrcFhldkhuUjY4M1c2ZGUyY2F5aVNINm8vOFFUYmR1emlxM1ViaUlpSWNGRTRjdUx6bFo5eCtQQWhKazZjbkdmNGM3ZFIwSE1xaWtKY2ZCemVEeWp0VXE1Y09hcFdyY3IrL2Z1MW9sQjJ3OXU3OTNzYy9lMVhURWJUUDNvd21NMW1PbmJzU01lT0hURVlETFJyMTQ2T0hUdnkyR09QdWV6M2VJVUs2ajN6MVJwNjlYNlhRb1hVWFB1cnI3MkJUcStqZTdjdWZQSDVaM2g3ZTJQMlZMM2pRUjhPNXVlZmQvSjI5NjVWdW9hRVZIRVlzNng1TnAyaUtDcFhtM00xZ2l3ak9VTlRXZFk2T2xTdlRjSmlzYUdYc3F3eWNEVGtPc05RQU1GazByZTltejlJNGNLK1BQRmtEUzVlT0UvNThubVRLeVltSmpCNTRnU2lvcUt3MjIxMDZ0eFZZK004YytZME0yZE1KejB0alNKRml6RjAyQWd0TWI1NzE4K3NYdjBsbG93TXFqL3hKQjhNL0ZETFArejZlU2RqUjM5TWVub0dmZnYxMTd5RWI5YXZVNVBYaWtMVFp2K2pXL2NldC93ZVI0NkU4K24wYVlpQ1NNbFNKZkUwZTJyYjhodEQ4MmJCOUIvd0FVdVhMRUpSNFBzdFd4ODZ3MWEwYUZFaUl5SmMzcnQrL1JxMWE2dTlTbnQvMmNPcUw3OWd4c3pabENxdEZzcWZhOXd3MTVzcnU3R3paR1N3ZGVzUHRHNzlBaVlQRDRvWEwwN3o1cyt6Yjk5ZWwvM1dyL3VhN2R0K1l0YWNlWGV0NGZSV3VKMXpIamtTanRGZ29GTGwrNzlFeW1xMVlyZmJPWHBVRGZ0ME9oMFdpOFUxcFpHU3drY2ZEYVJ6bHhET25mMlRLWk1uTW5UWWlEc3FGcVducDdOK3ZWb29hZGV1SFQvODhBTlpGNmRualhCMjcvcVo4Uk1tTVQxc0doTW1UYVpTcGNxWXpXYUdEaHNCUUZKU0VtKzgxb0VTSlVvQ1VLcDBhVDZkTWN0eDMreHErUG5LbFg5a05XeUNJRGpDVVVYSUducXJLVE1KUlJHUUpBVzdYZlhhYkRZN0ZvdGREVVZWYjAwV0hFVURUYWhGVVJSUkVJUzdHZ05FUjBWeDZ1VHZWS2xTTmQvOXpwMDd4LythUDgreUZTdVpNM2NCczJiT3dPcFlHemJxNHhHRWhnN2s4eS9YOE13empWaXlhSUdXcjFtL2ZoMXo1c3huNVJlckFmaGh5MmJ0TTMxOGZGajV4V3BHanhuSC9QbHpBWlZZYi9QbVRTeGN0SlFseXo3anQ5OStZOWZQTy9NZG04VmlZY0s0TVl3YVBaWXZWNitsVE9teTJyWmJqY0Z1dHhNVkZjVzZiNzVsL1RjYkg1anhjblp2QXlpeWpOMXUxNHhRbXhkZllzK2VYWVNISDhadXQvUHp6enY1NDlSSldyUlU2MGV4c2JFSUFvZzZIWW1KQ2F4ZTlhWGpjMXlySHNWTGxPRFF3WVBZYkRhaW8xUkpRcVBKeEJlZnIyVHQydFhZYkRZU0V1TFp1L2NYYXRTb2tSa0tmNytKYnpkdVlPYnN1VnI0ZE0vRDd3S2UwMkt4Y1BqUVFTWlBta0R2ZDkvSHkrditFNFJHUjBkckJzcG9OT0xyNjB0Q2dxdksyY1dMRndnT2JzcGJuVG96OHBQUkdJMG1MY2QycjNEeTVFaytuVEdMNTRLYk1PTGpUL2p0MXlNdTI1T1NrcGcyZFRJdnZ0UTJSemo4OTk5WFdiWjBjYk1zSWFoV1JIQjRiS0lnQ0M3THJGUWFOZGxSSTNETnRlblZTcWlzZVd1eXltRXBBRUo2NUx6V1FNbTc4YVduaDAzRjdHSEdhRExTcDI5L1NwY3BrKy8rTld2V1l2bXlKV3piOWlNNm5SNkxKWVBrNUdRUzR1UHg5dmFoYXJYcUFMelV0aDFObXpVRDRQRGhRMXo3K3lydjluNUhlN0o1ZS90azVoMGM3SjVWcTFYVEV1SGg0WWQ0L3ZtV21NMnFhL3ppaXk4UkhuNllwczMrbCtmWXJsNjl3bU9QRmRHTWM1VnExZGozeTU0Q2pRR2dhMGkzZTVibktBaXlOK2hPbVR5UktaTW44bnlMbG56OHlXZ3FWcXpFcURIaldEQi9McEVSRVpRcFc1YXBZWjlxTW0ydFgyakRxVk1uNmRHOUt6cWRubll2dDZkaXhVckV4YnZlT0FNSGZrall0S21zV0w2VU1tWEtzSFQ1U294R0kxT21oakYzeml5K1dyc0dnOEZBY0pPbWhEakNmVW1TbURaVkRRUGZmTjIxdytqekwxZFRyRmp4dXo0ZkJUMW52ejd2SXdncWMreWdEd2ZmdFQ0MlJRRnZ6NEtYd2k5ZnZveXZyeS9ObXpjSDRQang0MWl0MWh6M3c2MkF1UUFBSUFCSlJFRlVUODJhS2syM1hxOW5VRGFtM0R2RmQ5OTlsM2N1UGNzNWF0V3FUYTFhdGJXL0Z5OWF3TzVkdS9oZjgrZHpGTEg2OTN1ZmxPUVVRcnEvWFdMMDJQRlBObm11MGEvWjhtdzJRYlhrem5CVVVZc0lNb0tnZW15U28xYmd6TFhwSmFmeWxIUDVsSnBiQXhDTVJsM3J1M1h4RFBwd3NFWWJYQkNzWGJNS3U4M09sS25URVFSQmF4OXdoamhPR0F3Ry9QelVKNnpOYWlPNFNWTk5iaXkveEcvV0VDbXJkeTRJZ2xhS3ppKy9rbGV6YUVIR0lHWmY1M09QMExKVmExcTJ5dmtUVnF4WWlWLzJIY3ozMkVhTkd1ZDU0NXBNSmtaK1BNcmx2WGQ2NWVTL3E5L2dhYjVldnlISCt4VXFWbVRtN0xtNWZyWk9wMlBQM2dQMzFkQVg1SnkzbXE5L0FrRUF2YzVPYW1wS2dTcVZpcUp3N05peGYzemVWV3UrdW05ejNLdjNlL1RxbmJ1bSt1dzU4N09tS3VvQng3T0ZvN3BzNGFpZ3lMSWlTWFpFUVVTU0JNZmlna3l2VFpTZFlhaWpHcXFTdVdsaGFHc2VFS0tqWS9EMjhVWVFCSTRmUDBaU1VoS0tvbEM2VEJtU2s1TTVmLzRjQUQvOXVGVVRjcTFYdno0Lzc5eko5ZXVxV096T25UczRlZkwzZk05VHQyNTl0bS9iUm5wNk9qYWJqUisyYkthK296U2RGOHFXRFNJNk9sb3J1VWZjeUpUM3U1TXgvSk1udlRsTGJzK043RWx2enh3OWdROTZ6bkliRTBBUjN3UlNrL01XemZiMExGaklXOUQ5N3VabjNjMXptanc4bW1UejFwdzliYUxqNVNEbFVBUkpraEFFdXlBN284NHNYcHRlQzBNVkJTVkxHSm9XTWJmcDNRcEQ4MEorZ2hTdnZmWTZZOGVNNG9jdFc2aGNwUW9WS2xZa01TR0J3TUJBeG93Yno2ZGgwN0JZTEFRK0ZzaVFvV3Bpc2txVnF2VHJQNENoZ3ovRVpyZFJMcWdjZzRjT3kzY01UOVd0Uzh0V3JYbTNsMW93ZVBhNUpqUnQya3hMaGk1ZHNwaVUxQlJrU1dMZjNyMTA2UnJDUzIzYk1YVDRDRVlNRzRLZnZ6OTZ2VTRySHR6SkdQN0prMTRVNVFJLzZSOGxwS1lrSTRweWpwNUFkYzZrQnpKbnFTbko2RVFwMXo3Rll2NXgzSWoxSnlwU3djdkhMOGZZeXBXdmNNdEY2WjZlWHBRclgrR3VqZmRCbkJNb3NYM0hyc3JQTjI5NmdpdzBSazZqcGhvMkJGbVdIZTRiU0xLZ2RYWTRLNlJDa1VBekZxdGRzRnBsN0pJaXlLcFlpODRXczJDU0tBb2YzTzZvSGlYdTludUJpK2YvSkxoV3dacytMMGRWSmphNWtIdHRiamJjakx4QlFLRWtnaDdMT1plWG95c1RtM1QvNXl5L01UbTl5YWo0UWtUR0IyQ1RqS1Erb3NRdDZlbnBTMXUzYnIwS1ZROGhHVlh3SmQwaCtHSVRCQ1JSRkdTRFhsQ01SaEdUVWErWVBReVl6UVk4elNhOHZFem9uV0dva29YSlExRVVVUlNGNXZjNkNlcEdUbmg3S3JmRjExVW04RHhSOGRXNUdYa0RieDgzTlhocVNqSXBLY25ZYlJtVUNUaVhleW9oOEN4UmNVL2V0emx6amtteXAxTTI4R3krSG5oUi95U0sraWM5NHFJOFNrUGdxeXpocU03QjlxRldSeEVjQytOQmxoVkZWcHQyRlVsUzFBcXBYVUtmclNrWEJZUzR5ek9xY1FkaUxiZWJCSFVqNXcyZzE5bHY2NElXUlptNmxjNXdPYm95Y1lsV0V1TGl5TWg0TkIvMVpyTW5vaWdUVU5oRzJjZk9JUXBLbnRkcHZVb251UkpUbVpnRXl6MmRNN1BaRTUwb0VlQnJvV3pnMlFML3RvOHlPYXNnQ05XM3J1OWJ2SFhIdVg5cHhrMUJoK0RJc1lFZ0tLck5rbVhVYmc1SFpkVDUwcXZVMzluV2hucDdOTG5UUVJYeFRTQWlJY0Z0Mk80QUtTbUpsUFM3ZmNvaVViQlR2c2dmbEMvaWx0KzdIY01SOU5oWmdoNTdPT1QzM0hERlU3V0NxZ0YvT3cyYkFqb2hhd0ZCemJVcGlxTk5UWEtzUm5EMHR5RTZ2RFVCYlcwb2drNFVuN3ZUQVJYemowT1JFb2k2ZVkyMEI3Q083dCtJdE5RVW9pS3VncFJJVWI5L3hzWDJhRC9wSDc0NWN4dTFPNE92cjJjdDFLS0Juc3dDZ2lyMG90R3BLWUtzSURpOE5rR1dsU3dlbTVPZXlPR3hEZXJYVENjSUJQK1RIL0twU3BlNEdlL0R6ZmdBa2hPTnBLUzZmNmk4NE8wRkJwMlZVb0Z4RlBGTmNrK0lHMjRBQnIydVljM3F4UXduL29qVVp3bEhSUVJFQlVVQVFWQVV4eElyeGJHNHdFRzdKc2t5Z3BkWko5anNpaUNwMVZBeCtmcnNwcDVtNDQvdXFYWEREVGNlSkk2ZXVOTG5xZUNKcDhoU0hSVUUwZ0dySUFnMlFVRFdhZFZSSFI0bXZlTGhZY0JzTnFLM1Mxa1d2aXVLY0RNcXNlSDk2b3gzd3cwMzNNalRhelBvS2dOL1pnMUZGUVZSRUZBN09CQ1FaUVc3QklKTlJoRHNhc2dvZ09EaDRTSGE3WFpCVVJSUlVSU2QzVzdmSkFqQzgrNXBkY01OTng0azdIYjdib1BCTURHTHg1WWlDRUlxWUJFRXdTb0lnaVFJZ3F6WDZ4V2owYWc0Nk80VnM5bU02RndYcVNpSzhPcXJyK29FUVdqb25sSTMzSERqUVVPdjE5Y3RXN1pzMXNLQlZrQndPR0t1VkVaWlhvTFJhQlFsU1JJVlJkRWxKaVkyOVBiMjN1V2VVamZjdVA5UUZJWEl5RWh1M294Q2tpUlNVcElmK1RrNWRlcFU3NzU5KzU1MWVteU9WN29nQ0ZiQTd2VGFkRHFkb3Rmck1SZ01pc2xrUXArVnljTER3Nk91Ky9KeXc0MEhZOVNPSFR1R2dxQ3RobkRyOFlLdi8yUGxnUXRrYWZ0d2tFOXFqVFNDSUNBSUFxS29RNi9YbzljYk1oZVdBb0pPcDN2cTMvamxRME5EYWRXcVZZSDJUVWxKUVJBRWR1L2VmY2ZucTFXckZwTW5UNzdUdkFHaG9hRVVLVktFd29VTDA3dDNiMDBFeFkxSEY1R1JrU2dJRkMxV3d0M2NuZ1UrUGo2VnM0V2hvcE40TXF2dFVobUpaTFdmVFpIVkhKdHpuYWdnQ0hYY1UzbHZNV3pZTURadDJzUzZkZXZZdEdrVE8zZnVwRisvZnU2SmVjUVJGUlh0MXVQTkJRYUQ0UWx5NXRpeUdUVUZsVzVOUVZGa0ZGbldkdUQ4K2ZORmdFcnVxYngzU0UxTlpkNjhlWVNGaFJFY0hFeHdjRENMRnk5bTVjcVZ4TVRFdUNmb0VZWWtTWGZrcVowNS9RY0RRL3ZmOC9HZE9YT2FzR2xUMk81UUtuTmk0OFp2Q09ueUZpRmRPN2tJOGtSSFJ6UHdnd0dFZE8xRTN6N3ZjZlhxRlczYmlSUEg2ZmwyTjdxRmRHYjBKeVB6MVdZVkJLSEN5STlIZWVkajNBQUVIQXNObk0yNnpxcW9VS0pFaVNmL0t4ZkpkOTk5Ui8zNjlUR2J6WGg1ZWRHOGVYUE9uWE5sZXZqbGwxK29WcTBhSGg0ZU5HdldqTC8rK2t2Ykpzc3lZOGVPcFhUcDBuaDdlOU9vVVNQMjc5K2Y2N21pbzZONTVaVlg4UFB6dzl2Ym14ZGVlSUVMRnk1bzJ3TURBL253UTVWTjk5aXhZNlNucHhNY25MbXc0OWxubndYZzRNR0Q3cnY3RVVaeThwMnRPcWxjcFNxanhveTlwMk9iUDI4dXk1WXU0ZExGaXk1RzZPclZLMnhZdjU0Rmk1YXliUGxLVHB3NHhwRWo0WTVqNXRDczJmOVkrZmtxdW5WL215bVRKbXFwbUVrVHhqSHlrMUY4dHZKTFNwVXVvMmxtNUlWbm53c3U0VEJrTG9TVGpyQlVXNEdnS2xpcFhwdm0waGtNaHYrRVlmdjk5OTk1NVpWWDZOeTVNMmZPbkdISGpoM2N2SGxUTXk1T3pKbzFpMG1USm5IOCtIRzh2YjFwMXF5WnByd3pjZUpFbGl4WndwSWxTemg1OGlRZE9uU2dlZlBtbk0xRkhEYzBOQlNMeFVKNGVEakhqaDFEbG1WQ1FqTDFCQVlOR3FSeDAxKy9maDJqMFVoQVFFQldWNXVBZ0FDdVhidm12cnZkeUlIWTJGZ0dEUXdscE10YmRBdnB6T0ZENmdQUXFjbmJvWDFiUXZ1N3BqS0dEZmxJOWFLNnZFVzdsMTdnelRkZTFiWmR2SGlSMFA1OTZkNnRDNE0rR01ETm01RXV4Njc3K2l1WC9RRjZ2dE9Mc09rektQLzQ0NjczMm9rVFBGVzNMcDZlS3NtcW42OGZKNDRmMTd5eTU1NVRIK0NGQ3hmbXp6L1BZTFZhaVl5SXdNTnNKaWlvSEFEKy92NmNPSjQvelhueFlzWEtaREZxamp4YjFuQlV5UXhKMVR3YmVsQjcySFE2WGZYL3dvV2dLQXFmZnZvcC9mdXI3bmxRVUJBaElTRXNXTERBWmI5UFB2bUVkdTNhQWJCaXhRcEtsU3JGNXMyYmVlbWxsNWc4ZVRMTGx5L1hDaElEQnc1azE2NWR6Snc1TThmblhMNThtZEtsUzFPeVpFazhQVDFadm55NWk1RWFOaXlUUFRjdExRMFBENDhjWXphWlREbmswOXh3QStDcnRhdXBVYU1HSWQzZTV0S2xTOHlmTjRjR1R6ZlVOSG5QbnovSHhQSGpYSTZaTkdVYW9FcFk5bjZuaDZhL1liVmFtVGgrTE9NblRxWjQ4ZUw4OU9OV0ZzeWZ4K2d4bWNmWHJGVXJoNTVIWHNKRGlZbUplSGg0RUIwZHphUUo0NUJrQ1I5SG5qQXhNUkdUaHdmZmIvcU9IVHUyWVRRYVNVbEpJU2twQ1pQSmhOVnFaZTZjV2R5NGNTT0h3bFoyZUhsN2w4dGkxQndHVGhFZEZBT09YamFjdFFKRlVSUkI3Mnh5RXdUaFAySFlhdGFzU1VCQUFOT25UK2ZNbVRPY1BYdVdYMy85bGFKRlhZdm5qUnRuQ3BVRUJBUlF2bng1L3ZqakQ1NTg4a2xTVTFQcDFxMGJiNytkS1pSc3RWcGRqbkZpeUpBaHZQbm1td1FHQnRLMGFWTmVmUEZGdW5idG11dll6R1p6RGpVaFVDWGRIb1NNbXhzUFArclZiOENjV1RNQWdmcjFHeEEyZlVhQmpwTmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjZ2N0tESmUyZlFLS2xXcVRLVktCZGRLUFgzNkQ0Nk5HRXJvQjRNNCsrZWZYTXlTaHBrMFlSd0JnWUdFVFovSnF4MWVkakdJQXo4WXdJc3Z2a1NIanE4eVl0alFmTTloTUJncVpNdXQ1Y3l4b2FDQVZrRFFaMjZnNm4vaFFqaDQ4Q0RObWpXalNaTW1ORzNhbE5kZWU0M3c4SENXTGwyYTcxTklyOWRqTkJvMXJjMDFhOVpRdmJxcnJjL04yMnJidGkzWHIxL24rKysvNThjZmYyVDQ4T0hNbnorZnc0Y1BheTY2RTZWS2xTSWpJNE9FaEFSOGZYMEJzTmxzeE1iR1VySmtTZmRkN0VaT3cxYXZQblBuTFNUOFNEaWZyMXlCMFdoa3pMZ0p0enh1MmRMRmVIaDQwTGxMNWtQV1pyTlJyRmd4VnF6ODRxNk1yWERod21Sa1pCQTJmU2FGQ2hYaXhJbmpGSFpjMTRVTEYrYVpSbzAxa1hOVmh0S2JRb1VLa1pTWXlJU0pVM2o4OGNjNWUvWlA3VjdJQzRJZ1ZNNlNXOHVhWjh0ZVFGQ2NCUVFSRUtLaW9pb0Jwdi9DaGJCZ3dRTHExNi9QMXExYkdUeDRNQzFhdE9ER2pSczVKUFd5NXN1U2s1TzVlUEVpMWF0WHAzejU4cGhNSmk1Y3VFQ0ZDaFcwMTZKRmk5aXlaVXV1SHR2NTgrZnAwcVVMcTFhdFl2LysvWnc2ZFlyampseERWdFN1WFJ1ejJjemV2Wm1xNS92MjdVTVVSWjUrK21uM1hleEdEa3lhT0o3d0krRTBiLzQ4dzRhUDVOQ2hneTdTa2JsaDM3Njk3Tm05bStFalBuYVJxcXhRb1FKSlNVbjhzbWUzbG0vN2ZwT3JUdWo1OCtmWXVQR2JBbzN0eVJvMXNGcXRtRXdtSkVuaTRJSDkxS3lsYXBuV3FsVmJHK2ZSMzM0aktLZ2NScU9SWXNXTFU5alhGNVBEc2RpM2Q2OTJURDR3TFY2NlBEQVhnNmIxc0FGWlBEWkhqczNiMjd2Q2YrVkM4UGYzWitmT25adzhlWktTSlV1eWJ0MDZsaTFiaHArZm44dCs0OGVQcDNIanh2ajYraElhR2tyRmloVnAzYm8xb2lneWNPQkF4bzRkUzdGaXhXallzQ0hyMTY5bnhvd1piTisrUGNmNXpwNDlTNTgrZlpnM2J4NEJBUUdzV0xFQ2IyOXZxbFJSQlcwbVRacEU3ZHExYWRXcUZWNWVYdlRvMFlPK2Zmdmk0K09EMFdpa2QrL2VkTy9lL2I0cG5ydng3MExuemwwSkM1dkMydFdya0dXWmdZTStRaFRGZkJYZTVzNmVTVVpHQm4zZTY2Vjl6dHo1aS9EeDhXSFNsR25NL0hRNml4WXV3TlBUazRIWmhKU1BIVDNLaGczcmFkKyt3eTNIVnJac0VPM2JkK0RkWGoxUlVIajIyV0JOTy9qOVB2MllQR2tDNjc3K0NyUFp6SkJodzdYSWFQaUlqeGszYmpRMnE0M1NwVXN6ZU9qd1c1NnJRb1dLandIWGMvZllIRG9oR3Jla2dpQ0tvb2ZGWWhtZzErc24vMXQvL05EUVVQNzg4MDkrL1BGSFltTmo2ZG16Snp0MzdzUmdNUERVVTAveHhodHYwTE5uVDY1ZXZZcXZyeTgrUGo1TW5UcVZsU3RYOHZmZmY5T29VU01XTGx4SUdZYzZ2YzFtWTh5WU1YejIyV2ZFeE1SUXVYSmxQdm5rRXpwMDZPQjRHdFhpalRmZVlPalFvVVJIUnpOZ3dBQzJiOTlPY25JeWRlclVZZHEwYVRScTFBaFEyejI2ZGV0R1dGaVlsazhMRFExbHpabzFpS0pJeDQ0ZG1UMTdkcTVocmh1UER2YnMyZU5XZDhzSGNiR3hZVFZyVk4rT3VtYlUrVW9UQkNFRFZTbGVFa1ZSWFROcU1DaUNJQWhtdTkwK1V4VEZYdTdwYzhNTnQyRjdHSkdSbnI2NllvVnlYMlF6YktsWkRKdGRFRVJacHhNVnZjR2c2QjNKdWFCLzZ4ZWVOMjhlZmZ2Mi9VLzhlSkdSa1RtcXR3V0JMTXRjdm5LVnVMZzRKRWtpSS8zUlhIdnFZVGFqMCtudzl3c2dLS2dNK1JHbUtvcmltTE5ZN1BaN04yY2Vaak42dlo0QS93Q0Nnc3JlY3YvcjduN0dYQ0ZKVW5FY1RibFpYNHFpcGhIVjdnNFpXUWJKTGlFSWd1QXB5L0pSb0xKNyt2NTlzRmlzbkRoeEFwMWU3OVlWQlZKVFUwaEpUa0tTN05TcVdRdWowWkNyVWZ2MTE5OFFkYnI3b3l2cUdKTXNTOVNyVzlmdHNkMEJGRVU1WDZaVThRL0lKSjEwRWs4NnFjTHRqbkJVMGV2MWlyTzZVTlk5ZGY5T1JFUkdvTlByM2F3UURuaDVlVk8wV0FsME9qMDNJbTdrdXM5Zmw2OGc2blQzYmM2Y1l4SkZIVmV1WEhWZnRIY0FRUkJLWi9QWXN2L2ZwVmxYUEgvK2ZGSEFuYm4rbHlJMkp0Yk5DcEVMdkgwS0VSTVRtK3UydUxpNEJ6Sm4zajZGaUlsMWt4M2NhVlQveWVneDN1VFo4dUhVYlFGUTBBY0VCQlIzejltLzFUMi9jMWFJUjhGelMweUl5M1hiZzVvekx5OXZFdVBqN3VqWXBNUkVMdjkxa2RSOHRIcTl2THdKS3ZjNGhRb1hmbUR6ZmkvSFdiVkt0VUpBVEM3ZW12T093Tm42b1RlWlRFWHYvZzNucGpndUtIeDhDcUhUaVJRcFVvVGl4Vy92R1NNSWtKN3VKcW5NQytsNUVIZyt5T0xLbmY1ZWYxMjZRRnBhL2dLOXFha3BYUDdySWpWcVBUaGF4WHM1enNlS0ZDbVUzVnR6RkE4RTEzQlVVZlE2bmU2dUdqWTN4Zkh0SXpVMWhSc1JrZHlJaU9DcE9uZjNvdHkrN1NkV0xGOUdWTlJOU3BRb3dlZGZydUg4K1hQMDZKN0pRREowK0VoZWVLR04rNGQ0aUhFclk1SDFXdnF2anJOUW9VS0ZzaGd3WjNPdTRGZ01ueldTRWZTaUtENTJONzlZVm9wak53b2Vvbmg1ZVJOMU00TEl5RWlLRlN0MlZ6NzN4bzBiVEprOGtUSGpKbEN2WG4yU2tsVE9yd29WS3JKOTUyNEEzdW5SN1o1OXIrWExsdEx1NWZZdU5FM09jYzJhTVoyVEozL0hhRFRTL1BtV3ZQZCtINDFWNHRxMWE4eVpOWU9UcDA1aU1wbG8wYUlsdlhxL2w0TjE0bTdpVnVkOHJuRkREQVlEZ2lBU0ZCUkU5eDQ5YWRTb3Nmdml2WTh3bXowS3VScTFIQy9IMGtrRlVSVEZnTHQ1Y2pmRjhUOHdjTjQrM0x4NTg2NTkzdGsvenhBWUdFaWpSbzB4R28wRUJnWTZRbGdCaHdhankxckN1NDNQVml3akxpNW5Bbi8wcUpHVUxGV0tqZDl0WnZHUzVSdzZlSUJObTc0RjFKNjhvWU0vcEZMbEtuejczV2JtekpuUG50MjcyTGpobTNzMnpvS2VjKzc4aFh5L1pTdmRlL1FrYk9wa05ueXovb0ZjSjRJZ1VLZE9IVnEwYUVIejVzMHBVZUwybklpREIvWVQwclVUcjcvNkNqTStEZFBXZE5wc05zS21UU0dreTF0MEQrbkN2bjJaYTVyelk4UzlkNUZNS3B1Kys1YWhnMVhhSllQQm1OMWpFM0VVRHJKR2pGYXJGVkVRaEx1NlNOR2R6UDVubnB0ZGt2N3g1eHcvZm95WDI3WmgydFRKUkVaRzhuTGJOcnpjdGcwclAxdFI0TTg0ZFBBQW5kOTZnK2JOZ3VuUlBZUS9UcDF5MmI1bjl5NUN1bmJpaFZiUDA3MWJGdzRkUEtCdDY5ZjNmVjV1cTRhMkh3em96OHR0MjlEMy9YYzFJeEljM0pTdUlkMHdtVXdVS1ZxVXV2WHFjYzVCU2hBWEY0ZWZ2eitkT25mR2FEUlNxblJwR2pWK2xqLy9QSFBQNXYxMnptazJtMm5VcURIRGhvOWt5ZUtGK2RKYTN5dVVLMWNPblU3SHRtM2IyTHQzTHpWcjFzUmdNT1Jxc0xQL1B5TWpuYWxUSmpGeDBsUldyMTFIVEV3TTIzNzZFWUN0UDJ3aEl5T0RsVitzWnZxTVdjeWUrYW5tNWVmRmlGc1FQUEhFRTlwRE5iOHhadjA3SmlhR2QzcDA1OEtGODlydm9OZnJDK1hocVdrdldaYlI2L1dJZ04vZG5QUTdwVGgyUTBWSzhqOHZ0TlNxVlp0dk4yMWhRT2hBU3BZc3hiZWJ0dkR0cGkyRWRPdGVvT012WHJqQXh5T0g4MTZmdm16WnVvMVhYM3VkZ1IvMEo4cmhUVjY1Y3BueDQ4WXdaTWh3TnYvd0V5KzkxSTRSSTRacGFsdHo1czduMjAwcUU4cU1XYlA1ZHRNVzVzNWZDSUFvaW5UcTNBVmZYL1d5Kyt1dlN4ell2NThHRFZSMms4REFRT2JNblkrSGgxbTcwSThmTzBhTkdqWHYyWnpmeVRucjFXK0ExV2JURFBMOVJHQmdJRGR1M05BOEZGbVdjNUE4SERrU3pvaGhRN0RaYk1URnhmRk9qKzdFeGNVUkVSR0JyNjhmSlV1V1JLZlQwYXBWYXc0ZlBnU29yTGZQUHZ1YzQzY1NNQmlNbkR0M1Z0dVdHeU51QVhOamVaSlZMbHU2V0tNR1Azbnlkd2IwVjFjUitmcjY4c1dxTllSMHkrUkUxT2wwdVlXaXVJYWhxa2NyQXZjOGJodzBNSlRYT3JZbnBNdGJkTzM4SmxzMmY2L2xOVjdyK0FydDI3MUk5NUF1OTNRTTNVTzZjUEhpeGRzNlp0dFBQL0pheDFkNG9YVUxacy9LbStCdng0N3RqUDVrNUgvR3VHN2V2SW5nSmsxcDFLZ3hKcE9KVnExZm9FclZxbXh6Q0hrRUJBU3lmTVhuVkt0ZUhWRVVlYWx0TzJ4V0szLy9YZkRtMHo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMGVmRytmZitDbkZNUUJQejkvRWw1QU1sNm85R0lKRWtFQkFUUXVIRmpaRm5HWkhKbEhhdGJ0eDcrQVFHTUdmMEpnd1lPb1AwckhmRDM5NmRZc2VMRXhjVnk2ZElsN0hZNzRlSGhwS1NvMzhISmlIdnExRW1HRFA0UW84bElZbUtpdHMzSmlEdDN6aXlORWZlZjRzMjNPck5yMTgvTW1UMlRjV05HMDdkZmY2ZDNsaU9uS2dpQ2R6NjVOUmNqcHhjRTRiNGt4RDRhTW94NjllcVRtSmhBcjU1dlU3V2F5bjJXRjczeHc0QVdMVnZSb21VcnZ2NXFMWkdSRVkrTTF4Z1pHVW1GQ2hWZDNpdFRKa2liQTI5dmIzWnMzOGI0OFdOSVNVN0pNNnpJRDlXZmVJSnRPM1lSRVJIQkp4K1BZUG15cGZSOHg1V0g0Zk9WbjNINDhDSG16Sm1QWHErL0w5KzlvT2RVRklXNCtEaThIMURheFJtTzd0Ky9uMXE1OEprSmdrRHYzdS94eHVzZEtWT21yR2FreldZenc0YVBaUEtrOFk3ZnRTeWVack4yM1BmZmJ5STlQWjFKazZjeGUrYW5McCtaRnlOdVhtalZxaFhlM3VyOE9QT0FwMCtmNXZUcDA5byszdDdldlB2dSszd1EybzgzMytwRTVjcDVMeXNUUmRFN256QlVNMm8ybXcwOWNGODVxUXNYOXVXSkoydHc4Y0o1eXBjdm4rZCtpWWtKVEo0NGdhaW9LT3gyRzUwNmQ5WFlPTStjT2MzTUdkTkpUMHVqU05GaURCMDJRb3ZoZCsvNm1kV3J2OFNTa1VIMUo1N2tnNEVmYXZtSFhUL3ZaT3pvajBsUHo2QnZ2LzZhbC9ETituVnE4bHBSYU5yc2YzVHIzdU9XMytQSWtYQStuVDROVVJBcFdhb2tudVpNdHR6OHh0QzhXVEQ5QjN6QTBpV0xVQlQ0ZnN2V2g4NndGUzFhbE1nSVYwTisvZm8xYXRkV1cxSDIvcktIVlY5K3dZeVpzeWxWdWpTZ1ZnMXp1N215R3p0TFJnWmJ0LzVBNjlZdllQTHdvSGp4NGpSdi9yeExvaHBnL2JxdjJiN3RKMmJObVhmZkdrNXY1NXhIam9Sak5CaW9WUG4rTDdHMldxM1k3WGFPSGozcURORnlhR2FrcEtUdzBVY0Q2ZHdsaEhObi8yVEs1SWtNSFRZQ1FSQjR1dUV6UE4zd0dVZnViSzVHUzErNGNHSE1aak5qeDAxQUZFVXNGZ3VGSGZPUUZ5TnVmdmp4UnpWMzk4d3p6M0Q1OG1VdGZIWkplMXk4eU9SSkV4ZzdiZ0lybGkrbFROa2cydVR0S1h0bE0ySlpqSnFRTldSRkJEenY1NDhTSFJYRnFaTy9VNlZLL2t6azU4NmQ0My9ObjJmWmlwWE1tYnVBV1RObllMVmFzVnF0alBwNEJLR2hBL244eXpVODgwd2psaXhhb09WcjFxOWZ4NXc1ODFuNXhXb0FmdGl5V2Z0TUh4OGZWbjZ4bXRGanhqRi8vbHhBSmRiYnZIa1RDeGN0WmNteXovanR0OS9ZOWZQT2ZNZG1zVmlZTUc0TW8wYVA1Y3ZWYXlsVE9uT3A3YTNHWUxmYmlZcUtZdDAzMzdMK200MFB6SGpaN1hhTkJsMlJaZXgydTJhRTJyejRFbnYyN0NJOC9EQjJ1NTJmZjk3Skg2ZE8wcUpsUzBCVlRoSUVFSFU2RWhNVHRCeUpJcnV5RkJjdlVZSkRCdzlpczltSWpvcFN3eWlUaVM4K1g4bmF0YXV4Mld3a0pNU3pkKzh2MUtoUkl6TVUvbjRUMzI3Y3dNelpjKzhiQVdkQnoybXhXRGg4NkNDVEowMmc5N3Z2UHhDdGl1am9hSzJhYlRRYThmWDF6U0dJY3ZIaUJZS0RtL0pXcDg2TS9HUTBScU9KdURqWFZRK0hEeDFreDQ1dFdnOWpyVnExc2R2dGlLSklRa0k4Rnk5ZXBGTEZTdHEyM0JoeC95bCsrL1VJUTRlTm9FblRabnc2Y3c2bi96aVZnKzA2eTRQU25NMm9aWDJHdXBUMzlZRDVmdndZMDhPbVl2WXdZelFaNmRPM1A2VWRwSTU1b1diTldpeGZ0b1J0MjM1RXA5TmpzV1NRbkp4TVFudzgzdDQrVksybTZoRzgxTFlkVFpzMVUzK293NGU0OXZkVjN1MzlUcGFuaWs5bTNzSEI3bG0xV2pVdEVSNGVmb2pubjIrSjJlR092L2ppUzRTSEg2WnBzLy9sT2JhclY2L3cyR05GTk9OY3BWbzE5djJ5cDBCakFPZ2EwdTJ1WEJSM2l1d051bE1tVDJUSzVJazgzNklsSDM4eW1vb1ZLekZxekRnV3pKOUxaRVFFWmNxV1pXcllweFF0cXZiWHRYNmhEYWRPbmFSSDk2N29kSHJhdmR5ZWloVXJFWmR0dWREQWdSOFNObTJxK2lRdVU0YWx5MWRpTkJxWk1qV011WE5tOGRYYU5SZ01Cb0tiTk5XU3hKSWtNVzNxWlBSNlBXKyszdEUxVFB4eU5jV0szZjBWZ0FVOVo3OCs3eU1JS25Qc29BOEgzOVUrTmg4Zm53THZlL255Wlh4OWZUVlp4K1BIaitkSTVOZXNXWXVhTld0cCthcEJXWmh5NCtQajZOV3pCNlZMbDJiaXBDazhWcVNJOXJ1ZU8zZE95M2YzR3hDcWVhNTVNZUlXQkFjT0hNaHoyMnV2djZIOVB5QWdnSThHNXl2czRwRlBHT3F3Y0NLU0pLRUg3c3NkTnVqRHdScHRjRUd3ZHMwcTdEWTdVNlpPUnhBRXJYM0FhWjZkTUJnTStQbXBUMWliMVVad2s2YWEzRmgraWQrc0lWTFdWaTVCRVBKOFltVE5yK1RWTEZxUU1lVEhFM1kzMGJKVmExcTJhcDNqL1lvVksvSEx2dndGbWhzMWFwem5qV3N5bVJqNThTaVg5OTdwMVR2SGZ2VWJQTTNYNnpma2VMOUN4WXJNbkQwMzE4L1c2WFRzMlh2Z3ZocjZncHp6VnZOMU44YVFtcHBTb0ZZcDUrcWVPNFdmbnovcmNva1dzaHZBckFnTURDeXdRdGJkUkVCQWdGWmh6OFZXQ2RudGdTQ0FUcWUyZXp3NDF5RmZkenNHYng5dkJFSGcrUEZqSkNVbG9TZ0twY3VVSVRrNW1mUG5WV1gzbjM3Y1N0aTBLUURVcTErZm4zZnU1UHIxNndEczNMbURreWQvei9jOGRldldaL3UyYmFTbnAyT3oyZmhoeTJicU44aGZXS1ZzMlNDaW82TzFuRUZFbHR6Qm5ZemhuOEJzOXNTTjI1dWJCemxuZVoyN1NKRWlwT1d6cHRyVHMyQWhiMEgzdTFlNHgrTTA1dUtwQ1VvMnI4MFppdW9lMUNUa0owangybXV2TTNiTUtIN1lzb1hLVmFwUW9XSkZFaE1TQ0F3TVpNeTQ4WHdhTmcyTHhVTGdZNEVNR1RwQ0RRbXJWS1ZmL3dFTUhmd2hOcnVOY2tIbEdEeDBXTDVqZUtwdVhWcTJhczI3dmRTQ3diUFBOYUZwVXpXMDNmYlRqeXhkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR083WGsvNVJRbXBLY3A1ZXRmaUE1aXcxSlJsZEhwWFc0c1dMRXhFUlFmVE5DRHk5ZlhLTXJWejVDcmRjWU83cDZVVzU4ZzlXbCtrZWoxT1htOGVXVzk1TlVHNFZkOTBtamg0OVNwRmlibzNNTzBWVTVIWHEzTVpDK011WHJ4QWJGK2RlbTVzTk55TnZFQmdZUU5sY2NybVhyMXdoTnZiK3o5bk55QnNFQkFRUVZEYnYvSEpVVkJTUmtaSFk3WGFTazkyc09OblJwRW1UOWtBYUtvTnVFcG1pTGhZMDdRTkJ2dXZOUVc0UDRwODkwVyszWDZ0czJUSkVSMGNqbnRxUEFBQWdBRWxFUVZSeE0vS0dteHJjTVljcEtjbElkbnV1UmcwZ3FHeFpvcUx1MzV3NXh5UkxVcjVHelJtU0ZuRWs4OTNJRmRuRFRzR1pZeE1FUVYxMUlJcUNvQ2lLaExwRTRhNGdJaUtDeU1pYlBGYlV6Vjk1Kzk3YURVcVVLSDdiN0I2S292RFg1U3ZFeGNVaTJXVXlNaDVOamphejJSTlJweU13SUpDeVpVdmZjb0gvbFN0WGlZNkpRYkpMOTJ6T3pHWlBkSHI5TFQwMU53b0VXUkNFamtCcUZvOHRSUkNFVk1BaUNJSk5FQVM3S0lxS29DaUtGVERjN1hCVUVIVjRlWG5qNmZiY2JvazBoOWdIS0xjVmhycmh4aU1HbXlBSXIyY3hiTWxBc2lBSWFVQkdWc09tQis2NllhdFRwdzQzYjk3a1psUVV5VW1KYmdiZGZPRHQ0NE5CcjZkVXFaTHVFTVFOTi9LSHRhQTdPZzNiWGE4UkZ5MWE5STQwTXQxd3d3MDNDbWpZbEd6L2FoQ0JkUGQ4dWVHR0cvOENaQlRZWTd0eTVZcGJEY1FOTjl4NDZLRW9Tbm91M3BtaU9CUmRuSjFyaXFJbytySmx5NmE2cDh3Tk45eDQyQ0hMY21xVzBGTXpjTm5iUFFSQlFGUVV4VTE1NjRZYmJ2d2JQTGJzekpaS3R2OXJmK3RSZTBIY2NNT05CMy9qdXZWNDg0SGRiay9KWXNDVUxLR29ralVVbFdVWnZhSW9DZmRTcWNnTk45d29tRkZ6Ni9IbUQ0dkZrcHlieCtacXZ6SkQwYmhIYllKS2xTcEZ0V3JWY2hXajhQYjI1clBQUHJ1WFR4MUNRME1wVXFRSWhRc1hwbmZ2M3BvSWlodVBMckxxOGJxWEkrWjU3eVJsODlnVWNtbjFBTld3eFQ2S2szVG16QmttVFpwMDM4ODdiTmd3Tm0zYXhMcDE2OWkwYVJNN2QrNmtYNzkrN3F2MkVZZGJqL2ZXc0ZxdFNWazh0Vnp5YTRMS3JTaUFLRWxTektNNFNlWEtsV1BpeEltY09YUG12cDB6TlRXVmVmUG1FUllXUm5Cd01NSEJ3U3hldkppVksxY1NFeFBqdm5JZllkeXBIdStaMDM4d01MVC9mWEFFVGhNMmJRcmJIVXBsVG16YytBMGhYZDRpcEdzbmxpOWJxcjJmbjhEeWlSUEg2ZmwyTjdxRmRHYjBKeU1Mck0yYW5wNldqR3RUYnJicXFOTmZBOUZtczkxOEZDK2szcjE3VTcxNmRkNTU1NTE4R1hQWHIxL1BrMDgraWRsc3BucjE2aXhkdXRSbCs4OC8vMHlkT25Vd204M1VxMWVQc0xBd0YzSFl3TUJBUHZ4UVpkTTlkdXdZNmVucEJBY0hhOXVmZmZaWkFBNGVQT2krdXg5aDNLa2ViK1VxVlJrMVp1dzlIZHY4ZVhOWnRuUUpseTVlZERGQ1Y2OWVZY1A2OVN4WXRKUmx5MWR5NHNReGpod0pkeHlUdThDeTNXNW4wb1J4alB4a0ZKK3QvSkpTcGN0b21obTNRbEppVWw2aGFJNFZDUHFNakl5b1c2bk4vQmVoMCtsWXNtUUpEUm8wWU5HaVJiejc3cnM1OXRtN2R5K2RPblZpOXV6WnRHclZpcU5IajlLN2QyOTBPaDNkdTNmbjRzV0x0R25UaHI1OSs3Sm16UnArK2VVWCt2ZnY3eUx3TVdqUUlHclhyZzNBOWV2WE1ScU5CQVFFYU5zTkJnTUJBUUZjdTNiTmZYZTdrUU94c2JGTW5EQ09tT2dvQkZIa3ZmZjYwT0RwaGk0a3JiNitmcXhZK1VWbXVtUElSOXk0b1RJNEp5UWs0T25seFpxMTZ3QlZGV3JPckJra0ppWGk3K2ZQNEtIRE5DMExnSFZmZjhXR0RldTEvUUY2dnRNTG85R29NVlU3OGZ1SkV6eFZ0eTZlbnA3WTdYYjhmUDA0Y2Z3NDllclY1OFNKNDN6d3dTREFWV0E1NnVaTlBNeG1nb0xLQWVEdjc4L1BPM2NVYUM1dVJ0MU1Mb0JSVXdEMEVSRVJFWG5Kei8vWDhkUlRUeEVhR3NxUUlVTm8yN2F0cG4zb3hJUUpFK2pSb3dlOWU2dDgvbVhMbHVYU3BVdE1uVHFWN3QyN3MzRGhRcXBVcWNLMGFkUFVwMmZseXB3OGVaTFZxMWU3NU5TY1NFdEx3OFBESThjNFRDWlREdmswTjl3QStHcnRhbXJVcUVGSXQ3ZTVkT2tTOCtmTm9jSFREU2xWcWxTZW1yeVRwcWpYWTJKaUFyM2Y2YUhwYjFpdFZpYU9IOHY0aVpNcFhydzRQLzI0bFFYejV6RjZUT2J4Tld2VnlzRThuSmZ3a0ZOZ09UbzZta2tUeGlISkVqNk9QR0ZXZ2VVZE83WnBBc3RKU1VtWVRDYXNWaXR6NTh6aXhvMGJPUlMyOGc2N1R6dmJQZVM4UERWbk1DcldyRmt6aXR0WWcvVmZ3OWl4WXdrSUNLQnYzNzQ1dHAwNmRZcGx5NWJoN2UydHZVYU9ITW1GQ3hlUUpJbmp4NDlUdjc2clFFMmpSbzN5UEpmWmJNNjFFbXV4V0I2SWpKc2JEei9xMVcvQXpoM2JXZm5aQ2l3WkdRVVdWSkZsbVRHalI5SG14YmJVcjk4QVVLVWhyMTM3bStGREI5TTlwQXVyVjMrcHFiVTVVYWxTWlY3cDBMSEE0enQ5K2c5R2poaktPNzNmcFdsVFYyVzNTUlBHY2ZueVg0Uk5uK21pVkorWW1NakFEd1pRclZwMSt2VWZVTkJUWlV3WVB6WXRuMUJVTTNTQ29EYm9BbHdGS2oyS0Y0Nm5weWNMRnk2a1pjdVdiTnpvcXR4anQ5c1pOR2dRYjcvOWRvN2pSRkZFcjlmbkVBVE9MMTlYcWxRcE1qSXlTRWhJd05mWEYxQlZxMk5qWXlsWjBrMm43a1l1aHExZWZlYk9XMGo0a1hBK1g3a0NvOUhJbUhFVGJubmNzcVdMOGZEd29IT1hydHA3TnB1TllzV0t1WVN0L3dTRkN4Y21JeU9Ec09rektWU29FQ2RPSEtldzQ3ck9TMkM1VUtGQ0pDVW1NbUhpRkI1Ly9ISE9udjFUdXhmeWc2SW9mMmN6WUhJV3p5M24vYWtlbzF4NWxDK2VGaTFhMExselovcjI3YXVKQ0FOVXExYU5reWRQVXFGQ0JlMTE0TUFCWnMyYWhTQUlQUG5ra3h3NWNzVGxzN0wvblJXMWE5ZkdiRGF6ZDIrbTZ2bStmZnNRUlpHbm4zN2FmUmU3a1FPVEpvNG4vRWc0elpzL3o3RGhJemwwNkdDT2gybDI3TnUzbHoyN2R6Tjh4TWN1emFzVktsUWdLU21KWC9iczF2SnQzMi82enVYWTgrZlBzWEhqTndVYTI1TTFhbUMxV2pHWlRFaVN4TUVEKzZsWlM5VXl6VXRndVZqeDRoVDI5Y1hrQ0cvMzdkMnJIWk1mSkVtNm5zMm81ZUd0cWYwZWVrQ1JaZmx5WG9vK2p3cG16SmhCMWFwVlhYSmRRNFlNb1ZXclZvd2VQWnBPblRweCt2UnArdmZ2ejhDQkF3SG8yN2N2czJmUFp1alFvYno5OXRzY09uU0lCUXNXdUlTVmt5Wk5vbmJ0MnJScTFRb3ZMeTk2OU9oQjM3NTk4Zkh4d1dnMDBydDNiN3AzNzM3ZkZNL2QrSGVoYytldWhJVk5ZZTNxVmNpeXpNQkJIeUdLWXI0S2IzTm56eVFqSTRNKzcvWFNQbWZ1L0VYNCtQZ3dhY28wWm40Nm5VVUxGK0RwNmNuQWJEcWl4NDRlWmNPRzliUnYzK0dXWXl0Yk5vajI3VHZ3YnErZUtDZzgrMnl3cGgyY2w4Q3lYcTluK0lpUEdUZHVORGFyamRLbFN6TjQ2SzNGbDIwMlcwUXVIcHVpcXUrNWVtMkNnQ0lJZ3VDZGtaSFJ6MmcwVG54VUxwWlNwVW9SR2hxcXRXRTQ4Y1VYWDlDMWExZFdyRmhCdDI3ZEFGaTFhaFVUSjA3a3dvVUxGQ3RXako0OWV6Snk1RWp0U2ZqVFR6OHhjT0JBTGx5NFFPM2F0V25Rb0FIcjE2L1hkRVVEQXdQcDFxMGJZV0ZoV2o0dE5EU1VOV3ZXSUlvaUhUdDJaUGJzMmJrV0ZkeDRkTEJueng0ZXIxakZQUkY1SUNZbTV0UGFOWi80QlZkYThCUW5MVGdxYmJna2lxS3MwK2xWdzVhVWxOVEcyOXQ3clh2NmJnOG5UNTRrTFMyTkJnMGFhTytOSGoyYUgzNzRnZkR3OFBzMkRsbVd1WHpsS25GeGNVaVNSRWI2bzdsRXk4TnNScWZUNGU4WFFGQlFHVVJSekM5bjQ1aXpXT3oyZXpkbkhtWXplcjJlQVA4QWdvTEt1ZzNiSGVMc24zOE9hLzYvSnFmSktlU1NEamlrOTBSSkZFVlpyOWNwZWtDSmo0Ky8rQ2owc2ttU2ROdnlkdm5kR0JjdVhLQkxseTZzV3JXS1dyVnFjZkxrU2ViTm04Znc0Y1BKalBjTGpzakl5TnVtVTdkWXJKdzRjUUtkWG85UG9jSnUrYjNVRk9JVDRvbjVMWnBhTld0aE5CcHkvZTErL2ZVM1JKME9iNTk3UDJlcHFTbkV4c1VSSFJOTnZicDE4OTMzdXJ1Zk1WY2NPbmdnbHN5Q2dWWTRjREI3T0VKUkJRVUZXWllSQkVId0JJei9aKys3NDV1by8vK2ZkNWRjZHZlbXBZVzJERkdnU0FFL0ZCRi9iQnpnRjBVRlJDeFlrQ0VnSWhRVUZHUXJRZ3NpVTVDbElHSlpBckpreWlwWWhteVEwcWJwYnRPUmNYZS9QMjQwU2ROU29HWG05WGhFYWRaZDNuZjN2TmQ4UGxtVzFRTlF1SmJ3N216cTFLbFl2SGd4MHRMU0VCd2NqTGk0T0l3ZVBicFNiNkU2N1dHSi96N3F4b3NUZXlFc3RMeVhkTzM2RGVUbTVqNFV3V1FmYjIrRU9wSGhjM2xzbGQrL1Eyb0Y5QUV2WTJCMENFVkxBSmdGb1dTR0pFbE9KcE54Sk1xU2NSZGM2M2YzRmg4ZmordlhyOE5rTXVIcTFhc1lNMmJNQXdNMUFNak95bllOVHpzeHJjNE5XVm5PK1IxeWNuSWV5cHBwZFc3SXluYk5CTjlEcXVVaTdGczhiRnM5N0lzSElvT3U2SjJ6TEh2ZXRZU1BsM0hjdlE5UFArbW0wV2pCc2t5RktZbUhzV1lhalJhTWxYRWRuTHMwaThWeUZlWDcxeHo3MkhoMkR3SGNaQVJCY0J6SGNWYXI5WHhGb3hNdWV6U05JSUNTRWhlWFcwVldVZ0hQM2NNc3J0enI4U3JJejhlTjYxZFJWR1NzRkRqRDZvVER6ZDM5b2YyK210aFBvN0h3cGhOQUsrZXhFVVNaN29GTWZLR2twT1NjQzlncTg0NTQybWFEd1FBcnc4QllXRDIwelZxdERqSzVESDYrdmdnTURLejIvZDYxY3dlV0wxc0tneUVEUVVGQldMbHFMUzVmdm9UWS92Mms5NHlObjRDdVhidTVEdklqYk5ldlhVRnhjZVgwUGtWRlJ0eTRmaFdObXpaN292Yno5dTIwMnc2QXhnQmdoYUpCdVljSWJBREFYYnAwNlZ4MGRMVHJES29BMUpLVGt3R0NoRWFyNDJtYkE2cnYrNHVLakVqWFp5QTlQUjNObWxYZlNabVdsb1laMDZmaXk4bGZJenE2QlFvS2VHcWNpSWhJN05xOUR3QXdNUGI5R2x1M1pVdVg0UFh1UGV6WVRNVDltanZuRzZTay9BT2FwdEcrUXljTS9taUlOSHlkbXBxS2hMbHprSEkyQlFxRkFoMDdkc0tIY1lOUmswM2tkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXpzRTdnWVh0dWZRd3JTYjJjLysrdlJrQ2FERWlxTmw3YmJ5WEJsdVZLaEhsV3Jac21RWGdzZ3ZHeXB0ZXJ3Y0lFbjcrZ1RXU205Rm90UER6RHdSQUlEMDl2ZHErOStLL0YrRGo0NFBXcldOQTA3VEVFMGNRQkJRS0JSUUtCV3BTNytMSDVVdVJrMU0rZ1Q5cDRnVFVDZzdHYjc5dndhTEZ5M0QweUdFa0pXMEN3UGZralIwekd2WHFOOENtMzdjZ0lXRUI5dS9iaTk4Mi9scGorMW5WYlNZdVdJak5XN2VqZit3QXpKNDVIUnQvM2VDNk9HcmVxYmd5YzhhMGtzckNVSUlRUWxIWWg2SVEzc0N5TEh1S0pNbEkxM0xhbThHUUNZMVdWK1BiMGVqY1lEQVk3anNrUFgwNkdaTyttQUN6Mll6aTRtSjBmNDBQTTN1ODBSUDkzdTlmcGU4NGV1UXdFaFBtUWE5UFIyaG9HRVo5OGlrYVBmdXM3VjBVeTVZdFFhYkJBUCtBQU1URkRVYXJGLzRIQUJnMjlDUGNFaGhUUjM0OEhESVpoZURnRUNRdVdBaVdaZEcyYlR0MGUrVVZLQlFLK1BuN28zbDBOQzVkdkFpQXIxaDZlbm1oZDU4K29Ha2F3U0VoYUIzVEJ2LytXM05GKzd2WnBrcWxRdXZXTVpESFQ4REVMeWFnVStjdWp4MHpDOE13T0hyMENMWWsvWTRoUTRjak9DUUVBRDhrUC9lN2I1SHl6eG1RSklYWWdSOGlKb1luUXMzTXpNUzBxVk9RblowRm5jNE5ZejRiaTlxMVF5dmREa0VRaUlxS2dvK1BEMWlXeGZuejU1R1dsbGJsL1Z6eDQzTDhzWDNiT1dkaEtBQ1c0emkyTEw5R2NDQUl2a0c5b0VBcUhnQUFaN0ZZa2hVS1JTOFhsTm1ibGJFK2tDcWFScU9Gc1NEdnZyK25hZE1vYkVyYWloMS9iTWZLRlQ5aTlkcWY3K3J6VjY5Y3dlY1Q0akhwcXlsbzNqd2FlL2ZzeHFpUncvSFRxclh3OC9mSHpaczNNR1h5bDVnN2J6NGFOR3lJVGI5dHhQang0N0I1eTNhbzFXb2tKQzZRd3JjNWMrY2hNcktNT0lZa1NmVHUwN2NzSjNQOUdnNGZPb1NQaHZDMFVUNCtQdExuUlcvcWRISXlYdS9lbzhiVy9WNjJHZDJpSmN3V0N5NWR2SWlvWnMwZXlmT1daVm1wOWNqMjN4OFBINHBhdFdyaHdvWHpZR3dxeDl1M2JVVnBhU2xXL0xRR09UazVHUFJoTEJvM2JnSTNOemVKRWZlVlYxL0RpUlBITVdQYVZNei8vb2RLdDErblRoMVFGSVdkTzNkQ29WRGc1WmRmUm1abUppd1dpOU45dFAwN0plVWY3TiszRjdObWYzdmxoVmJSam1Hb2JZNE5Jb0FSQWpocnRWcSszVU5Nd2hVVUZKeHl3Vmg1cTY1Q1FaVzJaVFErOU4rN1pVc1MycjdVRHExYngwQ2hVS0J6bDY1bzBMQWhkZ3A4OTk3ZVBsaTJmQ1dlYWRRSUpFbmkxZGRlaDhWc3hxMWIvMVY1RytmT25rWEg5dTNRcjI5dk5HallFQysyZmNucCt4WitQeDhxdFJwZHU3M3l3SDUvVmJaSkVBUzhQTDFnTERJK2t1ZnM4ZVBITUg3Y1o3QllMTWpKeWNIQTJQN0l5ZUVGNmI2ZE14Zmo0aWVVdTFtZk9YTWFiZHE4S055QUNNamxOQzVkdWlpOTl1S0xQS1c5TFNQdW5XNFlvb2ZHY2Z4RWdLZW5wOTE3bGk1WkpGR0RwNlQ4ZzQrSDh6ZTRLNWN2b1dsVUZHN3hycit0dDhZNENVZkJjWndFY0hJNWJkZWd5NzMxMWx1bndIZjJ1cXdTTzNQbU5EcDFlQmw1ZWJtU2g5T3Y3N3RQVkU0eE1OQytLNzkyN1REbzlYeitUNnZWNHVUSkU0ajdNQmE5MyttRjk5L3JJOTF0cTJxTm5uMFdPLy9jaTUvWGIwUjZlcnFkRUlob0sxZjhpTC8vUG9xcFU2ZFgyeWpjbmF5cTIrUTREam01T2RBK29qMkV6WnRIdzh2YkcxOU8rZ0tmalBvWVBkNzRQNGxCNWs2TXVHZlBwdUN6TWFOQksyams1K2RMcjRtTXVJa0pjeVZHM01xTXBta3dEQU52YjIvRXhNU0FaVms3d2trQWVPZmRQdGk3ZHc4UzVuMkh5VjlPd3RCaHZEQk4zZkFJbkR4eDNEaDB5RWNaRGlHb0hiQUpZRlpPMUlVVWtzY2NBSGIvL3Ywc3gzRkhYZEIxWnlzcEtjR2ExYXVmeU4vbTcrOFB2VU1SNC9idFZJa2IvOEJmKzdGNjFVLzQvUE5KV0wzMjV3cERYWUlneW9HZHFiUVVtMzdiQ0ZNcFQ5b2NHQmlJOXUwNzRNeVowM2J2MjdEK0YremF1UU56dmt0NFlIMVpkN1BONDhlUGdaYkxVYTkrL1lkeWZEcDI3Q2c5SEZtY3hiV1BpeHVNVXlkUFFFRXJxdXp4YnQ2Y2hPWExsbUxhOUZrSWRjaWhWY1NJZTZkd3RHSERoamgwNkpCVWxiYzFyVmFMUVlNK3d2cGZma2E3bDE5Ry9mcjhXRm1USmszUnZrT25rd1pEUm1XZ3hwYk5pWXJCS0svelFNS2VONXkxV3EwdVlLdmlBZHU3WjdmazN0dmF2cjE3OE9IQUQ5Q3Y3N3VZT1dPYWxGTklTMHZEb0E4SG9QYzd2VEJyNW5RcHFmOVE4b1pXcTBTcXliRXNyRmFyQkVMZFhua1YrL2Z2eGJGamY4TnF0V0xQbnQwNGR6WUZIVHQxQXNBTGpCQUVRRklVOHZQenBGQ0NZKzNKVEFPRGduRDB5QkZZTEJaa0dnejhYVnlod0U4clYyRGR1ald3V0N6SXk4dkZnUU4vb1hIanhtV2g4T1lrYlBwdEk3NmJsL2pBZU9xcXVrMlR5WVMvang3QjlHbGZJMjdRUncrbGNKQ1JrWUdkTzNkS0QyZE1Na2FqRVo5K09ncDkrdlpEUUVBQVpreWZXaW03c3hoaWVuaDRZTmJzYitIbDVRV1R5UVIzQWVCRlJ0eGh3MGRBTHBkTGpMaVZtZGxzaHNsa3dzR0RCMkV5bVVCUlZEbHRqNnRYcjJMNnRLL3gxZVN2Y2ZUSVlXemR1a1Y2N2RWWFh6dnJKQXhsYkhOc29tTkdFSVNVcTNOemQ0ZE1LSTl5b2x0WFdGaDR6RVY2ZUdkVHF6WG8yS2tMVnE5YWlTNWR5Z0RxK3ZWcjJMQmhQUklTRmtDaFZHTG1qR25ZdG5VTFh1L2VBM1BuZklQMkhUcWk1NXR2NGRqZlIzSG80SUdIc3UrT0Rib3pway9Gak9sVDBhRmpKM3oreFNSRVJ0YkR4QzhuNC9zRmlkQ25wNk4yYUNobXp2NVc4dGk2ZE8yR3MyZFRFTnYvUFZDVURLOTM3NEhJeUhySXliVUgrVkdqUm1QMnJKbFl2bXdKYXRldWpTWExWb0NtYWN5WU9SdUpDWFB4ODdxMWtNdmxhUHRTTy9SN242ZGZaeGdHczJieVllQTd2ZXk1OTFldVdvT0FnT3B2WXE3cU5vY04rUWdFd1JNc2ZqSjZ6QVB0WTd0YnUzcjFDdHEyYllkM2UvZUIxV3JGM08vbUlDY25wMXhQb2EwMWJScUZjK2ZPZ2lSSjVPWGw0dXJWcTZnbkZINHFZc1N0ekRJek0rM0NYdzhQajNMQ0xTZFBITWZZY2VQeGZQUG1lSzV4RXl4YnVoaGR1M1lEUVJDNGR2M2F0WXBBRFE1VEJ5UkpRU2FqWURZREZFbVZUUjZJSHR0SEgzMTBkTjI2ZGZrQTNGM3dWYm05OFg4OTBhOXZiNGsxRkFEKy92c29VbS85aDBGeEE2VzdsbFpvRlVsSitRY1RCVVdnOElpYTc2cnAxTGtMT25YdVV1NzV5TWg2K090ZzVUcW1yVnZIVkhqaEtoUUtUUGg4b3QxekF6K01LL2UrRmkxYjRaY05HOHM5SHhFWmllL21KVHI5Ym9xaXNQL0E0UWQ2SEt1eXpUdXQxLzJhVGxlOTdVUk5talJGa3lZODViWk1Kc01uRGt5NXpxeEwxMjY0ZE9rUyt2ZmpxOWJEUGg0aGhlUVZNZUpXWmpkdTNJQ0hod2ZhdDI4UEFEaDkrblM1Z3NOYnZkNlcvdTN0N1kxUHg0eVZVbjV4QTJOVG5ZSWFRYkRnT0pZVGpDUkpqaVFKamlCSWFMVmFMamMzaC9mWWJIT2l2L3p5aTNYTm1qVUhTSko4eFFWZEZSdEJFRkNwVkhpalowK3NXbFVtam1FeFc5RDJwWGFTNUpsandya21HMkpkOXZnYVJWRW9LakkrME9GOHg5eG9aUURvNCtOVFpZVXMyL005T1RuNW52Yk5Zckg4cmRmcmJjTlFxd2h1QkE5dW5EUmxRSklnQ0JJa1NZQldLT0R1N3NFWER4eG1ybGlMeFhMUWRhcmRHZGdBb0VmM04zQTc5WmIwZkhTTEZ0aXplN2RFRGI1Nzk1OUlTZmxIY3VlM2I5dktoNE5DR2YxK1RhVlN1dzdHWGE3TncxeXppcmJ0NStlSFltTmhwYW1QcXFaSUhuYUtwanJlbDV1YiswOGxZYWhES0NxTVVwRWtTSUlFU1pKU1ZSUkNJbzRGd0dWa1pMaUFyWXFtVUNyUnAyOVp2cXBCZzRZWU52eGpqQjB6R20vMzZvay9kKzVBY0hBd0FHRDRpRkhZdWVNUDlINm5GN1p0MndxeUdtWWZ4VHU5eSt5dHlGaFk0V3dwK1pEV3JNaFlDS3FDRnBMQXdFQndISXZNakhTbisxYW5ic1Fkd1VDdDFxQk8zWWlIdXU3VnRaK25UcDY0NmdUVXhFZVptQXRCOElVc2tpZ0ROWklFb1ZLcENLdlZTckFzUzNJY1IzRWNKd2VnWUZsMkg0Qm5YWmNJY1BMVUtmZ0gzTC91NTRVTDUxR3JWakRjM055d1o4OXViTisyRmJObWYydjNuZ3o5YlR4L0Y1M3NOMjdjUkhhT2kwSFgwVEwwYWZEeDhVWm83ZkpzdFErTGRaaG45ZlZHbUJNR1hkRU1CZ1AwZWoyc1Zpc0tIMkJqK0tOa0hNZWRiOWV1M1NUd0lpMjI0aTFGQUlvSmdoQTBEZ2lHSUFpV0pFbU9vaWpRTk0zUk5BMkZRZ0VaSDU5S2VSOHBITFZhclh0a01wa0wyQURJcWluL1VWcFNpakdqUi9ISzcxb3RQaHM3cnR3ZFhTNlgzOVYzaG9iV1JtYW1BUm42TkdoMWJpN05BMk1oak1aQ01GYXJVMUFEZ0xEUVVCZ01EMjdOeEgxaUdhWlNVQk5EVWo4L3Y2ZjZHQllXRnY0Tko3azFBSXdZVllxdEhoUkZRUzZYZzZacEtKVktLSlZLcUZRcUVGcXRsckJZTEFURE1BVExzaFRIY1JRQU9pc3I2MlV2TDYrTkxsZ0QwdFBUa2E3UEVCZzRhczRNR2VrSURQQy82eUY0anVOdy9jWk41T1JrZzdHeUtDMTlPc2tuVlNvMVNJcUNqN2NQUWtORDdsaW91WG56UDJSbVpZR3hNalcyWmlxVkdwUk1ka2RQeldWbGR1TEVpVStqbzZPdkFpaEdtY2FCa1NDSUlzR0xNd3Y2Qmd4RlVaeGNMdWNVQ2dXVVNpV25WQ3FoVnF0QnVMbTVFV2F6V1FRMjIzQlV5YkpzTW9CYXJxVUdUcDFLQmtFUTBHaDFVRmZ6SGI2NHlBaGpZUUVBcmxyNTJGem1zc2N3REUwalNYS2tUUmhxQzJ3bEFFb0pnckRSRUtVNG1xWWxZRk9wVkZDcjFYd29TcElreHpDTWJTaktBV0FZaHRsQlVkUUhydVVHbWpXTFFucDZPZ3lHVEJRVzVGWGJzTHBPcDROTUprTlFVQ0FDQWdKY0MrMnlwOXBLU2tyK2duMDExQzRVZGNBb29ZZU54ekNTSkVGUkZDaUtLc3V4aVcwZndsQXBDNEF0TEN6ODA4UER3d1ZzZ2dVR0J0WUlmYmZMWE9ZeTNxNWN1WExHQWRTc0FLd0VRZGkxZWhBT2ZXd2lvSW4vSnNYeXFEaG5aZFBUeG5wNWVmMEo0TFpydVYzbU1wYzlpREMwU1pNbTF3WHdzam84R0Z0UUF3QmI3TElGTjRxaUlHTlpsdU00cm94dDBzWmpBOEJldTNadE8wVlJBMXpMN2pLWHVheUd3OUI5anA2YUE2aUp6TG1jR0YwS1BHOGN3ekJnR0FaV3F4VVdpd1V5aFVJaGtyUkowLzhDMkxFQUdIZDM5KzNlM3Q0dVlIT1p5MXhXbzNiOCtQSGtTc0pRaWRGRDlOQmtNaG5rY2ptRXdnSEV3b0ZXcXdWcEc1dmFjTE5KNGFpdnIrOUJ1RlRpWGVZeWw5VnNHSHF4UllzVy96bUFtZ1VWTUhvNDV0YWtFRlFtNHg4MkZRV0NKRW1PWlZsQ2lHRkZzUVRHYkRadnBtbTZvV3Y1WGVheUdyMjRvZGZya1pGaEFNTXdNQnFmbnNtRHdzTENmYkJ2eXBVZUhNZUpqYmtpd1NSWWx1VXNGZ3RzZEEvQWNad1Vqc3BzUFRiQmErT0lNb1VYRmdDVGxwYTJMU3dzYkl6cjFIT1p5Mm9PMUpLVGs4R0JrS1loL0oraTM3OXp4eDlubkhoclZ2RFRCbmJFa2lSSmNwUk1CbHBPUTZHZ29WQXFvVktxb0ZLcm9GRnJvTlBweWtKUlczQnpERWZyMXExN25tWFpuVS9hWWlZbUprS3BWRDdRYlZxdFZvd1lNUUorZm41d2QzZEhYRndjaW91TFhWZjJVMjU2dlI0Y0NQZ0hCRDExWTNGV3EzVnY3QWZ2WjlzQW04WEJheXNmaG9vRDc3WmhLQ1dEVEM2SFhDNEhLWlBKUkZEamJEdzJ6b2J0Z3dYQUZCY1hKN2xPdi91M2NlUEdJU2twQ2V2WHIwZFNVaEoyNzk2TlljT0d1UmJtS1RlRElSTmFuZHRUK2R2VDA5TU9PUWxCTGFpNGYwMW94aVU1aWhTQVRjYm4xK1F5R2VRMFhSYUtPaFlSQ0lLd2EvMUlTRWpZUEc3Y3VNOEFoTGhPdzN1em9xSWl6SjgvSDZ0V3JVTGJ0cnlVMmFKRmk5Q3hZMGZNbURGRFVtcDMyZE5uRE1QY2s2ZDI0Znc1TEY3MEE3NzlibDZON3QrRkMrZXhkY3RtTkduU0ZCMDZkcEtlLysyM1g3RnA0NjhBUWFCdDIzYjRJSlp2b0toTVlQbk1tZE5JbVBzZHJJd1ZZYUZocWRldVg3L2c0SzFKWWFpSVA0NE51U1JGZ2lRZHZEV2hTa3JUZEpuSFpodUtpdUdvamRmR2pCOC92c1Jpc2Z6NnRKMXdhOWV1UlpNbVRhQlNxVkMzYmwzTW0yZC9BdTNac3dmTm1qV0RTcVZDZEhRMFpzK2ViUWRRUFh2MlJQUG16UUVBeWNuSktDa3BrVUFOQU5xMDRaVzJqeHc1NHJxNm4ySXJMQ3k0cDgvVmI5QVFFNy84cWtiM2JjSDhSQ3hkc2hqWHJsNUZVVkdSOVB4Ly85M0V4ZzBiOFAwUFM3QjAyUXFjT1pPTTQ4ZVBDWi9oQlpaWHJGeU45L3QvZ0JuVHBrcXBtR2xmVDhhRUx5Yml4eFdyNE9QcnQyUHZudDBXWjk0YVFOaFhSRVZ3STBsUXR1TlRBcWpKNUhMSVJkb2lzVHdxdkltaktJcGdHSVlqU1JJTXcwaDVOZ0RXVzdkdWJhcGJ0KzZJcCtWaysrbW5ueEFiRzR0dnZ2a0duVHQzeGw5Ly9ZWGh3NGREclZaandJQUJ1SHIxS3JwMTY0YWhRNGRpN2RxMTB1dTJ5a1U5ZS9aRWJpNnZQM3I3OW0zUU5HMG5xQ0dYeStIdDdZM1UxRlRYMWUyeWNwYWRuWTJwWDA5R1ZxWUJCRWxpOE9BaGFObnFCYVNtcG1MVWlPR3dXTXp3OFBERThoVmw5UFRqUHZzVWFXbjh3RkJlWGg3VUdnM1dybHNQZ0ZlRlNwZzdCL2tGK2ZEeTlNS1lzZU1ra1I0QVdQL0x6OWk0Y1lQMGZnQVlNUEJEMERTTjJiTm0yTzNiUDJmTzRQbm16YUZXcTJHMVd1SHA0WWt6cDA4ak9yb0Z6cHc1alpFalB3RmdMN0JzeU1pQVVxVkNXRmdkMGJNN1ZZRzNaaVVJTWI5R2NBREJFUUJIa0NSSGtTUklrdUtrU0ZNTVF3VnZUYUZRbGdHYlRhN05OaHkxbXgyTmlJaTRZTFZhTjVJaytjYlRjRko5ODgwMytPQ0RENlFjV0dSa0pHN2N1SUhKa3lkandJQUJXTGh3SVJvMGFJQlpzMmJ4ZDgvNjlaR1Nrb0kxYTlaSTMvSDIyMlZpRmNYRnhVNkxGUXFGb3B3c21jdGNCZ0EvcjF1RHhvMGJvOS83SCtEYXRXdFlNRDhCTFZ1OWdPRGdZUHl5WVNNdVg3NkVxVk1tMjMxbTJneitmTXpQejBQY3dGaEpmOE5zTm1QcWxLOHdaZXAwQkFZR1lzY2YyL0g5Z3ZtWTlQak83clFBQUNBQVNVUkJWR1haNTVzMGJWcU9lZmhPQXN1Wm1abVk5dlZrTUN3RG5aQW50QlZZL3ZQUG5aTEFja0ZCQVJRS0JjeG1NK1orOSsyV1pVc1haemw0YXJiZ0pvU2g0UGlIV0RTd1NaL0p5cncxV21qV1ZhbVVJT1Z5T1J5OE5qZ094Z3U5SWd3QUppOHY3NmtKUjgrZlA0OFhYbmpCN3JtWW1Cajg5OTkvTUJxTk9IMzZkRG14MnRhdFcxZjRmU3FWcXB4S0Q4QnJWVDRNZlVxWFBmb1czYUlsZHYrNUN5dCtYQTVUYVdtVkJWVllsc1dYa3lhaTJ5dXZvVVdMbGdCNGFjalUxRnVJSHpzRy9mdjF4Wm8xcTJESXlMRDdYTDE2OWZIRy8vVzhpMnZrSENhTUg0dUJjWVBRcnQzL3N3ZllDZ1NXOC9Qek1Xcmt4L0J3OXpqa3hGdXpMUnBJYkI2MnVUV0tzZ2xEWlJSa01ybU50NmFBU3FXR1RBUTJzV3RYREVjcGl1SUVIVUhiMlZIR3g4ZG5EOE13aHdpQ2FQMmtuMVFxbGNycENTUCtYeWFUbFZNNnIweVVOamc0R0tXbHBjakx5NE9IaHdjQXdHS3hJRHM3RzdWcXVXanZYT1lFMktKYklISCtRaHc3Zmd3clZ5d0hUZFA0Y3ZMWGQvemMwaVdMb0ZRcTBhZnZlOUp6Rm9zRkFRRUJkbUhyL1ppN3V6dEtTMHN4KzV2djRPYm1oak5uVHNOZE9LOUZnZVdPblRwTDNxSldxNFdibXhzSzh2TXhlY3Ewb3krLzFPWjZKZDZhMkx2R2xuVnBDR0VvajFHU1F5YVh5VURMNWFBVkNpaVZLcWcxYXBBMFRVTXU5SDVVRUpMYUZSRUFXSXVLaW41K0drNnFoZzBibGt2cUh6NThHSUdCZ1hCemM4Tnp6ejJINDhlUDI3M3UrTGV0UlVWRlFhVlM0Y0NCTXFIa2d3Y1BnaVJKdEdyVnluVVZ1NnljVFpzNkJjZU9IMFA3OWgwd0xuNENqaDQ5VXU1bTZtZ0hEeDdBL24zN0VELytjenNXNFlpSUNCUVVGT0N2L2Z1a2ZOdm1wTi90UG52NThpWDg5bHZWZ3JMbkdqZUcyV3lHUXFFQXd6QTRjdmdRbWpUbHRVd3JFbGdPQ0F5RXU0Y0g4bkp6ZDFma3JRR0VIWnNIUU5oNGJHVjVOY3JPVzFOQXFWQkNyVlpCcTlGQ0pnSmJSVVVFbTdZUGFSS2hmZnYydng0NWN1UkRnaUFlZTAwRWxtWHh4eDkvbEh1K2JkdTJpSStQUjgrZVBmSHNzOCtpYytmT09IandJT2JNbVlPSkUzbXg0S0ZEaDJMZXZIa1lPM1lzUHZqZ0F4dzllaFRmZi8rOVhWaTVidDA2NU9ibVl2RGd3ZEJvTklpTmpjWFFvVU9oMCtsQTB6VGk0dUxRdjM5L1NUSGJaUzZ6dFQ1OTNzUHMyVE93YnMxcXNDeUxVWjk4Q3BJazdZb0grZm41ZUt2bkcyajIvUE1ZTzI0OEV1ZDloOUxTVWd3Wi9LSDBQWWtMZm9CT3A4TzBHYlB3M2JmZjRJZUYzME90Vm1PVWc0NW84cWxUMkxoeEEzcjArTDg3N2x0b2FCaDY5UGcvRFBwd0FEaHdhTk9tclNRZVhwSEFza3dtdzdqNENlZGZlNlhyMlFxOE5RdEJpS0FtRkEwSThONGFSWUlpS1U0bVZVTGxVdDhhcmFDaFZDbWhGaVlQaUo0OWV5SS9QeCtGaFlVb0tpcENjWEV4U2twS1lES1pDSlBKQkJzOUJKTGpPQmtBT1FCbFVWSFJBSlZLOWZYamZOSWtKaVpXMkJ4Ny9mcDFoSVdGWWRteVpaZ3hZd1p1M0xpQnNMQXdEQjgrSEVPR0RKSGV0MlBIRG93YU5RcFhybHhCVkZRVVdyWnNpUTBiTmtpNm9qMTc5c1NOR3pkdzRzUUpLWjgyWXNRSXJGMjdGaVJKb21mUG5wZzNiOTREbjRCdzJhTmwrL2Z2UjNoa2c2Zml0eG9NaG0rZmoycDhCRHo5dDZocllBUlBCVjVDRUVRcEQzQ0VsVmVob2ppWlRDWXFVSEcyVEI0YXJSWTZuUTZlbnA3dzhmRkZVRkFRd3NMQ1FQVHUzUnQ1ZVhrb0tDaEFVVkVSaW9xS1VGSlNndExTVXBoTUpzSnNOc05xdFpJc3l4STJlZ2owNHNXTHZXSmpZLzhBRVA2MG5vd3BLU2tvTGk1R3k1WXRwZWNtVFpxRWJkdTI0ZGl4WXcvVTY3eHg4ei9rNU9TQVlSaVVsanlkSTFwS2xRb1VSY0hMMHh0aFliVWw4bFJueG5HY3NHYlpzRnByYnMyVUtoVmtNaG04dmJ3UkZoYjYxQU1ieDNIWFBoc3pldUxhTmF1TEFKU2dUTmZBQ0Y1YXJ3U0FXUUEyUnBEV1k0VndrMU1vRmZ4Y3FFb0Z0VVlEblZZTE4zZDNlSGw1dzkvZkQ4SEJJUWlQaUlCTXBWS2hwS1FFTkUzRGJEWkRMcGZEWXJFNFZraHRRMUlHQUROdzRNQ0MzcjE3LzZSVUtpYzlqZ3M4Yk5nd0pDWW0zczhCd3BVclY5QzNiMStzWHIwYVRaczJSVXBLQ3ViUG40LzRlTjd0dnBOS2txUHA5WHI0KzkvZDZMUEpaTWFaTTJkQXlXVFF1Ym03NVBlS2pNak55MFhXeVV3MGJkSVVOQzEzZXV4T25EZ0prcUtnMWRYOG1oVVZHWkdkazRQTXJFeEVDODNhRmRudEo3eWZNVGMzZC9QYU5hdE5OaUdvV1FReUFCWU9ZQWdIYlFQeFB4ekhnV001c0N3TGxtVjVKZytCemNOcXRjQmlzY0JpTnNOc012UEFwbFFxVVZKU1lwZHJrOGxrc0ZxdG9DZ0tETU9BNHppSk5wempPQVlBczNuejVwL2ZmUFBOOXdEVWZkd1dPQ0VoQVFrSkNmZjFIVDE2OUVCOGZEeEdqQmlCdExRMEJBY0g0OU5QUDhYSEgzOHNYVUExYmVuNmRGQXltVXN3V1RDTlJndU5Sb3NNZlJyUzB0TVFGbHJlUzdwKzR5WklpbnBnYTJhN1R6ZHYvb2ZRU21UNGFnVUhQOG5lMnZXbFM1ZWNkQUExbTl4YVdZdEhHYUVrQmJsTTFBM2xxNTZpdDZiVmF1SHU3ZzVQVHkvNCtma2hPRGdZZGNQRDBhalJzeUExR2cyVVNpVVVDZ1ZvbW9adE1VRW9Jb0NpS002bW4wMXMvYkQyNnRVcnQ2U2taT1hUZkNIRng4ZmordlhyTUpsTXVIcjFLc2FNR1ZOcENGVGRscDJWL2RRT1QxZG1XcDBic3JLeW5iNldrNVB6VU5aTXEzTkRWbmJXVTN0TXNyT3preFl2V2xnSys0S0JDRzRTazRkdGl3Y2ZpcEtnWkJSSFVRN051TUtVZ1ZxdGtrRE8yOHNiTXBrTXBGYXJoVnF0aGxLcHhMMjBmcXhidDI0dHgzRXVodDJIY2dlODkrSHBwOEZ6WTFuRzZXc1BhODAwR2kwWUsvT1VucXZjeFc5bXp6cmhCTlRFZkZvNXdSWmU2WjEwbUFmbFI2ZmtBcWlwVkVwb05CcTR1Ym5CdzlNVHZuNitBQUNaVHFlVEtxSkN3Y0F1MXlhVHlUaXIxVW93RE9PMFlUYzJOamIvcmJmZVdxSFJhS1kvNFFjR2VyMGVCb01CVm9hQnNiQjYyRTIxV2gxa2NobjhmSDN2V3RxUElJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTS1NNMEhNVHdhdTVOM2JoaU04d0EySkFoZmxXeTIvb3lBL0h6ZXVYMFZSa2JGU0lBK3JFdzQzZDNka1pHUWtyZnBwUllXNU5UaHB5Q1ZKa3VQNzFtU2NURWJ4b0NhVGc2YkxkQTU0alFNZDc2MTUrMENoNExzTFpCNGVIaWdvS0lEUmFKU3FvV2F6V1FJM3E5VUttVXdHaG1IRXBKM1UweWJrMnF4dnZmWFdtaTFidHJ4QkVFU0xKeFhVa3BPVEFZS0VScXZqMlUyclVkdTRxTWlJZEgwRzB0UFRxMTBKZnRmT0hWaStiQ2tNaGd3RUJRVmg1YXExdUh6NUVtTDc5NVBlTXpaK0FycDI3ZVpDd2tmWkVwT0JxM24zL3ZrcmVTRG1KNE5iMHJGYWR1ZjZ0U3NvTGk2NjQzbDk0L3BWUE51NDZZbDNlcjJaN0FUVW5IcHJrSmh5YllmYzVaREw1SkRUZkRPdVFxR0FVcVdDUnNOUE0zaDY4WGsyMFdTZW5wN0l5OHREWVdHaGJROGJhSnJtcXd3T1hwc042NGVrMXJ4OSszWnpRVUhCais3dTdrOGtzT24xZW9BZzRlZGZNMkxKWW5MWm9FOURlbnA2dFlreXA2V2xZY2IwcWZoeTh0ZUlqbTZCZ2dLZUdpY2lJaEs3ZHU4REFBeU1mYi9HMW0zWjBpVjR2WHNQT3pZVGNiL216dmtHS1NuL2dLWnB0Ty9RQ1lNL0dpSU5YNmVtcGlKaDdoeWtuRTJCUXFGQXg0NmQ4R0hjNEhMRDJkVnBkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXprSGlma0ROQnR5cXkrNEVhcmJnOXQvTm0xdXZYTGxzdllPM3hwVFByVkdRVVJRbmpVN0o1VHdkT0UyWGVXczZMZHc5UE9EdDdXTTNBa242K1BqQXc4TURPcDBPYXJVYUtwVUtDb1ZDeXJVNXk3YzV5N1Y1ZUhoc1psbDIyNU1JYkFaREpqUmFYYzNuWUhSdU1CZ00xZlo5Ri8rOUFCOGZIN1J1SFFPYXBpV2VPSUlnb0ZEd2Q3MjdiVW01Ry90eCtWTGs1SlJQNEUrYU9BRzFnb1B4Mis5YnNHanhNaHc5Y2hoSlNac0E4RDE1WThlTVJyMzZEYkRwOXkxSVNGaUEvZnYyNHJlTk5jZTlVTlZ0Smk1WWlNMWJ0Nk4vN0FETW5qa2RHMy9kNFBJazcyQldxM1ZYbTVnWExqangxQ3IwMWtnN2I2ME0xT1RDUEtoQ3FZUkt4Y3ZzdWJ1NXc4dlRDLzQyM2hvQWtINStmdkR5OG9LYm14dTBXaTNFOWcreFNtb0RiSndOaGJqZGlCWDRhWHlMd1dENDhZazhPSXoxZ1NTYk5Sb3RyRmJyZlgvUDZkUEo2UDVhTjh5YU9SMTZ2UjdkWCt1RzdxOTF3NG9mbDFmNU80NGVPWXcrNzc2TjlpKzNSV3ovZmpoMzlxemQ2L3YzN1VXLzkzcWphK2NPNlA5K1h4dzljbGg2YmRqUWo5RDlOVDYwSGZueGNIUi9yUnVHZmpSSUFwRzJiZHZodlg3dlE2RlF3TS9mSDgyam8zSHA0a1VBZk1YUzA4c0x2ZnYwQVUzVENBNEpRZXVZTnZqMzM1cXJUOTNOTmxVcUZWcTNqc0c0K0FsWXZHaWhIZkhpazJCRlJVVkkrbjBUeG80WlhUMGg2L1hyTzJFL0Uyb0hiQnpIV1RtT1l6aU9ZMW1XNVFoQTh0WktTb3E1VElNQnFiZHVvYUNnb0l5OVE2bUNScU9HUXFIQWd2bUpPSGp3TDZqVWFudGdDd29LZ28rUER6dzlQYUhUNmVEWS9sRkpsYlNjMXhZWUdIallZckVzZWRLQXJib0tCVlhhbHRGNDM5L1J0R2tVTmlWdHhjY2pScUZXcldCc1N0cUtUVWxiMGUvOS9sWDYvTlVyVi9ENWhIZ01IaklVVzdmdnhKdHY5Y0tva2NNbGlwdWJOMjlneXVRdjhkbG44ZGl5YlFkZWZmVjFqQjgvVGhLbFNVaGNnRTFKV3dFQWMrYk93NmFrclVoY3NKQS80VWdTdmZ2MGhZZUhwM0RpWDhQaFE0ZlFzaVZQQXVEajQ0T0V4QVZRS2xVU0VKNU9Ua2JqeGsxcWJNM3ZaWnZSTFZyQ2JMRklnUHc0bWVNUXZmaDNWbFlXQnNiMng1VXJsNnZsUmxKYVdycG0vUGp4dHh4QXplVG9yZkZqVXp5ZU1Bd0RrcVRBc2d3c0Zncy9TUkFlanN5c1RMQWNCNlZDQ1pYUTNuSHMyRkVvbFVxNHVibVgyemFwVXFrUUVCQUFiMjl2dUx1N3c3Yjlvekt2elZsZkcwRVFsblBuenEwRWNOdmxoRCsrdG1WTEV0cSsxQTZ0VzhkQW9WQ2djNWV1YU5Dd0lYYnUzQUVBOFBiMndiTGxLL0ZNbzBZZ1NSS3Z2dlk2TEdZemJ0MzZyOHJiT0hmMkxEcTJiNGQrZlh1alFjT0dlTEh0UzA3ZnQvRDcrVkNwMWVqYTdaVUg5dnVyc2syQ0lPRGw2UVZqa2ZIUk9YQUVvUDBnQ202ai93ZENLWVBxdGZwd0c5Y0doSnZDN20yalI0M0E2ZVJUQUhqRzNPOFh6QWNBZUhoNDRLZlZhOUh2L1ErcVkyOXVIenQyN0s4S1BEWGIzalVXNEhOckZFVnhITWR4RkVXQlpWbE9vVkFJdyswcWVIdDV3V2dzaEVvb0dPVGw1Y0ZzTXVIRkYxK0VYRjUrdW9RRWdLQ2dJUGo2K3NMVDB4TnVibTdRYURSUXE5VlNIc1laQTBoRnViYW9xS2lyeGNYRlB6enBGMy9YemgxUVdQaGtDdHJxOVhvRUJ0cDM1ZGV1SFFhOVBoMEFvTlZxY2ZMa0NjUjlHSXZlNy9UQysrLzFjZW9KVkdhTm5uMFdPLy9jaTUvWGIwUjZlanFXTFMzdjZLOWM4U1ArL3Zzb3BrNmREcGxNOWtCK2UxVzN5WEVjY25Kem9IMkVlZ2lWSFNOQXFPUmdjMHJndmZRMXFOOW9pTkkvcjhMOVUzdnF4Q0ZEaDJQcTExT1FtREFQMjdkdFJkLzMrQXE1ZUcxWGgrWGw1ZjJTbUppWTYrQ3BtWnpuMWppdVRNb1lrTWtvS0pSS21NMW1VQ1NQTmNYRnhTQUlRbkM2RkRoODZCQUdESWlEenMxNW83VU00S2wvQXdJQ2tKT1RVMkhyaDhWaUVXYXlySnpBOXNHeExBdUNJRmlPNHdqYlhGdWJObTFXSGo5K3ZCMUprdTFjL3MvalovNysvdENucDl2ZmZtK25JaXFLYjBVNThOZCtyRjcxRStaOE53L0JJYnhvMllzeEx6ajFhaHpCemxSYWl1M2J0NkZMbDY1UUtKVUlEQXhFKy9ZZGNQRGdBYnYzYlZqL0MzYnQzSUc1Q2ZQaDV1NytRSDczM1d6eitQRmpvT1Z5MUt0Zi80RWZIMFhyRUxqSHZ5ajliZmszRTdtZjdJUzhuamRLdGwyRzlYb3VkTU5iSW5ma0RwaVBwMEg3Z1gwTFVYaEVCRHAyNm95Vks1Wmo1cXh2NE9aMjcxTVljcmtjN2RyWlgrWTdkdXc0TUhyMDZPTlY4TllZQVQ5WXE5WEtDWkVnS0ptTVV5cVVJQWtDTjI1Y2w0WUhlRFlQRFU2ZlRzWkw3VjVHdlFZTjhPL0ZDeFVER3dDRWhJUWdLeXZMYWV1SENHd2l1REVNSXoyRUdWSVdBQ0gydFNVbko1c05Cc09TZ0lDQXB4TFlmdDJ3bnEveWNSemF2ZnovOEg3L1dBQjhtOE5Yazc1QVlXRWhta1pGNGREQkExSXU2a0diYlpHQ1kxbFlyVlpwd3FUYks2OWl5T0E0ZE9qVUNjMmFQWSsvL3RxUGMyZFQ4Tm5ZY1FCNGdSR0NBRWlLUW41K0hyWnUyU0o4ai8xc2JHQlFFSTRlT1lLNmRjT1JsNXNMWHo4LzBBb0ZmbHE1QXZuNWVYaTNkMThVRlJseDRNQmZhTktrTEorMVpYTVNOdjIyRVhNVDVqOHducnFxYnROa011RjA4aW5NbURFTmNZTStlaWlVN3FaRHQyRG90cnI4TWIyZUM3cUpQK1RQK2NGNk13K3FWK3ZCY2prYmNEZ3VPM2Y4Z1gxNzkyREsxOVB3emV4WitIcmFkTlNyZDI4QWJiRllzSE9udlpiNnRXdlh0aFlVRkRoT0Y0Z2VXem1HWElxaVFGSVV3SEZTMzZ4Y0xrZEFZQ0EwR2cxMFdoMysrZWNNL1AwRFFOTUtYTDF5QllVRmhiajQ3d1hrNUdTREpFbkk1WEwwZXZ1ZDhzQW1ocVM1dWJuSXo4K0gwV2hFY1hFeFRDYVRIYmpaZW0wTXczQWN4MEY0U05NSUFDeUJnWUVIVENiVGZKcW1oenhOb0paODZoUzJiRW5Dd2grV2dLSW9mREpxQkVKRHc5RHU1ZitIdVhPK1Fmc09IZEh6emJkdzdPK2pPT1RncFR3b2MyelFuVEY5S21aTW40b09IVHZoOHk4bUlUS3lIaVorT1JuZkwwaUVQajBkdFVORE1YUDJ0NUthVVpldTNYRDJiQXBpKzc4SGlwTGg5ZTQ5RUJsWkR6bTVPWGJiR1RWcU5HYlBtb25seTVhZ2R1M2FXTEpzQldpYXhveVpzNUdZTUJjL3Ixc0x1VnlPdGkrMWsvSTZETU5nMWt3K0RIeW5sejMzL3NwVmF4QVFVUDI5aEZYZDVyQWhINEVnZUlMRlQwYVBlYUI5YkZXeGt1Mlg0ZmJKLzBENXFKSFZleU0wYno0RDk4OWlrRC9qb04zN1VsSlM4TzJjdWZEejk0ZWJ1enRPbmpoK3o4QldiaDlLU240Y04yN2NEUUc4ekk0RkExUXdaUUNBczFnczBHaTFuTnhHdzBBdXA1R1duZ2FaVElZNmRlckN6ODhQMDJmT1JvUDZEZURqNjR1RjM4K0hWcXV6QTdWeXdPYnY3NC9zN0d6azVlVkp3Q2FPV1lrZW00M1g1aGlTMmswakVBUmgzck5uei9KT25UcjlqeUNJcUtjRjJJNGRPNG9PSFRwSnpZS3Z2UElxamgzN0crMWUvbjlJU2ZrSEV3VkZvUENJeUJyZmwwNmR1NkJUNXk3bG5vK01ySWUvRGxhdVk5cTZkVXlGRjY1Q29jQ0V6eWZhUFRmd3c3aHk3MnZSc2hWKzJiQ3gzUE1Sa1pINGJwNXp5aWlLb3JEL3dPRUhlc3lxc3MwN3JkZjltazVYRFgyU0RJZUNtWWVrUDQzTFR3UExUNWQ3MnljMnJMbE5tMGFoYWRQcXVUdzVqanZ6eHg5L09CWU1iSE5yWmltM1JoQ3NRUG5OV2ExV0RnQ1VTaVduMCtta1dkQ2lvbUpjdW5nUi92NEI2TkN4RTgva0lVd1krUGhXUGhwV0xqdGFxMWF0Y3JrMjBXTno4TnFrY0pSbFdWdlZlSWJqT0JLQXRVdVhMdnJzN093ZnZMeThGajVOWHB0dHo2dkFZeWNsbkd1eUlkWmxqNjlSRklXaUl1TWpRV2pnN2UxOVR5bVN0TFMwald2WHJqVTZBVFdUSGFqeG5Hc3NRWUFqU1pLbjlwYnpQV3JpMkpTQ3B1SHQ1WVg2OWVzTHRFUys4UER3Z0krUGo5MWt6cURCemdQQ2N2dzY3dTd1Y05iYlZrSGpMaWZTRzFYVXRPdnQ3YjNkWXJFc2ZscE8wT2JOVzJEWHpwMG9LU21CeFdMQnRxMWIwRUxvMFdyYU5BcmJ0L0Vuek9WTDFkUC9wRktwWGFod2wydnpNTmVzb20zNytmbWgyRmh4bFowTDk3aC9qNm9hdmtNMHRkbyt0MWhhV3JwNjVNaVJGMjFDVUpPRHQyWlhNQ0FJZ2lPRVpuOFpyempGeWVVeVlSYVVsbVpCK1NGM2dTWFgyeHYrL2dHU2R1bGRlV3dBWDBnUXZUWmJxbkJIcjgyMmlDQjZiU3hmQm1PRVNpbEpFQVIxNk5DaFpXM2J0bjJlSUlobVQ5S0ZNK0NEZmlBRTdqVmZYejhrSkM3QTg4MmJvMVBuTGhqMElWOHdhUFBpUzJqWDdtVUF3UEFSby9EbHhNL3g2NGIxQ0krSTRCT21UOUNkL2xHeUltTmhoYTBMNUVOYXN5SmpJYWdLV2tnQ0F3T1JucDZPekl4MHFBV2lCVHNiR2dVdU1mbWVaMGE1Y0E5Z2FQVmxoT3JValpBRzRUbU9PNzFuejU2OVR2SnF0dTBkamtVRGZuUktISnVTeXlDWEM1NGJMWTVObFEyNWUzbDZ3Yy9YcjhveWxVNVhXUzZYSXpnNDJLNklZRXRwSklhaWp1MGZUZ29KVmdDV2R1M2FwV1ptWmk3MDhmRlo5RGhlSkZvbitZOXRmK3lxOFAyOTNuNm5YRElUQVBMeWNqRno5cmR3YzNQRG5qMjdVVkpTVXFWdDNTbHN5TTdKY1FHYmd4bU5oZkR4OVhINm1vK1BON0t6SC95YUdZMkY1UWdCYksxWnMyWXdHQXpRNi9Vb0tzeTM3NVBVQWhoYkcwRHQrOWlEYk9CeWR2VmRGMW9OdEZvTmJ0Njh1ZkhISDM4c3FDZ0VoWU95TzUrVkVaVHZPQTRjeTNJY3k0SmxHVENNbFg5WUxiQmF6TENZUzJFeGw4SlVXZ3hUYVJGdVhyOXk3OEFHQUFFQkFjak56Ylh6MnB6bDJtdzlOb2RDZ3VpMVdRaUNJSDE5ZlhlV2xwYk9WU2dVSHo5dUY0bXNtdTd3cFNXbEdETjZGSy84cnRWSzdSTzJkM1JuWGRTVldXaG9iV1JtR3BDaFQ0Tlc1K2JTUERBV3dtZ3NCR08xSXJTMmN4QUlDdzJGd2ZEZzFremNKNVpoRUJaYU9URDUrZm5aMGU4ODZwYWZuNy9rcFpkZXVsU1J0MFlRaEFoc0RFRVFqTWpjSWFwTzBUUU5sVW9sZUdkbGROOWVYbDd3OVMxVG5XclFvQUVhTm14WTlXdTJzaGRyMTY1ZFlWK2JvOWZHc2l6aFVFZ29WeVZkdFdyVjB2NzkremNpU2JMOTQzU3grUG41SVYyZmNkOFhRRlN6WmxpNHFPSlIycUlpSXdJRDdrN01oU0FJTkcvZUhOZHYzRVJPVGpieWNuSlFXdnAwa2srcVZHcVFGQVVmYngrRWhvWlUrdDRXMGRHNGVmTS9aR1psMWVpYXFWUnFVREladkwyOTd3aHFqNXRacmRaOUV5ZE9QT0FBYXFVaXNBbWdacDlYRTdRTVJDVjN1VnpPeWVWbHhKRzJBT2ZoNFFGdmIyOEVCQVNnZHUyN1d6dmlUb0lqdDI3ZHd2bno1M0h0MmpXa3BxYkNZREFnSnlkSEFqeEhMVklCOUFpV1pRbVdaU21PNHlqd1dxUTB4M0hLR3pkdXRBb05EWjBMNExGU0h6bDFLaGtFUVVDajFVRmR6WGY0NGlJampJVUZBTGhxSjVwMG1jdHF5TklQSFRvME95WW01cFlBWkNYZ05VS0xZSzhQYWl1bHg5aDZhd3FGZ3BQMFFUVzgwTEdIaHdlOHZHekVXZXJXeFRQUFBJT1FrSkM3aTdMdTlJYVFrQkJKVU5reDErYlkraUhLWW5HODJVNGtXSG5uZ2lERHdzS09GeFFVSk9wMHVxbVAwMUZzMWl3SzZlbnBNQmd5VVZpUVZ5MHNIQURmdnlTVHlSQVVGSWlBZ0FEWDVlS3l4OEp1Mzc2OUtpWW1KbFVJTThYUXM5UkpDR29WdkRWcDBGMGlqUlJDVVZ1YWIxRy9RQXhGYTlXcWRkZWdWaVZnNC9NNG9VNXpiVTU2MnNSQ2dtTnZtemh1WlNFSWduSnpjL3ZaWkRMVnBXbDZ3T04wTUFNREE2dU4zZFpsTG50Y3pXZzByZzRPRGo0Ris5WU94eERVWWhPQ3NzNUMwSXBBalZkMTkwRlFVQkJDUTBQdmFSK3JwQk9uMCtrUUVoSmlSMjlreTdnckRxa0svVzEydlcyQzF5YjF0b2tMc1d2WHJpVXN5KzV4blNZdWM5bGpsVmZidjNEaHdqMXdYZ0dWUERZNHpJTUs1SkdjTGFqUkFzVzNHSTdxZEtJb0M1OVhDd2tKdWVlSkRObk5temVyam9JOFZaSFQ3bm54T2ZGMTRTRW04RmloQTU4UXdlMlZWMTVKTzNEZ3dQY2hJU0doQU1KZHA0ekxYUFpvRzhkeDEwNmNPSkgwNmFlZkZqb0pRY3VCbWlDQWJDZW5aNHNmRmVFSUwrUkNnbVZaM0EwKzJRSGIzYmg2dnI2K1RpY1JiQVNXWVVNZlRwaE1KaEFFQVVHNlQyb0JJZmhmUkxacDArWkVUazVPZ3FlbjUreXFoc1V1YzVuTEhvNnpkdTNhdFRWdnZ2bG1xb08zNWl3RXRkcTJkb2pocDhEdktCVU10RnF0WGVncFZqOGpJeVBSdUhGanFOWDNQaUZ5VjJDaVZxc1JHaHBhYm9hMGd2bFJqbVZaUWl3a2NCekhDZ1VGMjZrRTBzdkxhM054Y1hHUVNxVWE0enAzWE9heVI5T3lzN01YaDRlSG43WHgxRXB0SHdSQm1HeEJ6VEVFRlNRR3l1WFZiTUhOVjlEV0RRME52UzlRdTJ0Z0EvZ0Vla1Y4YmM3R3JNVEdYUUhjT0dFcVFjeTNrUURJVnExYUxUbHg0b1MvWEM3djV6cUZYUFlVaDNyUTYvWEl5RENBWVJnWWpZOEdRM05wYWVuUDc3NzdybTIvV3JrUWxPTTRDZFE0am1NRlJseU9aVm1PWVJnN3ZqOHhzaE1mWXBWVW9WQkFyVlpETHBmajBxVkxEeGJZQUNBOFBOenBxSldUYVFSTzZHY1RSNjNFV1ZMYkZoRGluMy8rSWZmczJiTzRmZnYyZmhSRmRYR2Q0aTU3R2tFdE9Ua1pIQWhwR3NML0VkZ3ZpOFh5NTA4clYrekt5Y214T0FFMTJ3a0RmbXlLSUZnQ1lQbDBGSy9lTGpCM2NFb2xMOFNpMFdqNW5qVjNEM2g1ZThIZlB3QzFnb01SWGpkYzB0RzRYN3VuYjZBb0NuWHIxa1Z3Y0REOC9mM2g1ZVZsVnlsVktwVzIrVGRPWkFLeFZiWVMzRlVyK0JZUWMrZk9uVk12WGJxMGtPTzRZNC96Q2JwcDB5WW9sY3FLRXhWV0swYU1HQUUvUHorNHU3c2pMaTVPVW5keTJkTnJlcjBlSEFqNEJ3UTlNbU54TE11ZVBIVHdZTkxFTHlZVU9PVFVTb1JIcVIyb1NYUkVKRmUrQ2xwK3VrRG5wb09IaDZkRVJWUTdOTFJhUU8yZWdRM2dGVzNDd3NJUUZCUUVSMjFTSnlwWG9wcXpYUXVJQTdpWm5ubm1tWlMwdExRRkhNZGRlVkpQNEhIanhpRXBLUW5yMTY5SFVsSVNkdS9laldIRGhybXU3S2ZjRElaTWFIVnVqOHorY0J4MzlkeTVjK3Y3OW5rbnd3SFViQ3VnSmp0UUUzcldTRkthQjRWY0p1Zmt0Q2gwcklCS1pUOWw0T1BqQS8rQUFJU0UxTDR2N1lWcUF6WUFDQTRPUm1ob0tBSURBeVgrdGtyQURiYjliUUovbTBRbExqeE13Y0hCQjNKeWNoSUFaRDVwSjI5UlVSSG16NStQMmJObm8yM2J0bWpidGkwV0xWcUVGU3RXSUNzcnkzVjFQOFhHTU13OWVXb1h6cC9EcUJIRHEzdDNzbTdldkxtNmErY08xMkUvMkc0SGJBUkJXRGlPczRpQ3h4ekhDUnhyRkVlUUpJcUtqTWpOelVHbXdRQUN2TmkwUnEyRzJXVENnYi8rd3BZdG0vSG5ycDN3OXZhdTlzYjMrL2I3NnRXcmg5cTFhMHZnNXVIaFlTZmhad051WWtncTlzT3h6a0pTQUNZZkg1OXQrZm41M3drTFdLUFdxbFVyVEpreUJTKy8vRExVYWpVaUlpTHd4eDkvWU83Y3VRZ09Eb2E3dXpzR0RCZ2dxUzJOR0RFQ25UdDN0dnVPN3QyN1k5Q2dRVTYvdjJmUG5tamV2RGtBSURrNUdTVWxKV2pidHEzMGVwczJiUUFBUjQ0Y2NWM2RUN0VWRmhiYzArZnFOMmlJaVY5K1ZaMjdVcXJYcHk5djA3clZlWlMxZFpUYWhKNjh0MmJYMmtFeUpFbXhITWV4NERqSVpCVE1KaE5VS2pVWEVsSWIvZ0VCU0U5UGgxcXRnVnFqUVVyS1AzamwxVmN4ZXZRWVJFUkU0dkNoUTlXK252ZmRPMFlRQkNJaUlwd3FXam1yam9vdElBQUlBRTZMQ1J6SGtSNGVIdXVOUnFOR285SEUxL1JKTlgzNmRHemV2Qmt4TVRFWU5HZ1FldlRvZ2U3ZHUrUENoUXM0Zi80ODJyVnJoNjVkdStLTk45NjQ2Ky91MmJNbmNuTnpBUUMzYjk4R1RkTjJuRnh5dVJ6ZTN0NUlUVTExWGQwdUsyZloyZG1ZK3ZWa1pHVWFRSkFrQmc4ZWdwYXRYa0JxYWlwR2pSZ09pOFVNRHc5UExGL3hVMW02NDdOUGtaYkdhNWJuNWVWQnJkRmc3YnIxQUlDclY2OGlZZTRjNUJma3c4dlRDMlBHanBORWVnQmcrYktsaTcvNGZQd3BCMUFydFFFM3ZsZ0FXSVJybGlVSXNBUkpjQVJIZ09NNFRpYVRnV1ZaenQzREhRcUZBZ1JCUUorZURyVktEWXFpb0ZhclViOUJRd1RWcW9XaUlpTU9IVHo0TXJuRXdBQUFJQUJKUkVGVTZBRWJ3STljaFllSGx5T2pGTXU4VGdia2JmdmJJSVNrNG1TQ0NHNkVWcXRkV1Z4Y3JGS3BWQ05yOHVUcDBhT0hwSTM0eGh0dllObXlaWmc2ZFNwME9oMWF0bXlKWjU5OUZ1Zk9uYnNuWUh2NzdiZWxmeGNYRnpzdExDZ1VDcGhNSnRkVjdMSnk5dk82TldqY3VESDZ2ZjhCcmwyN2hnWHpFOUN5MVFzSURnN0dMeHMyNHZMbFM1ZzZaYkxkWjZiTm1BVUF5TS9QUTl6QVdJd2NOUm9BWURhYk1YWEtWNWd5ZFRvQ0F3T3g0NC90K0g3QmZFd1NCSWJ5OC9OKytPTHo4WWVkaEo0bGQ4aXJjU3pEaUZSbGtNdHBVWndGUlVWRk1BcHN4a29WSDcxcHRGcjQrdnBpKzdhdHlNL1BSMTVlM3FNSmJBQ3ZjR1ZMSVc3YnRHdmpzZG4ydFVuZ3hwYXA2aklDMEVuZzl0WmJieTFadjM0OXJWUXFhMHpHejNiNlFxRlFTUGxEMFdpYXJoYmdVYWxVTUp2TjVaNDNtVXdQUlovU1pZKytSYmRvaVlTNWN3QVFhTkdpSldaL002ZEtuMk5aRmw5T21vaHVyN3lHRmkxYUFnQ3VYNytHMU5SYmlCL0w5OEt6SEF1Tm9GMVFXRmk0N0oxZWIrMUgrYWtDK3hEVVJrSlBGRHRtR0lhVHkrVWM3NXlBbzJtZUxEWFRZSUJHbzBWMGRBdjgvZmRSdUx0N1FLVlVnbVZaclBoeE9YcjFlaHNObjNrRzQ4ZU5mWFNCRFFEQ3dzTHN0QkVjcHhGc2lDaGg0NjF4QXZpSmt3a1FtdjFBRUFTeFpjc1dZdHEwYVV2aTQrTmxDb1VpcmlaT0hwa1RIdnFLMUtTY1BXK3hXS3EwbmVEZ1lKU1dsaUl2THc4ZUhoN1NaN096czZ2TTVlNnlwd3pZb2xzZ2NmNUNIRHQrREN0WExBZE4wL2h5OHRkMy9OelNKWXVnVkNyUnArOTdkdWRwUUVDQVhkZ0tBRWFqY2NXRStIRjdVMUwrY2V4VGN3UTFPelpjb2RtZW94VUtqcGJMWWJaWVFKRWthSVVDRkVYQjE5Y1hkZXJVaGJ1N0J3aUNRR0JRSUhSYUhSaXJGUk0rbjRqdzhIQmN2UGl2ZEMwOHNzQUdBUFhyMXkrblJlb1lqanA0YlNLOUVXeHlib3lRZ3lNSWdpQysrdXFyUEY5ZjN5VURCdzRrRlFyRndJZDVvdEUwWGM1MXZuVHBVcFU0bzZLaW9xQlNxWERnd0FHOCt1cXJBSUNEQncrQ0pFbTBhdFhLZFJXN3JKeE5tem9GMFMxYW9uMzdEbWdSM1FKdjl1d0JsbVVyN2ZjNmVQQUE5dS9iaDRXTGx0amRpQ01pSWxCUVVJQy85dS9EaTIxZnd0V3JWM0hxNUltZnpwNDl1MmZqeGcwbE5wNWFpY1BEUkJDRVdjaXAyYkhoTWl6THlTZ1paREk1U2twS09IY3ZieWlWU3VoMGJsQW8rUCtYbWtyNUp0eGF3UWdMRFVOQVlDQVVOTTN2NjRFRGFOSzA2YU1QYkFSQm9INzkraEt3T1hwc0RNUFllbXkyNEFaaEZBTkN2czN1TzRjTkc1Wk4wL1NTZnYzNjRXR0NXOHVXTFRGNzltd3NXN1lNelpzM3g2SkZpNUNlbmw3aCs5ZXRXNGZjM0Z3TUhqd1lHbzBHc2JHeEdEcDBLSFE2SFdpYVJseGNIUHIzN3c4dkx5L1hWZXl5Y3RhbnozdVlQWHNHMXExWkRaWmxNZXFUVDBHU3BGM3hJRDgvSDIvMWZBUE5ubjhlWThlTlIrSzg3MUJhV29vaGd6K1V2aWR4d1EvUTZYU1lObU1XdnZ2MkcveXc4SHZRTlAyVGg2Zm5ueHZXLzFJRSswS0JiUU91eVhFT1ZPcFhveWdRRElPU2ttS1VscFp3YXJVYW5sNWVVS2xVcUZlL1BtN2V1SUdqUnc5RHA5T2gxOXZ2SWlRNEJQWHExMGY4K004eGVmSWtXTXdXaElTRVlNelkrRWNmMk1SY1VyMTY5ZXdxcExhNU5pR3ZWcTZZQVB0S3FTMjRFUVJCRUhGeGNaa21rMm5Sd0lFRFdhVlNHZmN3VHJUWFgzOGRJMGVPeE9qUm84R3lMUHIxNjRjQkF3YWd0TlI1WjhxR0RSdHc0OFlOREI0OEdBQXdlL1pzV0sxV2RPL2VIU1JKb21mUG5wZzdkNjdyQ25hWlV3dXBYUnR6NTgxM210YjRaY05HNXpmVFgzNnQ4UHNhTkdpSWhZdVd3R2cwcnBnMWM4YWVaVXNYVndScWtxY21naHBKa2d4UVJob3BveWhPcmxTQ3BoVWMzM3dyaUxLb05YQnpkMGRrWkNUOC9Qd1FGRlFMWVhYcW9HNTRPSlJLSlo1N3JqRitXTFMwUnRmdGpwb0g5Mk1aR1JrNGQrNGNybHk1Z3RUVVZPajFlbVJuWjVmVFN4QkNWMElBUUVKZzRTVTRqaU50TkJQa0hNY3BBQ2duVEpqZ0hoOGZINnRTcVlhNFRuMCtVWHpqNW4vSXlja0J3ekFvTFhrNlI3U1VLaFVvaW9LWHB6ZkN3bXBYR3E1eEhDZXNXVGFzMXBwYk02VktCWmxNQm04dmI0U0ZWVXdSdG4vL2ZvUkhObmdnNjFSWVdMaHNRdnk0dlRiaHB6TlFzMlhzc0lpTUhXSnpQVVhKT0lIZW13YzFwYjI0c2Fkbm1jcFVhRmdZNnRkdkFGOWYzd2QyTHRRb0I1cS92Mys1NFhnbkZWTFk1Tm1rU3Fsd3dkcjJ1SW1GQlV5Wk1nVW5UNTc4WWNPR0RXYTFXbjNQclNBZE9uVEFuMy8rK2NoY21IcTlIdjcrZHpmNmJES1pjZWJNR1ZBeUdYUnU3aTc1dlNJamN2TnlrWFV5RTAyYk5JVllvWE1FdFJNblRvS2tLR2gxTmI5bVJVVkdaT2ZrSURNckU5RkNzM1pGZHJ1Ryt4a0xDZ3ArR0RwazhQNUxseTZhS3dNMWxGVkFKVDFRZ1RoV1VKb2lJSXhPU2F3ZEpDVlFmMU1VNURJWnhQbFF0VklGczhsVTQ3L3RnUUVid0l2QmlPQldXWFZVckpBS3ZXeWMxV29Wd1kyeERVdEZjTnUrZlRzMEdzM1N3c0xDVXExV094S0E4bTczYmRldVhZLzloWnl1VHdjbGs4RS9JQWd1QXpRYUxUUWFMVEwwYVVoTFQwT1lFeUxWNnpkdWdxU29CN1ptdHZ0MDgrWi9DSzFFaHErV1RadFJOVnRwZG5iMjRsWXRteDlHZWZiYmlqdzFLd2lDSVFDR0VEdzFHVVZ4TXBuZ3FZbEQ3V28xdEJvTmRIYWtrWUdvWFRzVWtaR1JDQTBMZStEbndRTmhyUTBQRDY5SVlGa0NPSnU3cVpScnMxcXQ0bXRPd1EwQWREcmRxdHpjM0dJUEQ0L2hBSHlmdGdzNU95c2JXamQzRjZJNW1GYm5ocXlzYktmQWxwT1RBOTFEV0RPdHpnMVoyVm1WQWxzTldaWmVuNzQ4K3Ztb1U3Q2YvWFQwMHV4QkRRS29FU1JIRWlSSGtRSmJCMjFER0NuTWYyb0Z2UUkrQlBWRHJWcDhYdTFoZ05vREF6WSthZG5BS2JBNWVtMmk1eWFDRzhBUENGY0NicHlucCtmR2pJeU1JbDlmMzQ4SWdvaDRXaTVlanJ2MzRlbW53WFBMejh0eCt0ckRXak9OUm92ODNKeDcraXlSbkFsaWZqSnc1ZTY2OURsd1YyK2FzbGEzL20veStUdDRhcVp5b0VZSW9FWVNBZ3V1REhJNXpTbG9rYWxEQURXSkJkY0xiam9kTE9aUzVPVm1Jek5EZzh5TU5LZnJFRlluSEc3dTdvOC9zQUZBbzBhTnlvRmJCY0FtZ1p1WWNLc0kzTVMvL2YzOS83aCsvWHBCN2RxMTQwaVNqSzUrRU9IWlRRMEdBNndNQTJOaDliQ2JhclU2eU9ReStBbTB5SGQxc2hOQVNZbUx5NjBpSzZtQTUrNWhGbGZ1K1hnbEpnTlg3dzdVV0hBbno1WGNXdDg1ZGZaMWxKLzl0Ry9wc011cGxRYzFtUUJxdElMMzFCeUxCYUxJc2RWaWdvZUhSNlhLN1VWRlJ0eTRmaFdObXpaN01vQ05JQWcwYXRTb1FxL05HWmpZZUhCT3dVMzRYbzdqT0s1T25UcUhrNU9UODU1Nzdya0JGRVYxcms1UVMwNU9CZ2dTR3EyT1p6ZXRSbTNqb2lJajB2VVpTRTlQcjNZbCtGMDdkMkQ1c3FVd0dESVFGQlNFbGF2VzR2TGxTNGp0WDhiQ1BqWitBcnAyN2VaQ3drZllpTHNFTlF2SC9IbXc4R0pTbjR5RkdUYmhwK1BzWjRrQWF1WnlPVFU3VUpPREZnU09sUXBCTGsvaldBSDFRMkJRRUl3RmVaV0NtdTA1LzBTRW9xTEo1WElKM083Z3Nkbm0yeW9DTjNId2xoTkQwNmlvcUhNYk4yNmMxYTFidDB5YXB2dFd4ejdyOVhxQUlPSG5Yek5peVdKeTJhQlBRM3A2ZXJWeFU2V2xwV0hHOUtuNGN2TFhpSTV1Z1lJQ25ob25JaUlTdTNidkF3QU1qSDIveG83MXNxVkw4SHIzSG5ac0p1Sit6WjN6RFZKUy9nRk4wMmpmb1JNR2Z6UUVGRVVCQUZKVFU1RXdkdzVTenFaQW9WQ2dZOGRPK0RCdXNQUjZUZGlkdHZsaXpBdVF5K1VnQ0JKaFlXSG9IenNBclZ2SFBKcWVLbXYrZVUzMm9WMWY1UDFXVUFtb2xmUFVCQUxZQ2tDTjcxVlRxa1FSRmwwWnFQbnhiUjFob1dISXo4dXUwZU5VVlNNZnhrYVZTaVVhTldxRThQQndCQWNIUzBMTXRseHVZck9mUXFHUXhGVmxNaGxuSThUTTJISzVDVG1DVWdBbGI3enh4dTBtVFpwOGF6UWF2eEZldnk4ekdES2gwZXBxZkYwME9qY1lESVpxKzc2TC8xNkFqNDhQV3JlT0FVM1Q4UEh4a1R4blFRcXR3cG5ZNnJBZmx5OUZUazUydWVjblRaeUFXc0hCK08zM0xWaTBlQm1PSGptTXBLUk5mUGpFc2hnN1pqVHExVytBVGI5dlFVTENBdXpmdHhlL2JmeTF4dmF6cXR0TVhMQVFtN2R1Ui8vWUFaZzljem8yL3JyaG9WeTAzajkyaDl2by8wbC9leVYwaGJKVEJBQlljNjFGMzdlK052SDNML0oreTNmSXBSVUxqN0xxcHkyb2dXQmdVLzJrS0ZrNVVBTUhaR1ptb3JpNFdNcXArZnI2SWlnd0NLR2hZYWhYdno1b1lWUktQTSthTld1R2poMDdvbjM3OWdnS3Vyc3E5SW9mbDZQM083M3dkcStlMkxwbGM1azNhckZnOXF3WjZOZjNYZlR2MXhjSER4NTQrQjVibVplaVFhTkdqWndOeFpjTFMwV3hWZGhVUzRVVDBuRkNnUlBEMG4vLy9aZlY2WFFyTXpJeTlMNit2b01JZ3JoblVXWXJZMzBneVdhTlJndGp3ZjFUdUp3K25ZeEpYMHlBMld4R2NYRXh1ci9HaDVrOTN1aUpmdS8zcjlKM0hEMXlHSWtKODZEWHB5TTBOQXlqUHZrVWpaNTlWbnA5Lzc2OVdMWnNDVElOQnZnSEJDQXViakJhdmNCZmJNT0dmb1JiLy9GQ3R5TS9IZzZaakVKd2NBZ1NGeXdFeTdKbzI3WWR1cjN5Q2hRS0JmejgvZEU4T2hxWExsNEV3RmNzUGIyODBMdFBIOUEwamVDUUVMU09hWU4vLzcxUVkrdCtOOXRVcVZSbzNUb0c4dmdKbVBqRkJIVHEzT1doTUxObytqU0djVmt5Mkp3U0laemhydjFuemxyendzMnZ6c0plVGNvWm41b1FmaEpXZ0JOQmplVWRCdEttVUNEbmFLRlFrSitmRDBaUW1xSnBHbDVlWlo1YWFCZ1BhbzZTZVhYcTFBRkZVZGk1Y3ljVUNnVmVmdmxsWkdabTJwRkdPTTY5aW4rbnBQekRuMlBMVjhCa01pRXViZ0NpbWoyUG9LQWdiTisyRmFXbHBWangweHJrNU9SZzBJZXhhTnk0aVVRdG5wNmUvbkE4TnRGME9wMVR6ODNUMHhNNm5jNFp4YmlkTUl5b24rRGd1WmtGejYwVVFMRy92LzhmLy83Nzd5U0dZZmJlNjM1V1Y2R2dTdHN5M24vdW9XblRLR3hLMm9xUFI0eENyVnJCMkpTMEZadVN0bFlaMUs1ZXVZTFBKOFJqOEpDaDJMcDlKOTU4cXhkR2pSd09RMFlHQU9EbXpSdVlNdmxMZlBaWlBMWnMyNEZYWDMwZDQ4ZVBrMFJwRWhJWFlGUFNWZ0RBbkxuenNDbHBLeElYTE9SREJKSkU3ejU5NGVIaENZQ24wamw4NkJCYXR1UkpBSHg4ZkpDUXVBQktwVW82MFU4bko2Tng0eVkxdHViM3NzM29GaTFodGxna1FIN1FaamxyZ1BiRDUva2JMMnZkLy9mdGMvTmZ1UGxWQ3V3WmI0c2RIcVVFL3pBRGhBVUV5a0NOeit4d1ZxdUZrOGw1Q3YrOHZIekk1REtvVkNyVUNhdURxR2JQdzh2YkcxcXRGcjYrZnJ5bkZoYUcrdlhxUTZ2Vk9sM1h0TFEweVZsaFdSYWVucDUyNzFtNlpCSFdyRjRGQUVoSitRY2ZEeDhLQUxoeStSS2FSa1ZCb1ZUQ3pkMGRMN3p3UDV3NHp1czhuVGx6R20zYXZDaWNUd1RrY2hxWExwVWRoMWt6cHo5Y1lBTUFkM2QzQ2R4Q1FrTHN3TzBPRk9PMllTa3JoS2JpblVvRXR4SUF4Yzg4ODh5cG4zLytlVXBwYWVseVZ4cjZ6clpsU3hMYXZ0UU9yVnZIUUtGUW9IT1hybWpRc0NGMjd0ekJoMExlUGxpMmZLVWtsZmJxYTYvRFlqYmoxcTMvcXJ5TmMyZlBvbVA3ZHVqWHR6Y2FOR3lJRjl1KzVQUjlDNytmRDVWYWphN2RYbmxndjc4cTJ5UUlBbDZlWGpEV2NCSzh3aHZneWpOUWRZNUFpU2UxT3VIWDVTdTcvVGJtbGdPb09RSmJDUUdVQW9TWmY4QktDS3BTSk1DUklEaWFwam1TSkZGU1hNd1ZGQlRBM2NNZE9xMk9uLzEwYzRPN3V6dFVLaFhjM056NG5Kb0Fhcm9LUkZob21nYkRNUEQyOWtaTVRBeFlscFg0RGtWNzU5MCsyTHQzRHhMbWZZZkpYMDdDMEdHOGZrUGQ4QWljUEhFY1JxTVJCUVVGT0hmdXJIVFR6OC9QaDFLcHhObXpLZmhzekdqUUNocjUrZmtBZ0tUZk55RThQT0xoaGFLMjV1SGhnVWFOR2xWNkVvbi9GeDRjUVJDRXhXTGhiT3NNTE10eXR2MXRZbGdLZ092ZHUzY2FnSVRzN093YlhsNWVnd0RjYzRiK3dvWHppQnNZaTJYTFZ5SWlNaEpMbHl6RzVxUk5rcGRTa1gwMzV4c2NQblFJT1RrNW1EanBTN1I1c2UwakNXeDZ2UjRSRVpGMno5V3VIUWE5bm1jeDBXcTErSFBYVGt5WjhpV01oVWE3TUtLcTF1alpaN0h6ejcxSVQwL0hGNStQeDdLbFN6Qmc0SWQyNzFtNTRrZjgvZmRSSkNRc2NNcVpWeE5XMVcxeUhJZWMzQnhvSDFJUElWZGtTYjg4Zi9lcWhzZUduTUl4aWZ4UkJEWlRCYUduQmVCRXBYYUdBTUVKd0FZS0JDZVh5NkZVcXJpOHZGeFFsQXdCL2dGQzlWTUhOemMzZUhsNVFhL1h3TlBMU3dnL0c5eXhGMDBNUnc4ZE9vU21UdWlKdEZvdEJnMzZDQ05IRE1NNzcvWkcvZnI4dkd5VEprM1JzVk1YREJzNkdPNXU3bENyMUZDcFZkTG5ObTlPUWtsSkNhWk5uNFY1MzMwTEFNakkwR056MHU5SW5QLzlvd0ZzQU9EcDZXa0hiallnVmc3WXhHT0xzaVpld21hdVZBUTZhYTROQUN1UzRubDdlMjg2Zi83OGpYcjE2dldqS09ybGU5MWZ1VnlPdi83YWo0aklTQncrVkRYTzloRWpQOEdJa1o5Z25NQmcrcWlhdjc4LzlBNVVUTGR2cHlJcWltOUZPZkRYZnF4ZTlSUG1mRGNQd1FJUDNZc3hMemk5SVRtQ25hbTBGTnUzYjBPWExsMmhVQ29SR0JpSTl1MDdsRXNBYjFqL0MzYnQzSUc1Q2ZOcnRKSHpYcmQ1L1BneDBISTU2dFd2LzhDUGo1V3g3dnRiZjM1enR4L2pVMUdKT3J0OWdZQ1FldFFBZ2lVSmdpVkFjQ1RIZ2dMSnlVQkNKcE56K2ZsNWNITjNCMk8xd21ESXdMUFBOUzZiS1BEemhWdnFMZmo2K3FGKy9mL2YzcG5IUjFYZSsvL3puR1gyeWI0TXlZU0VrSVJjdHVDbHdyVmlYUzR1VkZzcHVLK1hxcTAvL2ZXNklsYTlyYlYxQlpjcXlxMTZSYXUxZXVVVmJkVWY5ZDY2d3IwZ29sR0pDWVFrSkNRa0lTR1FaU2FabWJNOHZ6L09lVTZlT1psSlFBRkp6UE42SGVaa01wTVp6cHg1bjg5M0wwZnFLTWVJTlp2OTdMUFBBQmp6aU8yZHFCc2FHdkRBL2ZmaW50L2VpN1hQUFl2SmhVVTQyMVRLbDE1Mk9TNjl6RWhzdU9icW4yTHExQkxMeW5PNzNiam50L2RDRUFSRW8xR2twcWJpclRmZlJIK29IOWYrL0pwdjN4UzF3MjNtekprb0tTbEJRVUZCM0ZpLzFOUlV5K2ZtZHJ1WmFVclozRktiV2NyOGJvck5OQjFncHVtcVZhdnVIaGdZZVBMcnZ0ZC9tRDRESDMrOENYVjFPeERnMGpNKzNyd0pLNWJmWXYzODZDT3J2clhvMlloZkRyTzdNUUJRWGJmYVNnSEEyZWY4Q0I5KytENjJiUGtZcXFyaXZmZmV4VmZWMjNER21XY0NNQWFNRUFJSW9vamUzaDdMUjBMMStLRFBwTHc4Yk42MENZcWlvTXVNOWpxY1RyejR4eGZ3eWlzdlExRVU5UFFjd0lZTkgySDI3TmxEcHZDYmY4VWJyMWZpc2NkWEg3VStkUWY3bXRGb0ZCOXYzb1FIN3I4WFA3LzJ1cU1lT09qVEJwKzkvZkhmclQzN2IzZU1abm9PQUlpWTA2UmlBQlJDeklIR0ZMb2dpVlFrQXBVZ1VCa0NIRVNraEFCK2Z3cnk4NE9ZVnY0UGNMbmNjTHZjeU1qSVJFNU9Edkx6OHBHZWxvNjh2THhSb1FZWUVWUW1SQndPQjlMUzBvWTFhZjEwNnllNC9aZDM0cFJUVDhNamp6MkJtcStxNDRLSGlxTGdwUmYvQ0VLQVdiTm1XejVrMVF4azlQUWNRRU5EQThwS3kzRFYxZGZnbFZmWFllMExMeDQ3aW8wM1MyZk9uRGxNc1kyd1VXSXNFRUtzTnVPbWtxTmNncS9PZXJRRDBHKy8vWGI5OXR0di80K1dscGE2L1B6OGZ5R0VISGNvNzlNaHkvQjZQSGp4ank5Z3dVa240YXZxYldQR2gyWlAwSDN3Z2Z2dzRBUDM0ZlF6enNTLy9lcHVsSmFXNGRlLytTM1dQTFVhSGUzdG1GeFlpSWRXUFdKTk0xcjB3N05SWGIwTlZ5MjdBcUlvNGR6RlAwRnBhUm4yMjhxRmJyNzVWcXhhK1pCeEpaNDhHYzgrOXdJY0RnY2VmR2dWVmoveGU3ejZ5cDhoeXpKT1B1VlVYUGt2UHdWZzVDbXVmT2dCU0pLRWl5ODhMOTVNZk9sbEJBS0hQNWZ3WUYvekY5ZGZCMEtBd3NJaTNITHJiVWMxajAwSC9id2hzcmZ5bEpiNzZ0QTRsT0prVTJyV0xjRlFIelVBUmlVQmlBNVFLZ0JVcElSS2dnQlJBMlFpVWlja09OUFNoMm8vZlQ0VUZCUU01YW1aZ1lJZE83WVBpMzRtVzAxTlRVaExTOFBDaFFzQkFKOS8vdm13bVI4WFhEZzA3Q2d6TXhQTGJ4dWFmN0J4NHdZOC90Z2pxS2c0RGc4OHVNcUM1S0lmbm8yNnVqb3N1OUpRYzcrNDRjWmhDbHM2RnI5NHFhbXBtRFZybHRVT2hSQmkzZkw3M0gwVzNBQlFycXBCNTN4d2lVeFRyYUNnNE1QWFhudXQ3cHh6enJuQTVYSXRPOWozcUtncVR2dm5oZmo5WTQvZ2hodHZ4aC9XUEhYTUhjY3p6MXFFTTg5YU5PeiswdEl5ZkxSeDVEbW1KNTY0SU9rWDErbDA0cTUvKzNYY2ZkZjhiSGpmejNuei95bGhNOFNTMGxJODl2anFoSDliRkVWOHVPRi9qK3B4T3BqWEhPMTRmZFBsOXlmUGt4d0loLy8wMnI0UDM3L3JRR1VmWjNyR0VnSE45S2NwQURXZ1JnMmdFUXFkZ0ZJQ1FrVVFLaW9hSkFBeWtReW9RWWJiNHpHU2IvMURQclhzN0J3anBjUE1VL3ZlOXc2K1d0R3EyUG1hYThHQ2s3Qmd3VW5EN3Bja0NiZmN1bnpFNXg2VFlHTWZOQTgzKzVZQWNCYmNGRVdoWm9VQ0gxU2dYS1VDVTI4YUFPMzg4ODl2QmZCa2EydnJsM2w1ZVZjU1FrWnR3cTVyR3I1LzRnSTBOVFhGUlhvRVVZUitCSnQzVHF6eHVVUlJSRGdjaXN1WDFIWDlpMTI3ZGxXZThvTVRkNEJMWnhvQmFqRXlwTkpZZHc2ZEFHYVFnRUFFb1JJRXlCQXNxTGtndytYMHdPUHp3ZWZ6V1Q2MW5CeWpUS3FvTUhHZVdxTGw4WGd4TUJBK3FNY2R5U1VkeXgrMjErdkY3Tm16SVlxaXRZMENPbW9xT0JZeHRRY1ZtRzJxMjAxVEFGb3dHUHhnN2RxMVgxMXd3UVhuZVR5ZW40MzIvakl5TXZCL2YvR3Y2T2Z5M1BMemc5amQzSVJZTEFhcTY2aXRyVUZoWWRFUk8wWnV0MmVDQ29kNGJMN05ZNWJzdFhOeWN0RFJzZGNDV3lqVS8vd2ZYM2orby92dnV6ZGtVMmw4NUpQZmVLaVpaaWQwRTJqVWlId0tWQUtCVEVUcWdBZ0haTGlJRExmREEwOUpEbnhtU2dlREd0LzkxcDZta1d4TktTN0Jyc2I2RWVIbThYZ3hwYmprdXdzMndDaS9zc1BORHJrRUppcFRiL1lxQmNyNTNwaHBxcHVtcVFaQVhiWnNtYlpzMmJKbjZ1cnFQaTB1THI1RUZNVkR5c25JeTh2RHFhZjlNeTYvOUNLa3BLUmFaVXhBZkxySFY5WGI4TVRqdjhmOUR6eUVxU1ZmLzBOT2RLV2ZXRURZSE5LYmFBbmYwakVMaC9vaEpra2htVFJwRXRyYjI5SFIxcnBoZDB2cjIwdVhMRzVLb3RKNG54b0xqTVdHVkpveFJjcTRjQnMxbjRJZ1Vra1NJVWxtaHc2SERBZHJFbW5PS0dEOTFDenpNei9meUZPYlZuNUlxVFlwcWFtb09HN3V0Lzc1SDlHWkI0ZHpVVXF0K1FrdExTM282T2hBVjFjWGVucDYwTnZiaTNBNGpIQTRqRWdrd28vL0k5emdacUxyT3B1bFFBQ3dlUXFpQ1hpWlV1b0E0QURnQk9Bc0tTbHhiZG15NVVlTnUzWmRtUnM0T29NLzkzYnN3ZHhENlBEUjFOU003djM3Snpyb0RqdU9iY2pLeWtSaGdrNFRUYzNONk80KytzZHNiMGNiTWpNelVaU2cwU1NsZEU5blorZC96cGt6NTVPT2pnN0ZCclZvSW9VR0s5cEpWQmlOSVRUVEVxRnNNeXQwSUVrU0pNbWFVd0FuQnphUHh3Ty8zNCswdERSa1pHUWdOemNYK2ZuNW1ESmx5aEd0SmY1T0t6YUx3SVJnNXN5WjdBTWFwdHpzdCtZMkxHSktDS0VtM01Bck4yYWF3cGhHcndGUTYrdnIxWXlNak1vbm4zenlrd1UvT0dWeFJrYm1sVWY2aWk3TDhpRTlwN0J3TXJxNk9yRzNvdzArZjhyRXpJTlFQMEtoZm1pcW1oQnFBRkJVV0lqT3pxTjN6Tmg3MGpVdElkVEM0ZkRMYjd6eHhrZVhYWGJaZ1ZGVVdwUlRhTlpFZGxPbGFTYk1kQTVtUnNkYjJkYksyODMxVWpQYmVXZG5aeU1RQ0dEeTVNa29LU2xCZVhuNW1ENFB4b3hpNDFkRFF3UHE2K3ZSM055TTl2WjI3TnUzRC92MzcwZGZYeDlDb1JEQzRUQUdCd2N0NVdiT1hDRGNHRUJldlFtbWVoTk0wRXNBSkU2OVdRcnUvUTgyVkV3cExsNHFpdUtaUitMLzFibTNIWk1DdVlmY3RvaFNpbDFOemRpL3Z4dWFxaU1TK1c0Mm4zUzdQUkJFRVZtWldTZ3NMQmhWYlRRMzcwYlh2bjNRVk8ySUhUTzMyd05Sa2hJcU5VVlIvcnVxcXVxLzVzK2YzOElCTFJuVUVwbWQ2cERaYVFITm1FMWdBczBvWkk5WGFGNnYxNEphUmtZR3NyS3lNR25TSkJRV0ZxS2twQVJUcDA0ZDgrZkNtQVFiQUxTMHRHRG56cDBXM0RvN08zSGd3QUgwOXZhaXY3OGZBd01EL0dpL1lYRFROSTJZdzV2Wm1EOEdOMmFlc3BGL01nODNBTTVQUHExYWtKT1RlLzdoNnRRN0VBNGgxTjhIZ0I3MlJwTVQ2OWhidXE1dmJXeHNmTHUwdExUV1ZGeDJsUlpMb05LVUJDcE41elpxV2pCSm9lWXgwem44MW55Q2RDUHlhVUt0dExRVUJXWWx5VmhmMGxoOTR3VUZCVENyRG1BV3hWdTNpY3hWMDBTbGdpQVFRUkNnS0FvbGhMQ0dsL2JBZ2hVcEpZUXcwOVE2QVkrZmU5ejdKU1VsbXg1KytPRXpVbEpTemllRWZHM2Q3dmY3SVVrUzh2SW1JUkFJVEh6cngvR2lsTzVvYjIvLzY4S0ZDNnRxYTJzWnpPeSt0SmpOaDhaRHpSWWNzSVlYVTFFVXFTaUsxdmRCbG1YS2V1NHhxSG05WGd0cVJwREFiRHRVV0lpeXNySkRIdjA0QWJZanRISnpjOEdhVVBLQVN3UTF6dmZHWmlFU1JWRkFDR0VKdlpRT0RUWFZiV2toR2dEVm5HK3FtUDQzNWR4enozM3JqanZ1K1BEV1cyODlQUzB0N1h4Q1NQSEUxM2RpSlFEYXJxNnVyci9lZmZmZFc5ZXNXUlBsVE1sWUF0T1QzU3AyczVPZGk4eVh4aWF5MjFXYUxNc1cwT3hRWXdFQ2xzNVJWRlNFc3JLeVllMkV4cndwMnRUVU5PYi9FNUZJQkkyTmpWYTBkTisrZlZhME5CUUtZV0JnQUlPRGc0aEdvNVpaYWhib0VsWXp5Y3hTTG1wS2JLYXBTQ21WbUluSytkOGNBSnkzM0hKTHloVlhYTEV3SlNWbDZUZHBham14eGhYUUd2ZnYzLy9tbWpWclBuMzIyV2NqSEtDVUpFQ0xjYkN6Unp1WlVyT2luY3o4NUt3VXE5czBVMnQ4b0NBMU5SVnBhV25tM004QUNnb0tVRnhjREpmTE5lNk8vWmoxc1NVNGliQmp4dzQwTmpaaXo1NDkyTHQzcndVNEZsUmdnT1A5YnN6M3hnR09tRjE5Q2ZPL0lUNDFSSVFSWEVnRU9NZnk1Y3Y5SzFhc09EVWpJK05jUXNpTWlhLzNkOUtIVnRQWjJmbTNYLzNxVjFYUFBQTk1kQVNnMlRmRk5EdFZEbVlhYjNiYVZacXAxT0tBbGlqeXlZREdVam1LaTRzeGJkcTBNWnZPOFowQkcxdE5UVTFvYkd4RWEydXJwZDRPSERpQXZyNitwRUdGQklHRnVNZ3BVMjhNY2hqS2ZVc0t1T0xpWXNmR2pSdFB5czNOUFZzUWhCTW12dTdqZjJtYXRybWxwZVhkazA0NnFicTF0WlhCaVFlYWNoQkFZOCt6QWdNQUtCL3haQ3FORHhBa0N4S2t4RTFuRHlBWURLSzR1QmhGMzlJZzR3a2YyOWRjUlVWRmZGdWpPQi9jS0FFR2RpVms2bzFxbW1ibHZjSE1kVFBWVzF4d3dlWi9pd0Z3TkRZMk92THk4dDRGOEZGZFhkMmNvcUtpaGJJcy8zamk2ei8rVmpRYWZXdjc5dTMvTTJmT25GMGN6SGlWRmtzQU5TVUowUGpnUUZ5U0xhL1NlTFBUNFhBTTg2Y3gwNU5QNXlnb0tNRFVxVlBIVlpEZ093TTJ3QWdxOEgzYlhDNFgrSlBBRHJkSUpHSUJMaGFMV1pGVEJqY3V1RUQ0a1grc1F3aU1mQ0lWZ0dJcU9BdHdBQnhsWldWYkFIeis3cnZ2dmpwdjNyd2YrSHkrc3dFRUo1QXdwbDBmcmYzOS9lKzgvLzc3bnkxZXZIaGZFcUFsZ3BveWtrSXpMNWg4bEI0c3BzV3RrSlR5QUFBVFRrbEVRVlRtQnVpNlRuVmRoNlpwVmw4eVJWR3NCSFdtNkJ3T0I4TGhNTnh1Ti9yNys5SGIyNHZ0MjdkaisvYnRoK1VZK1AwcEVFWEJTaG1aTUVXUG90K3RycTRPemMzTmFHdHJ3OTY5ZTdGLy8vNFIvVzVtS1ZiQzRBS1gxQXZUTkdXbFdYRkJCcHVKeXB1cU1nREhKWmRjNGxxNWN1WDhuSnljMHlSSk9tMENFMk5ucWFyNmZrdEx5Ly9jZE5OTnRYLzV5MStVZ3dTYWtnQm85cUFBZzVsT2lBQ2p4bE9nZ2loQ0VrV0lyQ1JLa2lFN1pEaGtCNHlwN0taU2M3dmg4WHJoOS9tUmttcU14c3ZLeWtKdUlJQmcwQWdTSEFsL1dwakx3Wng3RE9WZ2ppdXdYWFRSUlhqMTFWZHgvZlhYWS9YcW9YNWZyYTJ0YUdwcXdnMDMzSURQUHZzTTU1NTdMZ29LQ3BMNjNiaUVYcGgrdDVHQ0MyUVV3RWxKQUNjRGtCY3RXbFN3ZHUzYStUazVPUXUvU1Q3Y3hEcWlGOGdkUFQwOUgzejAwVWRmTEY2OHVKdURVaUtnS1VtQXBpWURtdGtqa0RKZkdoRUVpS1l2VFJRTm9FbXlXUm9sT3lBN0hIQ2FVSE83WEhESDVhZ1o2UnhaMmRtbStUbjVxS2lwenIzdHlKc1VPR1p5TWNlZEtTckxNdDU0NHcwODhjUVQxaFVxR0F4Q0VBUlVWMWNETURwMUJnS0JZVDQ0ZXk1Y0xCYURLSXBRRklWbGRaTkU1cW5OQjhjNmhRaW1pU3B4SnFwa252QVcyTmF2WDE4ZkNBU2FBYnkrYmR1MjhxbFRwNTdnZHJ0UEF6QlIxZjd0d3F4dFlHRGdnNXFhbXFwNTgrYnRaajdWZ3dBYXY2bW1RdE1TbVp3TWFJSWdVRXFwbVY5cEpOcUtrZ2hKWkxXZUVtVFpZU2cxRmlSd0dwRlB0eG41OVB1TnlHZEdaZ1p5c25PUmw1ZUh5WVdGMXF6Tkk3MjhQai8yN3QwN0FiWWp0UllzV0lBTkd6Wmd5NVl0bUQ5L3ZuWC94bzBiTVdmT0hHemR1dFVxOWpVbnpjY0JMaHdPVzBHR1NDUmlBYzVVYjlRZVhOQjFuUTh3SkFveWFBQkU4NG90VVVvWjJPeEtUcDQxYTlibkFMNEM4UHoyN2R0bkZSWVdIdTl5dVU2WmdOelJnOW5nNE9CSDlmWDFYMVJVVk96aTFWVVNvS2tIQ2JPRVFPTURBN3F1VTFtV01VeWx4Wm1lVHJqNGRBNnZGN0ZvRkZzLytRUVhYM0lKTWpPemtHT21jeFFWVFlrYlJQeE5WMjF0RGQ1KzYwMVVWTXpCNldjTUw1WDJlbjBJOWZjZU01L2x1QU5iUmtZR1RqMzFWRlJXVnNhQmJkMjZkYmpnZ2d2dzZhZWZJaGdNb3JTMEZCNlBCelUxTmFpc3JFUlBUdy9jYmpmS3k4dVJuNStQd2NGQlNKS0VuVHQzWXQrK2ZkYWdFMG1TYUdabUprUlJKS0ZRQ0pGSWhJcWlDTmF4RndBUlJkRUNuSzdyZ21sMmlHYmtWRFJQZkdhbVNnbEFKNVdYbDI4RjhEbUF0VjkrK2VXMDR1TGlPUjZQNTRTSjNMakR1M1JkcndtSHd4L3YyTEdqNXZqamorZVZtYzZCYVNTZ3FSelE3T1ltaTV6VFpFQmo2UnVxcXNMaGNFQmtIVGtrMDRKZ0tzM2hoTk0xM1BUMHA2Umd6bkhISVJpY2JLUnpGQVNSazNONG81NVBQYmthalkwTkdBaUhoNDFsNU5mUkhDeituUU1iQUN4ZHVoUVBQL3d3SG56d1FRREE0T0FnMXE5Zmo1VXJWMkxGaWhWSVQwL0g3Tm16VVZkWGgrZWZmeDZYWEhJSkNnb0tVRnRiaXpmZmZCT3lMQ01ZREdMMzd0M282dXBDYVdrcFpGbEdUMDhQOXV6Wmc0R0JBYVNtcHRKWUxJWklKRUowWFlmWDY2V2FwaUVTaVVEWGRTcEpFdUdpcU1TOFdnczJNNVd2YU9BM0huVFM3Tm16dnpDVjNLdnIxNitmTkhmdTNPbHBhV2x6WkZrK0FVRHFCSjRPYWZVcWl2SnhkM2YzbDVzMmJXcFlzbVJKTjRZaWtjblVXU0tvOFIwMlZOdHpkVTZoVWI0L0drdXdGU3dmbWhIQkZBU0JPcDB1UGo4TnNzTUJnUkRzM3IwYm1xcENsQ1RNbmpVYitjRWdLQVgrMzl0dlFSQUVwS2RuNEpISEhyZXNrRit1V0k2MnRqMEFnSjZlSG5pOFh2ejVsZGNBR0oxeG52ajlvK2p0NjBWR2VnWnV1LzJYMXBBZUFIanRQMTlGWmVVNjYvRUFjUFUxUDRQRDRjQ3FsUStPbVE5NVhJSnQ4ZUxGdU82NjYxQmRYWTJaTTJkaS9mcjFtRDU5T2dvTEM2M0hlRHdldlB6eXk3ajQ0b3R4N2JYWG9xMnREY0ZnRUtGUUNKczJiVUpGUlFWeWMzUGg5L3VSbFpXRlNDUUNuOCtIZmZ2MlFkTTB1TjF1UkNJUkFLRHA2ZWtRQk1FeVVWVlZoU2lLYk5ZQ2k2SVMwelFWelBzWTRFVHppeUtacWs2MFFZNEhuYlJvMGFKZEFGb0EvTDJpb2tKKzdybm5pb3VMaTZmNWZMN1praVI5RDhCRUsxMmJrRkJWOWRPK3ZyN3F1cnE2eHF1dXVxcTFwcVpHdHlrenpXWTZKZ01hRHpQK09ick4zTFFVbXJraEdkQll6elJDQ0Z3dTF6Q1Z0cWR0RDNLeWN6Qjl4Z3lvcW9ydHRiV1kvMDhuSUQwOUhkLy8vb21JeGFKNDlaVS9ZeG8zMy9UK0IxY2FCTy90d2MrdnVRbzMzWHdyQUdQTzUzMi91d2UvdSs4QlRKbzBDZS84YlQzV1BQVWs3djdOYjYzblZzeVpNNnp6c01QaEdITWYrcmpOWTF1d1lBRmVmLzExekp3NUUrdldyY041NTUwMzdISFYxZFhvNnVwQ1pXVWx1TWxXMEhVZDJkblpjTGxjYUd4c3hNNmRPNjAwRVVWUmtKS1NBcS9YaTRFQm80ZVgzKytIcG1sVVZWVU1EZzRTVlZVaHk3S1ZhMlJHVVZrK0VqWEhhUTFUY0thWmFsVTJjSkJMQkR2cGl5KytrT2JPblZzTllEdUF0d29MQzhXWFgzNTVjbWxwYVhGcWF1bzBXWlpuRWtKS3Zrc1VvNVRXeDJLeHJ3NGNPRkMvZmZ2MjVzc3Z2M3h2YTJ1cmJsTmxpZFJaTXBWbS9ZNGxZOXYrQnU4M2l6TTNlYUJ4Q2VCeFFHTUtqUkFDdDhjOWxNWmhtcDdCWUFGMjF1MUFXMXNiU2twS2NNbGxseUVqM1loNkJnSUJSS05SdU4zdVJDWTJmblAzcjNIMk9UL0d2SG1HUzJiWHJrYTB0cmJnRG5OZ3QwNTFlRzFEVmNyS3BxR3NiTnFZUHcrazhYcUNMMTI2Rkd2WHJzVnR0OTJHdDk5K0cvZmVlKyt3eDZpcWlsdHV1UVUvL2FreDA3Szl2ZDFxT1M2S0l0NTQ0dzI4ODg0N0tDNHV4dVRKa3pGanhneFVWVlZCa2lUNGZENXJpSXZYNjdWU1EyUlpwdEZvRkU2bms1alJVMnFMb0RLd1dWUHNLYVc2ZVIrRG5BQWpSWUF2d0JkdGdCdTIzOXpjTEo1NDRvazdBTlFEZUJlQXVHclZLdC9wcDUrZWw1K2ZQOW5uODAyUlpibEVFSVJwTUhyTGplVVYxWFY5Unl3V2EranY3Mi9ldlh2M25uZmVlV2Z2blhmZU9RZ3VKMndFbUNXRFd0dytwOHppekV5Yk9xTTJvRkcra3d6ZlljWU9OTFlCZ05mampROFFlRHpJeTh2SGpPblRjYUNuQnp2cmRxQzlyUTAzM25RTEp1WGxJUzh2RHp0MzFpVThPUC94N05Od3VWeTQ3UElyclBzVVJVRWdFTURhRjE0Yzl4ZTRjUXUySlV1VzRNWWJiOFRUVHorTnNySXlUSmt5WmRoanBrK2ZqbTNidHFIRUhLWlNVbEtDWjU1NUJoczNic1JWVjEyRlRaczJZZUhDaFZpd1lJR1Y4N1o1ODJhNDNXNzQvWDVycXJYWDY3VWlwdzZIZzVrVmxHOW9xV2thQkVHZ3FxcUNVZ3BSRkNtbGxKaEJCOEtwT0ZaNFR6aklDU2JraEFTUUczSC8xbHR2SFFUUURhQ0dNMzJGeXNyS3JQTHk4dXlzckt4Y244K1hKOHZ5SkZFVWc0U1FBZ0RIU3J1SENLVzBSZE8wUGJGWXJEMFVDclYzZG5aMjFkVFVkRjk0NFlVSE1KU2RyNDhDczJRS0xlRStCelBkRGpNTURRQ2l5ZFJaSXFEWml0YXRqVVhqQWNEbjk4ZVZSdmw4UG16ZCtnbW1UU3ZIcWFlZUJyZmJqWHQvZHcrbWxaZkQ1MHZ1Y2RpNGNRTSsvT0FEL1B2VHo4WWw1WmFVbEtDdnJ3OGZmZmdCZm5EeUtXaG9hRUROVjlYNDBZL1B0UjZ6YzJjZHFxdTM0U2MvV1RvQnRtTnhCWU5CekpzM0QzZmRkUmZ1dlBQT2hJOVpzV0lGempyckxOeDk5OTI0OU5KTFVWTlRnK1hMbCtQbW0yL0dqQmt6a0pXVmhZNk9Edmo5ZmlpS2d2ZmVldytSU0FTeUxDTTlQUjM3OXh1VHozMCtuMVd4d0U1U3Q5c05WVld4Zi85K3FpZ0tmRDRmSkVraWc0T0QwRFNOTWo4R1N4Y1JCSUVWMjRNQmJnVElXWUN5ZFIwWmFlT1RoNFVsUzVZTUFOakQvVjMyR3VUUlJ4LzF6Wm8xS3lVUUNLU2twcWFtZUR5ZUZJZkRrU0pKVW9vb2lpbUNJUGdJSVQ1Q2lKY1E0alpCeUJvQXNOY0NCd1pyYkJ5bGRKQlNHcWFVaG5SZEQybWExcStxYWw4MEd1MGJHQmpvNytucDZXdHZiKy8vOHNzdlE4dVhMeC9nNEVWdElLTWp3RXkzS1N4dHRJMTEwVWdBc2ppWThTQURTNmcxcDZUeDVpYURtYTJ0VUJ6UVdOODBwOU1KU2lsU1UxTnRyYnRUY2RaWlA4Uzc3LzQzR2h2cTRYUTZjZWRkdjRMUDUwTnJheXR1dnZGZm9TZ3g5UGIyNG9Memx1QWY1ODdGN2IrOEU2c2Zmd3lSU0FUWC81K2hDWktybi9vRC9INC83bjl3SlI1NzVHSDg0ZC9Yd09QeDRHYmI0T0dxeno1RFplVzZNUSsyY1ZkNW9Lb3ExcTFiQndCWXVYSWxicnZ0TmpRME5LQzQyT2dCS1VrU1hucnBKVngwMFVVQWdELzk2VSs0Nzc3N1VGOWZqMEFnZ0t1dnZocDMzWFVYQ0NIWXNtVUxycjc2YXRUVzFzTGo4YUM4M0ppdldGVlZoV1hMbHFHMnRoWi8vL3Zmc1hqeFlxdHFZZGV1WFdodWJrWkZSUVVVUmNIT25UdWhxaXFDd1NDYmxvWHU3bTZtMUNBSUFqdXhDZWVMc3lESDloTkFMZzUybkpvVEVvRXN3VDUvbTJqalgyZWtEUWx1N2Z0eGJyQUUrL3p0U0pzZFpQWXRtVW9idHM4Rzl5U0MyR2d3WS91MnhxVUhCVFJlcGZITklIdDZlakJwVWo2OFBpLzhmbk8rcDFuQW5wc2JRSDUrL2lHTndmczJWc1BPN1RqNTVKTW53RFpXVm05dkwvYnMyV1A1Myt6MXBteDRqTDJaSlZkekNtNE1vRlc4ek14VVBzakF5clc0c2kzK2N5STIwTVZCamxJUWdBNkQzU0grbkFoc1BPQ0VCRkFiQ1hBandjME9OQ1NBMkVnS1RVK2kxdXlPL1ZFaFpuczkzbS9HWUdiZGNxYW5mWEEzdFhkdFpqQnp1ZHhJU2ZFUGF3TEpGRnAzZHpjS0poZFp6U0F6TWpPdDRuSy9QMlZNZkUrT0piQ05HMVAwaEJOT3dPYk5tOGRjRUkrL3lLU21wakx6bEhKZEhBalgzWUVRUXVKVUhJeHhnY1R3MDBFQUNFa0VKVW9oMktCSFJnSGFTSEE3Rk9WMktHQTdGTE16R2VDb0RXZ2pBVXkzQXd3Z2xCQlFnSUFRQzJRR3pBUUJBakVoSmdvUStSSW90aG1sVUVOcVRaWWhDQVFDSVZBMURkbXBxY01hUWZyOWZoQkNFQXdHb1drYWZENC9VbE5TNGZWNDBkZmJoNzdldm1QK1JNNFBIbHZOYXNZTjJEWnQyblRVWG9zZjJOemQzUjNYeURJY0RvL1VxZGRTYm9xaVdNck5WRzk4RFNyaEZCemxsQnk3cFRaVGxjRkU1OVVkcjdJSUFVa0VQUTZTbzRGTUdBVm95YUJHRWtCOE5MVkdreWkzWktCamNOSkhlZzV6OXJPWnNwenpQNUVxczhHTVFCRFk3RnFCQ3NMd21ScVNKQmxnazJUSUp0UWNacUt0MCtHQXJ1dVFKQm1abVpsVzVRQnJCQ21LSW9xTHB5TGJuRVV3c1NiQWR0UlhRVUVCY25OejBkYldablhwVFdTZXNvNGhJd0dPM3hqWVJvTWNCemhvbWtZSmt4aERRSXVEalUzaHhVR1BTejBaQmpEVHRCMEpaRWZTeDJiN21TbXBwTUNqaVo3UGRjN0FzSDJEOWdiUUNBRUJBUkVJRlFoQm5Eb3pGQm9WQlFHQ0tFSzBRMDJTSUVuTXAyWkFUWFk0NEpCbE9FeXowNmdxRUNHS0FnS0JnTld1bXpXQ2xHVVowMmZNT09TQjJSTnJBbXlIZFRrY0RoUVZGVm1BNit6c3ROcVE5L1Qwb0wrL2YwVC9XekxBY2Y0M3E0TUlEemt1aWRpQ25HbWVJbjY0UGEvY0NFeEFZUWgySU93N25neFlOcFUzcWorTnNuMDZpbUlqMXMzQlFHNFU0UEUvRytZai8zZHNUbjhBb0xwT0lRZ0NESjRSYXZZL0E3R1VtY0FGQmtUVDdEUnZlWVVtTW9YR0FjMVVhUEhCQVRjOEhzT1hwaW9LSmsrZWJMWHJadE9pb3RIb2lGQWpWVjBnVDFZQjlUMkgvMlF1U1FPOS9qalE0N0lud0RZZUY2VVVIUjBkNk96c2hLcHBoMVRVRzRsRTBOL2ZiNW1qYkV2V3lKSnRsQUk2cFpBa0NVNm5jeVRBUWRNMHZwckJncHdnaUtCVXA3cE9UY0Rwb0JTZ29LejlLZ0JDVFBDWjMzZVlJQndPS2k2Z1JFYTVqZHUzZUhWdy9RenBJU3E1K0RlZjRIZGN6aFpsK2MraUtGclBZZWFscG1rUVJXa1l6QWlmZzJiNHp5eW9qZVpIazAyejArRnd3dUYweEFITjR4bWF2RDRRN2tkcGFTbHljbklRQ0FUZzlYb1A3Z1JiWFFVMDlCeVpFNysrQitUSkt0Qm56NWdBMjNpRVdsVlZGVUFFZUgxK2VMMCs1SDZOMWxLRGc0UG83T3hFZC9jKzlKaVQ2ZnY2K3hBT2hSQU9EMkJ3Y0FDUndRZ2kwUWhpcG5vYkdCeEVKRElJVlZHTXEzcGk4elJ1WTRwTlZWVklrZ1JkcDBTbk9xaXV3d0NjTVJxVlJXVk5BQkRaNFlCdW1ycU1SeXk2TjhRbkFrN05JWWw1eVlNU0IyR0NqZ0kyQWtLU0FpNE9XUEdQNDM0bWhKZWFvSlJhZFpqcy8wZ0lNU3BFSEE3bU82TU1haGJNREQvYWNMTnpSS0N4dGtJdXVOd3V1TjBlZUwwZWVIMCtwSmpwRzJucDZRajM5Nktpb2dJZWorZVF6aXR5cEtER3dXM0NGQjJIcTZPakF5QUNjbksvV2JkUnQ5dU53c0pDQkFLNTZPcnNRdmQrTTdqUTIydVpwd01EWVF3TUdEQ0xScU53ZXp5SXhXTG83K3VGSkVsd3U5MGptcWhNdFdtYUJrVlJJRW55VUpCaENHNUVWWTIvNFhRNnpjZVkvamhSaEs0YjFsczBHaldVaWloaXlKWkZITmdTcEFReGZtQW9ka0VUWGl5U3RhTm1iYURpMVpUMVBHci92Wm5ReklQTkFsZ0NwejhJSWRBMERRNkh3d0lhTXk4QndPbHd4cWRxaUlMMUdWRks0VExyTkYxdUYwUlJ3aGVmVjFsLzErUHhvS1MwRkhtWm1YSHBHM2FGNXZmN2taS2FpdlQwZEdSbVpDSTdKeHV0dTVzT0dXb1Rhd0pzWDN0MWRuYkI2L01mdHIvbmRMb1FMQ2hBWU5Ja00vZXQyMUp3L2YzOUNJVkRHREFWM09CZ0JORm9CQTVaeHVEZ0FIdyszNGcrT0g2THhXS1FaVWRjQWI4Sk9LcUdGQkJDNFBmN1RSVkhDYVU2ZE1wTVZtb01yeUVDWkVuaS9YU2N2MjdJRmNZQnovcUhETzBOZ3g4Yk5HS0RHMVZWMVlJVnBZQ21xU0NFUWhDTWFneEZVVUFFQVpKb3ZDZFZWYURybEJyRjRrTXF6WEw2MnphQkdDYW1wcW5VNVhJTnl6ZGo0T0toRmdxRkVBcUZVRnc4RlM2M0czczdPdERXdGdlelpzMEdVMzNmTzM0ZTB0TFMwTmZYaCtwdFg4THBjR0xHekZsd213ck40L1hBNS9XWkxib05oWmFSa1luczdPekRtbHliK2Z4aUtOV2Q2RnYxdndDQWpDZCtpSUczNmhCNXB6N3BjL3pYSFEvbktVWFlkNEhSanNoNytXeElVOUxSZTgrSEIvMjZveldiUEpiVy93Y2FMdGJ3dU9MVHF3QUFBQUJKUlU1RXJrSmdnZz09Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJLb25wVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaMXRsdVc0cldYL2F4UnZDQksvT1J6eFEydjFESHI0dlRjanMxeFZ0bC83clc2WHF5SXo0c2E5RWdrY25BTUMwTFgvOS8vNnJ2LzZyLzk2U212aFNybTIwa3U1K1YvcXFZZVhQN1Q3NTMvOS9QZTUwL252K1Y4c3YvNzAvUFg3MXg4L0NIeU52dkxuQi9YOStmcThmRC8vNHhkK2Y4WXovdnI5cS8zNlNXaS8zdWpYRDNqam55dndrLzN6K3ZORjh2M3c4LzBuL1hxanZuLytVSHFyZjc3VThldU41cThYbmt2NTlXLzY0N0ordnZqMzZ5L2ZxS3pTeW54UURHSEhKOTduditubkN1TFB2eS8vMXZQZndPdWVHUG56RTl0MXZ2eStKUmJrTDdmMysrdDkvM21CL3JMSXYvOTAvWDMxLy9qVDN4WS92TCsrSC8rMmx1WFhHdDNsWC8vZ3lYLzdmdnpqWThKZnpPR1BLd3AvL2NFWTZaOXY1OWUvMzdmYTkrMmZ1M3RUWVVYTEw0czZpLzM4Zmh0ZU9GanllSDZ0OEUvbDM4eWY2L21uODArNzMzdXk1ZXVlOStDZitmUW5zQ3ZmOWFSblBlL3pQZnQ4bmMva0VsUFlvZkkxaEJuaStWNkxOZlF3by91VS9PZjVRbzA5cnRqWXl4bjJ4ZmFsR1A2NGx1ZDhiaitmTjUvR0o2K0hsNGFITjN2NGxYLzd6L1hmL2ZCLzhzLzFmZE1sZXU3MngxcHhYVUc3NWpMY09mL0xxOWlENS91MWIva3M4TzkvZm0zLy9TZjd3VlRad1h5V3VYR0Q3ejErM21MazV4KzJGYzgrUjE2WCtmcXp5YzlWMTY4M1lJbjQ3TXpGUEpFZHVNc1Q4MU9ldTRaUW40ZDFiR3pReTVXSG1NSmdCNTZjdytJaVE0cXhoS3VHRnZ4c2ZxYys1N1VoaHhMOE50akVSdVJZOEszR0RyMXNWa29aKzZtcFlVTnZqam5sbkV1dXVWMjU1N2ZFa2tvdXBkUWl5TDAxMWxSekxiWFdWbnQ5VzJ5cDVWWmFiYTMxOXZiUUl4aVllK20xdDk3Nys0YnI1WU5lM3V2bDlTL2ZHV0hFa1VZZVpkVFJSaC92eEh4bW1ubVdXV2ViZmI0cnJMaUFpVlZXWFczMTllN24yaURGVGp2dnN1dHV1Ky8zdzlhKytLVXZmK1dyWC92NjkvNnhhNzkyOVovKytSL3Mydk5yMThMWktWOVgvOWcxdm52Vit2c3RIdUVrdTJmc1dFZ1BPMTdkQVF3NnVHZDNlMUlLN3B4N2R2ZUFVK1RBUldiMzVscVBPOFlXcHYyRS9EMS83TjAvZHU0LzJyY3J0LzlvMzhML2JlY3V0KzcveDg1ZGJOMC83OXUvMkxWbG5KdG54MzY4MERXOUk5N0hhOTdBRlgxamZmeTF4QysvOGF2ajI3TnVZZElmLytjL3ZWN3ZaNy8xNFY3THUrcFRjMGlsdld4dUhKM0xHSFBpVjJsRUwyVy9pWmVNSGRMWFdueTVnOW5XTSs4OXJqQm5ITHUySis4NmRzeGZlNEc2Yit5MVY1NEplOXFUejFxMTMydnQ4WEFmTSs5M2pUVkNHbnp1RS9vTXFWNVA0NjBtNjRYMTNYdlhtUVkyc0wrWTcvNThOZTM2OExPWTU3M21IcDN0SFBVZVQ4cGpzMk9BLzhzdVlsVFhUS0xWcythcUw4UWt4MDE0ZmRmTE9uUXVNZVRCbmxiV0o0elNBZlkzei9xTlZOL3dMU3hyZmlYT1hFZTZJRFYxM2l4R2JRbUQ3a1NaM3N2M3NNRmYzU3pHSFB4eHhhL05MOXhjbnY0em9DRjE4cTZ4em9CenpxOWRiZVdTMG1LZFpyNUh1VnNQN1BzY1FIN2ZxNFUxUzF4aHJQdEwrVnNZMEZ6NFFZOTVyeHBxM3lXd0VTbVhxN1NIUGZscTV1YU1OK3U3Mll6TzY5ellmN1A1ejh5cmNUSEFRU3o5dTBjcTF6RGd4YnVVdFFhd3dxMkZ1UEVqREJPempXc1V0amx5S1hQRS9QSUpCY2QvQjUrODQ2aGN5b01oOEd2WEdNZXEvanVMK3hjL202V01XUGFZOGNPcDkyemZGZFlxSGZlT2liRE9QV01iS1V4WHBzYzJWL2JXMWo2MytYd3ZZUC9IVzJNdEliQWhSUHIyZkJlaC9RRjlGbUNDS2ZXNXVjZit4bEF4NG1lWHdYS1g4UlUrdlJSODh5UENZeWZ0VGZlYldudDVUOHg5cm5XMTh1VUppSDNIbk1xTERYNy83Z3ErZnZQaXI2VnZ4L3B4UVRHTnNIdGJvT1Axc29QOHRYd1JBTUs3dVVwUUROOEhGVWJuZm5NQVNjU3MyT1YrNzdOZWJDQWFCUmYvNW85WDc2OWVVaDR1dnRmdmlkL1ovZjAxWGVGbGkyckJXcDVaZ3VheTg0UW1ManhrOC82c0lleUdUMzIwbFRCaHRZU1R4SWNrUFF4My9QYWo1dzVzYW9SbnZQVmpLN2orWTVjZE1LNndCUmN1MWRiZkwvTGhrWGU0TmxHNmw4YU9EdWdTSzFSVCtiQmpYamxITDl0N1h2eWhGWmFraDZmbkcyc0xLUWZ1YjcvUzc3ckc4MTZwakZXZWQvSXBnR3R2QkFLd0dPTi84bHZ6UitCdk5VN3dsTC9PQXo0enB4YjN5Q3pNZmpUSGNXTlUxOE05Vlp6MFRiTTI3aDVIZTlkUkVKbTlsSTdKTGxMQTEwSmdKZitkeVY3L3VUMC9YdkhLR3c0WEpqZk5CUmNpVCtjZXBEVTN4amVCVlR4YU9scER3VEtKcnZVdEd5TnM3eTdsRzREQWdwRGxjdmZSaW12RVJZOUtHSjFWVEhvSFY5UXpWREVCcHBPUXBya1dQclR6eWcxdXdubjQvL2V5aXJFTllKS1Y0cDc1MHpEMkFUdnN5VnBQdjhyVGRMV09OUUpRZk9KdThkQ3V6WHM5aEM4Q1lreEV4TWRQR1J1OGlnUlZJbWtwc2QwRTgvUmlHdnRhL1U0NWdvK2RuY2VuUzhaUUhseXJQeDE4WUo5bTVCY3FjY1pQV3FXK1h3dDdFakluL3NSdmJhSUFjWTM3d0ZyWjVrQkVYdW5leE0vK2VOc3ZpQU95RGRCMTE0Sm9Xa0REQTBaaE1jL2dkMGRxL1Q3c0crKzVRT0ZrVkRXQ0RZSmMyMVhreGVpK0F0QmtRaFBvY0UrQy9pRCtzN0oxUGp2aTl4M0dVeDlEenE0NVhXUGk3dkVSRU1EWXhrSnkrYnpsbkFUK0dybWlNY3F6dU0zYjBBUVJnT2g4SFN3Qi9pTitHU0FyZk85SzhTVThjaHY4elNVaHFtQzY1ZGtwRzhiQUpWWi84NHRuOFRHTGxnRnJJeFcvanprbHNBRXlFYStSRm9zT1FJNmF4U2hvRlB6cS9uYUFPc0MyOW9kWUxRTkNSZFFqWG96QUhjQWlxbWphMGlJY2Y1TjF1elpPQ0laRlNFZXF3RDZVWTBsQ3B0WURqRVNRc1M4aVRTRzRWakNzTkw2dXZaOEpmTVNWaGJFdnZWZEphOThnd2Q3M093aTNrV0NlWHV3OEF5OGY3L0h0WXBDNVUyRWxaOXZJY2JBSy8wT0xzVnZZUHB6dEprQytoT1FidXBkMHB6dXZ0VUltM0w3YkN3VUVTc3o1V2JsQkhPdUhTM1BSbU1LUUpSTFNZREVmc0JIWU5SeStsd3gyOWxzdEJiemlRUnZDeHdkamZkQVVHQ0F4elVXRnhMVmFDT0ZqQTlEZ3hRZmRaSE1KSlJlNnpIQ0N6UlBlSVVoNE41ZlA0c1AxUUhaNDNzME5zVTRwRGFJbWRuQUxCaktuL3Y1Y0ZqZVc0eFV5UkdpK0hYTFlDLzZDeEFLVmNDUDhqaHNocU9abnZ3VG1zRGIybkVEVmlUTVFaZS9haVg3WUtKYXY4SXZReGc1bTk0RjVZRXozQjlvQUc0bUw3OEF3OUtqZzNVUjBkaDRFWjNYZW5OaFozcGRieFdUNzNudGRTMzVCTkFvWWQ0c0R6M2c3THZwSkEvQWFLQlp2Z0JNWDFuMjlXTW1jSGRiUmN5Q1lKU1ZXNVhkNnZmU2VSUGdJOEJ0QzlhdWR3Q2dtdUE2bEkvN2NCL1dRQmtBTVpCSytXTjVRRndxaDVBRlkxYzZQQm0vVWVQbHMzblhpVnJFTXBDQjBubzFEWDFlTUl4dm5lb05KZ2dFTHJjNmFha3ViVlhsWWw0VmxCUUlrYk1yTlRjMGRSY2VrR2dob3FJYzJjK3Q1NG9rVE13QXVRQWJlZTJFMWkxRDZRTVlDMGdDcVNlUllGOHl1bVNLQWpxVXFIaUJJY0E1NUdWRXdzWlJRcERrL3NHK3hJWVNyQ1UwQlIzWnVXZ3BzWWNMNTJEWEF2R3ZLUFVhaUF3SUtsd1dwV0hQelBmd1dWQk5ranRBd1RDT1diNzVnbm90K1FoV3Z3S25ydm5yQ205WUwyelR5UFRVQXpJUUw0REprZEFXWERncWhQa0NZWjIzZUhSd0JhTnhxMkdycU9BZzdlb1BaZ0FoNER1SnFodmRUalROcXNCY0pYVERDUkhSOTJNRHBad2dPTjJFN3c4cEJhd0l6RGxvRDRIb0I1SENMVURKNDlRYldDeFRpQW9uK3lBRHM1ZTJ3aS9LQ25FUVhqSGIzNXg0dkN4ekJVb0lJVzhyV29VV2dyMFFiL0hPTnBCV2ovMWl4VHVCaFkrK3B6NTUwR3lzRVJ0eHc1cDRqSVRkT0loaVVBRUo4QS9JUXJTZVZoWVlKUWpzNzdIMitjQ1F1R1g4a0hCQzhPemlGSEcwaEpjSXNZVk1nTHRndlVxVVNQOVVNRjBRcGp1OHVIeDZzV2duell6SG5VOEhrcitjS3h6ZFNBVHlURFlJa1RyYnVnVEFDUEJXVGZyR3JoRzllTDlIS1A2Sk0rUk5HVUpQKzZ5OTFiaVhCczdpcWdKNEMxQUhMaFFSQ1ZnU2tUSlE5WWtlNExOUVB2SWtkSm9DT2lsSTVDZEdBazlVWGhJNEVLWng4KzhHR090OFhxcGJDeTlvRFU1Q0t5cEsxV2NlRmZVd1l3cmNDb2hYOTNSTXNFSDdvVHNBRTBibThBUWd3Q01QcFViUkIwSTNGTDZRRW5JYTBzTXQzdmRBazMwTmNoS0d5cEhEYUpqWGV0MUliVStxVGk5azlaSmdmOVBnMWpIa0ZFektHRzZLRjc3SWgxd25oUjZqMXBpRGpqU1VPb05JTkZCcHJCeUdPLytCWmVzejc1YzUxRlJUbEJvbGJJT0psL0JwSngxWmVFY3YrakkxM2w0K0N3b0VZOUxLMlJFVmV5SjB2VE4wUFlWTUpGeDJUYXdneGdqT1lpeEh0UElDa0M3Y1lIKzhQNG4xTFRmNjlOMDZ2amdUbVVtaGdDNHVIdzRFbzJDVE9BZ0VENmlCVm53dUdSWS84dGdzMGpIc2hCRkFGRGZjTm1FcjJjeEM0aStCdUtxeXo2Z01uN3FBUXdaTm9qbmMxMVN2bUdIQzh1SEVSWGdrTWJzeEc1TWlHWVFKUWZrdDZBTmUzNFZITm5XY05EaUQxazFaRTQzNXZPekZwNGpBRDRjZkhzaE1Kd2hKZzVUQUZGdWY4MWdBOE1DZURVZHNHSWx5NUp4T2FJeExwMkRzd0Nza01uc0I4THZnQWZKeDlOd29Nd1ByZUlOM052UkM3TWVNWE80YkVUcFlmUHY2Q2cxd0ZpOFYxMXdUcmVnc2IyVWE0WkhNZ0Jhb2VpV3N1RmFOSlhMTThwQk5wOXRFb21NZUlDZUQ3eXJHemw2VmxLVEUvU0RaTFA1RVFnQXZrK05YamwyWkc0QWRsb0JPNFNDVlN3ZmlJSVpWL3YvNUVNelJJaVVlWEptcE9CZDRJWTh6clRSZzhrUVcrelc5WFdHRTBSVEpDeDRlSkVnQWdkd0h5ZkZONVh6RVMxUDQ5c0Z6bzMzb0VRWllsWHkwWjdER0w3M083SWpJY1RjbDZ2UUNJdjA0VWJrWm9maVdQRDFJK0V5U0JlQVBIYmZ6cFhRaUpIUzUwWU02OXcydkwvZ3k2QlBQS1Z2eGFEaGNqRVloUWliMmJnSUFDc3poUFRUZFJxYkcxeUFRV3RKbGhmL2c3M3hYSFM1QUJiS1FzMW82akNPeUFVaW96ZWJBd0VUVmZSZzM2U1lnM0tHM0pOK3ZORzdYd0JOamQ0SEtJK01BUGNha2k1SEJ0RERlais5Z3pqR0tZTU1USmlBQWcyNTM0WEZrTi9DR0doY1ZkRTB2ZUNrNms1YmNpSy8xelFkeUVseVRxSGE3MjVVR1lRREh6dVpHL29ucEI1WXJTZlJDVGZVTkdZZFkzbkhQSVpBSnlELzZjWHp3S0JvblBjU1BBRlpyUGU0WlZ3ampHcU1Yd1NpUjhOUERPeFNDenF2RDVyNWFWZ0lpWVJKTVVSRDVlOGI0cVB2aTdGNU1DNzBjb2J4Z3BrcEFyWWkraEtZcUxwZDhrNGlOMyttSHBrS3FnWnNtNWhIUGtsWGx2K0lxWnRJNDc4VDJFMjI5YnYvN3BRaEFlS1BCekpnRlNZWTZzQ094dEMzaDNBS0lEMmlqZVJsbFcrOEdMSGlSUnV2aGw2VHVjSytKVmhJWU1PVUlPUURVS1pQOExMTWhtbFhCc3lEQWh5andtbDcvK3Rqdlg5M3R6Y05FY0Rqdm1EYmloblJPT2ovYVJma2MyQ3laMUNHRGJrREZ3RnhTcUs1dlVLMTlaRi9ybUlSd1Q3THhUajJaTUZXZjJGaWIvblpNNUtCd29RSGpkM0JaczlnOXovY2RGc1ViYks2OFpLL2x1MUU4d3pPK2g2MEs4d0d6OERWblJlSzhscjBWYXhOZE1MNlJ1OTNHYjZVV1dobmpCZkZPcnBzclVaVmtVaFhHRW9mMzlxMDhtWmtpMVRYK2lMWUFhK1hKOXVLSjltOXRtSFdDRkhicXlaaURXb0xpQWZDekhDQWRZWXFjbXZCRlFEMytEdDJic0dWNEhxUWFuMEtrUTlnNFRPNG1udHlKQ1MvdzNWOElLNkxHeHdqaFlyRkFOZjhwK0lCVXllUkd1Q3RFVE1ZVkE4SlIybTBNQzg5K0IvWDUxdythZ0tPd09rZmRPNXVLV3ltaWdCQXZxTEdnSzRNNTFuOHY0L3V5b2Y3NlFqejBHOXBDeGpTaEM3TVlQd1IrMkZPV05yL0QrY1BUU0c4Q0dWbWdOSlh0L0JWWUcrMFBCaHlHaEJOdzdJVFBCQUdXcVJQL3hxbzBnYVpnWTRQN2VBRGlrQVRWeTdlZUZ0dTZ0OW9KT1FjNEZGUmc2dlByRjFNR2VYVC9FK2dQcXBnOVdodFNGZ0FPK0NJZVozSXNLeEY3UVFlTDFjendqbTNzc0NNaUNlcXZUbzVTNGh6a24yUTF2bkRvNkhWb2tocXNMd1RUQzJBTUQyUmVobnNXQU0zU28yd2Z0aHlaQUdENTM1WG41VmFRbHdtdW13bTBRTk1DRkNEM0NOY3Z1N0RNZURVeU9aajc3aHg3aDVOZ0hVdElzMkRzVmlJYktiQ29hVnAwQ01haDVqQVAzZlRGTGVCVUVsaWdIUCtTU0wvVXVsa3pRM3JmSEhKQU9VQ3g2cXR5MGN5a0FlcnNYa3lVVEdCei9HZ2F2aEdRK1p3UGxIRmluUS8vUU8vREJWL2tIY0dXY0FkblU0RzRnYXpEQjRRN3lsakJicmpkci8zZy9QMkwxa1c5bXNCQVNZNkZZUk0xMzRaS1lEZnNpQVFFdkNTZDhDanNQaTNpZjIwVElSR3M4eE96cmcvM2locUJQV0RDTFlXb01BTnZiN0JiTFNweUcxU0NRUUY1QUdDZHBHeWYvekxtaVRKLzJGYyt1SUZxL1R2bUZyTWRmT0JueHlXVkxXN0R2aVZFaWtlRHhBMVdGbTBYc2hIVUI1ekJyTk1HRTFtNlBNd2hSWUUwenc1blFIZXphRFZqZUlCTnZqQTc1N3A4VTc0UmpMUE9rM1BkNGJ1K2ZVQlJaK3ZUR2N2a2x2OG85SW5CUDZBK3BKSnZoa1ZoQkl4ZFRoQkRlZ3hCUU5xSmtJQWlHai8vNG5UdGo4TisrVkxyZkNiWHc1NFZCQlJPaUd3R0E1Yk5sdkMxdlRPQUpDaXpUY1laMG9nSUI3bU5sWlE0dnRnOGVnWVZRUVM0K2VLYk5kaURjQ2FzREJ6Uk41QkY5TitXSlZ1bUhQUlYrQk1pOFQvbU1mcWw1MUMwYmVmZEVXdyt3cm5rd0F5MEU0d2xoRHh3VGkwRFRXSDR3M0V2b1l6L1pIUlYyQjd3emVJMndOK25yWWtUUHI1UTlpcFhGL3pLTWluai9JZ01CWFd4cHRpWnY3M2pqby9HQ2FXeWZLUUsyYzBFVEw2d05JYm9udXhYREFKbU8zR2tSaHRGdWRyaWFha1ZKODVZMzhTU1pSTWRBdUZ6SVUzeHVYbStlWjE0bWFqMEJ3eWFBL2N3T3NzcW1HRUJTTG4xZ0diZUhtaE5HVVFNQkNVYkt5N2lVMFJWak5jQ1NBbmdFYXJrc21kWEFJVmozQ25TakRKSS94Y3lCVEdRek82SThCNTJSMWR5NGFHZ3VLM2RBR2tCby9XTFZva2Vxc3M5c0R1NHhWeUFQVUdXK3o4UitzZlIxa3NFcG4zT3VBRkEwejRWMGpxbVNlK0tCRWFpLzBvVjFZRmZMQitlRFBZTVd3NlFGd1FkMmpJd2JnTnMzNEZxTEhZTUlSWVR2czhka2orSFIxNEtOTmMyZFQ5Q2JIOHdvOUM5NDZOV00vK0lzc2NuckpLQkRMd0xYTkY1b25tZUJoSVpCbk9ySnpPaVJ6Z002UmhEazM5aUpjMGhvRXgxM3JIQzhXYWJXdlcrY0JUaDdNaVRaL0RyeElSSEtzRGRDZG9OWThSVkhLQUR6OXF6UVE4ZTVJQU5RL08rY2xqNEJHWUI4Ukk0OEFSVG5nckVuM0J5RmpSRGJyUGlGcStVWUFXaENUWmxkb3d3djhjak0yRjQzbDJDKytiNkp0ODFjWHM5bmZZZ29BMFlJUGdMc1FOcDNlZnp0U1RCRzBIQ2I2YUhXTEo1d3VraTdScys4QWJTSFQ0V0RaVVRwalNjWGVZZnBYVDRjV0N4Z05wdTFjNFFWRXNDNWE2eWRwUnY2Z2pvd1BtcThrbkVKTkFEZzRubkJCMU9RcWQwSW5JRFlBc20vcTU4ak1OZzBQZ2pId084OHFuampTK3dKVUI4d0NnN1hJSlZRSFVEUU9MbDJuaDBIbmF6Zm5IeGE3ZFpFK0tYaVpNRWNqd29jM3Y2a0trWDZDQkFMRmgxTXNXV3VBbFQ5OW92cDRBYmZJcFJnMjFnWDZIdmwwbk5KcllzQkgveCttVWd6NW54b0hvZ1ZMR3NTM3lzd2hneGhkU3FMRkU1MGNrc3NCWUJBMStmaU0vT1RRQ1RJRFBqSmRYc1lpRDI5dGIxY1VvUWJ3dVhQZ2NPUXk2QUZjeXRtZzdjbnVSOVdoNnlMdkJHOENSYWJNcEg5UFd3SE81ZFFCNVQ5RjVJNkttTWRreGcvQ1p1WUhhdkpIc043MExZWW82eG1zbXZmbmMwOFlLRnBIQVQ0SUxFc0ZSL1ZOdkVQcy85a2g2d0tPck9oUHpQVzRXRkRmV0R4ZURuc2s4Vk83Z1g2RXdhU1lXYStjVWxSOFh0elNXQXFYQTRYR2NyZXdkM2s3bkVRNzdtUTBPOTNrdCtzL2NWR0pwT2trZjgwMWhhVlFjU0lyaUVPeko1aXhDdzh6R01jZGM3bUJ2VlN2TkVMajlpTkMvTXAyTkVEUzlrZllRTFcwSUVtTkllcUhsNFVqS1Ric3liUXROMTRXSXRZSzM4RHFUSWJXR2NrSm1Rek9KYzZlbnE0YlYxVHpQTGlEalJYN053RVRVb0pPMExhY2htSWZGbkZrcUZHa3dPdHN4ejNTb1VQdmdqZGNBc1V5a2xEd1RBd055N1ZFMCtXTUo2REcrSnNndzF6ZjZzUXVzZk45ZCtmbXNManpHektmbHpLUWNCL1F5OWdKN0QzaWVhMmtxWUFjdUZRQWh6M3k2WW9QMDljZjMwbDNEZUxUMjdZeWd0M3ZvSk9uWTM5aEk1VWdwOEZ5dVFQNnM3N3dpTHhCNEgrZVZqb2dvL2liM3cxaUp1UEJMT0pWMWgyOEl2NVd5STdzYWl1VHJBK0JSaXl2bWF4Z1d5V1dJYlFSZ2doemw1cDVWZ1FtbVhVQXNzaGlWZlBwcG90WnlqejNtYjVaR0t5Z1FRL0FoTUFYMFNlL3M1dFRFSUhFV2NyTldHUE9XMDBIMEhyQzlmSHZXWWlEQmJ2TVhEN3pWbHVTNDkrY1JZczhKQVd2LzZtTFloNS9JemwvMzRZME9WNUVKZHJqVXpHVnEyQXlJcVFMbkZxUDVVUjZCemUzK05wZkFVNCsvV0RYOTltTy9qQlpkVnFPblVHZUVvM2tmZXd5Y1NqWUtrU3pySlkwWURkQU9sdzVLVlQreFBqblp3NlFRdVEzT2tDUWFMUms5am1BY05NMlhJbHdqWVV0djJjU1NTREF6SDhzVzRsK2RvSm5udnVGc3Q0VDZWSnd0ZWdUU1ZzWHEyY1l5OE5SZHdmRjIvUVFnZG1lQWd1bU0zOFJlakpoS1ZIVndsNys5UXBpQWJ6a0lzWUlPaEVNL3RhRXVvR1NNRTlWT3NlcDdMTmc0MElyQVhoWG00RmtySHFucXh0REJ6OUJCNmg5RUhDNEFuSVVqMTlvU1ZqR3dvQ3ZHaWV0ZDBWcnVqQjdDczMwRS9lZkZzVGdUNUNUOFl4UFlMdVVHYmM0Z1Z5SStvdi9OYjZaaXdKWjRNWVdjdzR4V2FWSWp3aG4rTndaQ2ZpbDBqYlFYWW85N3BZZmdnazVBblVKdUtCRG9WWUFIc1lhZ3Jlc0hsK0RpeVc1c2NCZUZod1NhalRHM09GRTh3UDB2YXVhOTFjRWlJZGNLNHB2cWFNTVlMQ0JzQ1gyUDNqSkFETDEwWG1BTWdSQ0RjUmdzdUhmU1dKMmdJdUxndDdJS2UzQ0pDZTEzd2p2amJVQ3A0YXFoTFp5anBaSmpZZVFOTWV1MGtFendxNGR6WjFMZXdJNFpWYmdvUllWUWJQM2RDVzVmMmdRUmNYa3p5SUF3ZHhWL1FNMU1sVVRBZ25TbmJQa3ZCc0REeGN4SWx1THVnRy9rQ05lSkxqcnlJL0lCcFp2VmNqbU0zZ2dreVRJNFZ6TnZteWJjQ0ZyS1N5SU5mUmQ2ZzFCRkVxVDBxWXg0Q2RtM2oxdkJ5dVpDR0psSGF0RHdHUmNGSHJiS1pWWE5HalFleUp2MThlRk03aWdmWExDeXVZZzU1ODJGd1FGdmtMdVRXQmcwSXBhWEovY0l0OHZ4NjBiajB6RzlPN1NkZnJ1U1hqYUU5TTcrM3FjR1Q5bm50Q0xLelZZZzhDYnhQdVVhZmxZMDByR3BpQUZSZ0VCVGdnYWk3QWo1VENWaVgyNTJZOURTWEU3SVp5NUJmaEo1NHhFbTJJMU5FMWg3RUhhd0x3akFJcCtGN3ZCdjVhTGphUHhTZEFoNmN2ck1ManVWODZ6MlJwUmV0OGVnOE1EUGE4Q0hDc0FSalNJQTR4bnRTaFpTUHpNdGV3UGxRQ1dEZ3RsVWlzTWs2VndaTlFMQytCdVJQQThwczhJd0NOUjNyaTF1ZzlvMEp5ZTJ5ZCsyWFZtalU3MENQSVFtRmhrWGd4d20xYUxPN0lQT1ZSckR1OEZESzRnckMwNWI3OGc2UzIvcUwxNzFJWm5tejZ0S3BrZWtxSENzRWlzUGJhTWlDRDd4S1Q4V29ZMEloR0dTTCtZelVSVElSVmc0dncyOWZEajZBczBORUd1MStvOUtQOVB6eVl5M3lRYzMxN3dLV2ROZVFUc29kSUlpTVIxM0YvbENvV3ZLOHlkcnZOYVlFR1hQQ0cwelpQWDk2QXAyWXIxbUJtV0JwMHlsTW1naVp1aXNRR0t3WjMrcDFqUG13Y3FJV0FGQ0JuNERTU0sxSFpQSVduYVEraDRVUHlXVTdTTVAvazBXZ2xkT0h1T3hkVUIzdC9kMGpBdkU0MkIvZlM0TURaTHhENEpscHllN0tOOFdZZ2s0aUFtdjN3S0lncjhkd0NDZllpVzUxMUV6b2VOTnBGOEo0UFNKSFEwRjVreEtQakI4NWpEQW5SQXVONTljSkRZMTVQZ1hCOWhNczg1WUhFR2VCQzJMaHFoZm1EK096N1Nxd3ZoSlQxakUrYzM3MDhXdWU5RWFkVnM0SmhHZEMrVTFoMWt0eTlLT3gxOUN0Q01WWEVwWnRpeWRZMkE0Z20xdnNBN1ZvYXQvazI0ZXpUeGh2RzNpeFh3aThKWk1OeU8yNG5YRVFmMUw1SEwrWWZlVnQ4SW5ETkNPZlFCdXVaVlNqZDAraVp3azhkMnd4QXlNTzJ6NGdmSFpIYk1FaENDdHpIWWdGWVRGdk4wbU5DMVNMMlZpVU91TElIak5yaWt3MWZTd1ppWXQwSDBDb3d1WUhBclJHd1lCRUJzbnZ5bGVhTXVaekhjbDlXZWxxSVN4eXR3MHpIbnJuLzhKWmthWUZISU9NN29zakRUSEQ1WkVSWTBmTVZEdjJOTUhJQTJZaU1oMjE4WUQ1czYyUm5XTW56dGNKMzRLMlE1R0RSSGVybzV3MmFxdnB3RVdJRkhDVDgvT0RQMzRaWEV3d2VaRGkwTENORkUydzdBZWczV0VhQUJQSUkrK2lYQjlDS3lZTktYTnlUU2NpSnVSVEVaeGp3Tll2WmlaWkViaUJabzBrL25DbXozNTk1U0ZQWFZ1QVRZcUVERU1nVzhROHp3NUQvdUFpWTRaWDVWaWdUZG1vUlQ4QWlwYjJnS3k0NFp1YUtDSE1BNml1ZkgwYjdZdkVPWWU5RnoyR2NnTUhPbGlud1RsQ0E1ZDRRYzlOWDNsMDkrUVZEQ1FEeGFyQ29oazVBN3ZLR2ozbUtsdy9IZU9EbG5rOStmZ3B5NXowVjNIQzlZZ1VNdUJXaExWa2pCQmdHZUlRTlY5QURVV1BKaVE1SCtNeFEwVVdjL3p3bmhQZGdIY1hjUlJFQ2lURnJZWGdFcVJ1SFJ2UGl4bGNObmpLaEJJZ3pzbUlRR0p3d2M1Z3N2SHpoaU1QMWdMdjRaWjM4QlRjMzkvWkk1eVJIYWx3VzZHWk1IT1d3TW5hREdPSnRsZnlZSmg2STU0bHJubTlrczFjMUhjazdYMTVpRWFISjNMNFRGMzZ4bXl4a3kzQjdBSld3VjRDUURNK3pCbzhRb0ZLS0NDSVA4cjlkejJrNm9paFpNb3RWZ0ZHdlJSbnpRcDY0NzVtd2xqYU1vaWduUGR2NHV2S2RMUUhLU3VjalVyZjIwdnFTR3kzQWxRSGpBNXBrenVaTk9HMzBIVitQZWpldVQzVHl5Sjd3MDBNRm8yQWNqVTFtLy9rS0FwdjNCZFM5S1N0VkxKZjBpQ0JmK1NsV1Z1TFZaaEN4NTNtRHFBVS9nWWRiUVc3ZWZwdE9XTlhhTTZ2MlRmNHMrU3JVQ21xUWlJRHpncFdXYlhFWnNTeUtEcDJWRzN3R1lUNlpqSzlmNWRWZGhXTnR3Y1pNMFNLb2JuaHZEQjRBd3BGRHZONUgvNEdlSSt6RlNVOTBYV2dnVFNwSGVBa2g1QnQwNWgxZG9tcWxGdHdVaUVQM1lhSHFqVlF2MHlMRm5wVXZlb1pyd2hodisxREI4T3dNc0M1N2l4RHEzMnVsZGl0NGJKRm9LVEZteThTSU9VMnllT3BjTFJ4SjFveXFXWkRWcWtaVzYzM01vaXJkY09CczBjQmp3a09yVDUvdERueUc5U29RalhoSmFWKzJXZThDbUZzM3RYQmJWMmR4aHBXUGVMRjVTbk1ZMVZESGRxTk1zYUY5SjZRSkVoZVhiTmpSU2JobU9OdFU3cko1c0RyaTQvUWtaWGxZaGZoQTVRSDl3M3dWb3ZTekZTRjhDdmxxUW9kWGpNczZsVFpPcTQ4eDFDby9VTTZLR3FUd3ViL05sWE9EeTJhZ1JCaHY1aTNSL2phTlFGYk9yNWQySFVqcjFzVDA5L0VNL3hSWG5hUWpNUkQrMVFqZ1hIQUxudS9Cc09SdHVCRHJWNnltenljZmNwZEwveURHNFpWSmJjL1ZFQ3A5TzI0MlpRRmc1SWRkc1I2TU9JZUVZWWt3NkJpeXJvUXZoSk1ydWp5d3hnQzJ4NlpGYVpVczlrVitjdUdiV0JIYjl5YlB1b3E4VzhlNzdaUkJFY0pFVk9vQ0FKZDAzZDlKOUFLRUhsd1BQMVZGQ0tTK1pnSmhhVUhMdDNqNHNXMXYyd0JSb0pIWVA0dUJ1WG0rL3F6TEUxbDNpazBCdkRwbzEwek5RRFJ2NnljYVBOYVR3R0xoSGdTWVNNYS9DRE5vMlhyVmNZWDNnbmRkRFo1UElNU0lYdXZoZXo1SDB1aG5xSENzeXp3dkp2d04zclBld1NLZjIxUkVWa2Zla0g2Qy8zb0F1d3N6MmdWQ1lTOEVpd3JxWUFMWkpQTzR0MWsyY0JNMWlId0hZUzFYOXpUMTIxQlkxbVkvSGtTdEZ5ZStibXpodGxwMnZlVldiNGIyZVVMd0pRdFE5b3NVakI5ZUNHVUtjQUNiSDlnUWM0YW5JTW5jYUpTbFhBdDIrTHpRR21FeVd2RUhrUFlPVnlFU1k0OUpOZnhwQnpBVzVUQjZoTHZDVVY4RW5Ha3NwR1NEUkp5NEQ3OUZCSlU1VWVJc3R2bWJFdUFlamIydnB1cE5NbHFUWEMxM3h6cWdVNFFGbHZRSjFkT1N1Uy9MSkluRm1FVWxESUFVY0h2VFczVnd6N24zV2xnc2tOZ2lENklmRWV5OVR4VXpxcXRZM3lZdmhBWmNpTitmYmt3cmVURW44UUV3ZUhzd28zTWJnTGNGbWhtaVRnUkFzWUJuQTE1azlBRmZYR253WlZsV2JVa1o4ZnRVOHlLNENXa0txU2V0VTNlQUlJSFFzakFUMVEySjhLZ2pEZlJNaDUyNzUyd3lDQWpQUHRYMGxpVGVOeG9kYWRWM3R0aWhEbzNOSXVtMGpESzVTbmVGSlZ1ODJ0OHlUZGQvbm1yNnQ1a21JREtuQytQSXA0cCszaDdZV2M1YTJvMC9QMmh1di9IYWoveC8vM3I5SnkvRVFMK210QTY3Ym9zM1FkeDQ5aGVzY3VObWV5L3VENldQQ2xEMGdSSTVxcTRKWmNHTXdla0hHcXZVbzFaUHFScEVRK2gzajFIdnRxZnM1ME5Dd0p5elo5K1F6V2w1L3BRMDIrRlFvUmtWL1BNd2JzM1h1a0VMT09wOWloeU4xN0NRNUZudWE4ZldaU21lYUZ0dEFTbFRrWVlyUlE4MUtzSWh2eFdxQVNFQWcxQmRIZ2lpa3BEV3VHRERYd2xoZnJ1bmkvaGI5eWxRdEdUV2c3bnlVMWFSMEt3Wk5nMHJUczAybXZzaFVCREZUTzVhOEUrNEdxajV0TzI3YVZmZjJnb3N0N0hwUzRLMVFaNkE1eHhiaDhwQ1BzeC9WR0xQVDBaNWVraHlqcmI1VUpRbVNpYy9Wd2Fsckx0NnJGSURBUDVoUE5qVUwvT0JtbWxBZnRXQU5KLzhWd0h4cE92ZkNBaDhiMkhmNEF1SVpHRkVCbER1Y3p4dWt5QStyRUo4Z2tTbVRValJ4WTVpNXg1OTI3a1FaQ1d0ZXlqWElFVUd6bXJZR3paL2VmQitFMnFJdy8zZTdHdTBIK1d6eWFMZTE0Wnp4ZUdoMnB1aDV6Z3M0ZDNERDVzN29oMWdGamExSWlHQzBzTDR0Z2JJVXNJVUlWaUp1d2R3N2N5MHpoRG1tS3hsSnd4b1JlalZJeElNVHkva2lJVjh2bUw4QWs2Z1Z3YUZkSCtJWmhEcjUvU1hYY3ZhRHNETGlvSTc5b0ZIR1p0Wkh5dHhOaHdFaklKQzh0YmJWdU8xTEgzOGlvTUtDT0xwTmFWKzNlZDArZzc0UXJUTzlBVW91V1VUR1BhQ1RJdE5pOGVHcTRHSDJLYmNGUEhvWWVoTGtMREpHMVZhTDh1OHh2c2huVHo1Tm1jYTMzZGFTNVROaXNyZ3A4MUxyTU93MkMxNlY0UUxuRGQ1L3RlbkRSbHBYajhWNTZsbXk3clk3aDFnQ2NOT0VINFgvNFFVUGZPd0phOE05dmphSE9SWlNOVk83WlBPL0hoZC9JZHR2S3NubnVGV0FWYjd2NExudERKY1hCbXc5dWhWQ1JjOHJiZlhnTUF5OGVVTXNGdXFrUE1GdFZYekFyQ3NkN0UwSXdSNzFCSVh4TW9qUVNlL3h0dmk0ekRMNTYwUWlJNXJOdTBoeGc5OXdFYU5xMmNDdWNLNW40NkIvbXBBbzJXUEttN2RLVTU3NWxGQkg0VC9GVmMyRnUwcGVid0pvcWVXRlpwRDdFZXRRQnJTWTQzeDZmK0ltQ0NLRnA1dlRZMG81WGtYdkxvcHFnRHp6MnBLWWpNcVMxVUgyTXVQaExwdm5Qd290OUh3b3Bvd0R1TGFPWjE0QlNDMkZLS0JheXhnRFM0TUg4TStKV0ZRb0tkQjV1QkhaWjV5U21KOFptTThYbUxGWUx4c09wb2p0UEhlZk1jUURrTGNMZzlBY1h1bUltU28yYzVYU3oybmFZRmxVU01CQmFPVFFXZXIwRUdLMFdYbnFYK2IrOTVvd3pzRTlia2xKRE1haDh4YzR5YlhTZ1JsN2czZWJEa2FabFRhNXc1UHUwN1pPS1Q2ZDV2d1hhYU5NRDNDT1lyZlBqVStQZFNmdkZIeFhNUVNHc25wdGxMSFhNMnJYbjR0bkVSNm9HbWU2bkV4R3RPYVlEU054VmJ2dW9uWFlOd2dTQUl5MTJONVZMUmFQeE4xWUd4UUxTd3J2S2I0UFFjMXRJMTRUcWZrNzJBR0xtOURIMjZDcVZpWTVwbkNsYy9Gd3NwdjAwZUJOVWZjTi9qelkrRHhYSkxiUW1UWTl4VFBlZGZja0duclR0R1pZRHgwejJrQ2w2bWRuUTZQTU50ZFQ0S25tT0Y1ZjUxTS9TWEQ4NTNXUWZINUI1MFBOanNMNVBwVGZ1Y0h0WC95T3ovWm5aUGJzVFRuait6Tzd4d09RZWVQMUk3aUQ2ZVZldUlVaXhWNWJabi9VTGpJN1owbHFGOExsbUVaaWROdForWXRzd2tTU01XN1p3TEVQSkhoUXVoN0JJQTJ0d1NBblFzbXczTUZ5bTBraVd6VEdzQkdQTjNGTWwzN2tpcnhMUk1JOGJUYVBXMGNGNVFMWHFYWVJ6Qit0cC9jTXRENTN0WTZ2VGF2SXBKWlB4UW9Rb1lyZ0NsN09wV0c0aUtBcmEwQzhkZDBaVTk5aUYwNHQ1b1Vyd2hXTHRoc0FEWVFFb3FkTFEyWmMwL3pSVnRUV3F6YThPQXBZTG9RZGhRdUpOYWdnZ3lHbzRTSWlKNmpIV21CVVBQVXN5VEJSQ1FoWkVHMVY4UkQ4ZnJjVDgrL2ZUTDFnc21pWXZDM2srTWlpbVdQZGowSUZWQ3Q5YTBiMzM4TGdzUHVyV0hSSENyVkUrL2JPSEFUaXI4WGNkeE5UcktpcUlhQVp4ZTQ5bGRxQnBHNWVKajFNbjlJckd1djlTUGRjb0EycmZDeVJXVW9YYjZSRzZMR1BsTFA4MGFCNlZ0RGxpd3YrT2J0TVJxK3ZPUkNhT0ZUSXptOVpYNktyTWRhb0tFMjFCR2hRcjdRclVSaU9EaExFazl1R0NRWWQ3WVJGQ1RCWWZrUUMvUTlzN01TaUFWOThWYTRHTGFFVVd6YnFFdTkyR0hvVTdjWUhDSCtKcWpFQXFxRVpweVl6NUFzKzJud2VqUGFiM0RLUWlKWVJ6MHhQdVZVYnJGclg3YWREU25XTFVmRk5ZajJwZHNsQUpzd2hyTVJIbXMwZWN5Sy9MRDVTUzM5MnBEbmxYUkZ0MzloazhtU0htU01LUU03Wksxb2JUYnAzZ2RKOC8zSFY2ejZCcDBoTC9qZUhaNW9EY0c4TDNZY2k5ejM5NHkxSVQ1clE3Rnd0aU9DV1V5VEpKV0wrQ3lOZUg0VDRtQ2JTRHQwZUthdjhXYW9JL2ozcDBES0pzak1aU1E0aGIyK21DcEFzQ3d6Nm05VloyNURWSnZXWFpzVnJlRXpiTVVQTG5EWjE3MzZHQ1lJaHF6TlhtWVlMM3paeXRMa29ZS3RGWHFTTGMzRUNBREhtbHhya2pDM3VMbEpGcnVzWlU5TExCa1Z1b3NGQjdqU3lXNkNqZlp6ZG9oVndlL3RCT3I3SHRhd294SWVLN1pDTG1ZUGlPNFhxMk11MUtSSzlqaUdUY1BDaDBtZmFvYlpUblhMMTZFTnhmUTkvQW9EWVhmaE5YZzBHL1ZZOGRpdTAvcVMyVHY3cDlFcVdCQzNaWGRWdUFmRXhXS3RHTjdxK1pMdWE5ZWJkUytJYk1pa1djcWtwb1dON09VcGFEU2hTNHo3cWZnYjBOT0QyS1BHTzNRcDQyTjNwb1k5MmRGcENqUUNzTW1aUzhEK3dQdC91aVRadTA2MFlDOVllVnVINFBPKzJ0QkRsQVBXUTdlbm9FTzNoaVg3RzU1cmRGSDFFMWI3WlFVYzNnV3U0b2dmOE5YdHRRbjJDT0duWUljamE5Z1JaUHV3OVJWN3dGQWtsaWVLejljR2VSaWgzYXZJYUhTMDRhaENNaGJhTjMwZVM4Y0JWVHA1TEh2T2lCZ0lMV0xHd0JwcXEvQ2NpWTl3a1o4V2Y5bVhoN01EYjhxTGhCb0haanhWdEQwWkFuamJCbzBDWnhzQXhtRTVDbFNIQmJ1ZisvVG9SR000bHAxaHVCcU44MEZLdHVFQURkUis4bytMcUlxb1FGbmNsa3gzeFY1MlJzckNQdGlqVTZac1VlNVQ5bVVoWlRSeGl5blhFK3kzOHJ6MjArS0VXME5qMlZqQ1l2WThzdjM1TDhOaFdaK0NhNlhMR2trTERnUEIxSnplYlNWMGhSdHZEekdzRWJUdlBpZVBGay9ONHVuUnQrM0pVc3N4d3k0MiswQkdvY292c1k4b0JMQ2RzL0liem1FbnlOTDJ1RWVXMDhraGhWVTNFZnR1QUFUL3RrZXZ5dUVRd2QweXh1SEJJdllSN3R3cUJNQ1QrZmdrRzNyczVnLzhQeEZZSFAwd2pWZVlTekxwOVVYQUF1amo5M0R5QzVyT2o5d0FTRlA3d0M5aVJNSTR0K1ZYSFhPMzhPSjk3alFWaXZLd2MrQ0RMVGxPQVdNMHk5SFdoU0xISmducG5wdDlOdDIyRXU3WEkyZy8yS0pwMnhVZ0pYYXFDcVNQUjdwMk9DZG9LVktqZ2FYaHVleUd4NWt4bnVlcmc3ajN2ZCtwb3cwVFViQjRqeVNCSk9TalpaK2JBTHZNUFVIb2dLSjVpdlB4NzRid2UvTnlIbGg3ZmlaNWdLckE2WUF3blRhZGFwVTJ2NFZmUHhqdVJKVEEzKzBwT3QyMzdOeHA0QnJqOGlJZEpXRWRRbjZJWWc0bXdSNzV0SURXQTY3aStvemNJTnhJN0NKWElBbTBzdkJVb1RtOEFLTzZUbFVRSC9DNlN0MzBwYk5pR2l5RGhaWC9lbFpoSlRHTHg0SUU1eDZ3VTU1VzVSdjVaK21hSnlLWGZUQUJMT3RXY01HUzBaM29Qa1NneFJpd1RsUTNEREU2MWFNTjk2aDZoQVBnajJkcFFEWTFRZGpDRlp1Tlk4bDQ1a2duR2FDREpyVGNSd1ZhVDY0UjQ4Y2tyU3o3ODEvazNHQXpwdkxXQ3dJOVpSdFFaRHpnQmtBZ3I3WVhZNk5Xd1V2bU16cEcxcCtUMVEvTkE3SEhSb0RhUkpMR25nV0gzL0ZEYTN1SkhzUktMVEJDbjVOZHNzOFAzcXpibmd5TDRJSVZBWVh3THNPeHB3bWVPZzBjL2J2K2pJNVFTR1RKemJKTUEycXlOQUR1OUowZ2w4NVFnNXV0dWdXMmZXYUFDRld2UndIOVVoUjhBV0Z6R3IvNkdnUmRDOW1pWjMyWWRTSzhZVURJVTNQRkpwV3dRYnVCVG5FeGZ0UTJUbUJmOXNPcU9CcmtDTU0vcmFPSlJyUEdPSnBGMWcrMDNlSmVHRlN4emhJejhLd2V2NnhIa1RsS0pVbGtVZlZuSjRkNTNna3p0MTdIQXp4RXNIMlF4VjVjYXdxM0tOSWVSOGw0b0FKRkErZ2ZNTHUrWjRvSTRHTEhiTFJwMXJpWVBWRzZrNDVzaWYrZmNiSHg0Mlh6cjRITlFtVHM4YnNpVUptc2wrSDZvWWpkZFBTUmNwWWQzd0xuUG9UY1psSkxtOTMvWllWcnFuek95MVhhWWJiamhiREcrc1luZ09wSm5uK3JpdGYzVEJNcnNJM0hEbm1FWUJxblpVaUNONUVoajdLbndLQjdobXBlcktBelpqN0xXdUFjeDVCZW0wbXNqMEFXbFFwVzIyR1Rta0l5VFp0bFRwRTBETnVLWG10UFUzTmtJV3lneVZOMW8zcWEwN0lDZ0t0c1o1NE9RSUVrS0Zicm1LdDBsazB3ako0cFFoRm90VDIrWGl6RytPeGJyUXRVWURYc3JWbXdobURiTzl1MWdhVnFqU25mWEJHR1V4M1kwckZSOEc4NUVNVlZUUkN0YVNyeWpPcXhoT05NQWJxamZjb2Y5TDNaUmJPa3lZMUxnL1RCcVc3TGZ4OWwxeW5ZdTYwT09ydG05U3Fhbkh1MWRyVlZtMktSWG9udklUdG1iNmNmRkpiU05yR0lxM2pYVDY2d251RWhwcER1ZFlId2Q3WUI5a1c5dHBvSk85dTVRc1BYZUw2dUJJSTlJSW9lak55aEFNc1VFT3diRnNIVzN2ZEpaZUVpUDZNVnVHdFVpQVhNZHpJbkFtZHA0NGRheDcvWFAveXI4b2ZyZjF6L0FINWFPR1FaTzNiTnhSSWRINXVYblJBVFBVaTlaVFhiaW1yekRjc1RkL1RkQWhKcXNsRVhNL0ZrRG5jaGRqdkt4c2s1WVo1RTAvMWM1L1RhT3N6dVNKTFFHc1E3R3kvNTNHM2xhbkR3VGJXSEFsY2ZpdTlSRnBiWmk1MHQzU2lCV0E1WHNFbGFpWlEvSEx5YUVpY1FJL0JPU01iVmI0OVJrdFZRTnNlY21UNUlaTStKYW0rWUp5TFdaTmlGZ1dCaXUzNGQ0N0pjblRBU1RkM09CVlhEVnp4Q2hwSlZodzBzUHFObkM4blBJRkQ5K0g1c25yTjdGU1QyWW9aVk90Z3pyM0pZeHkwbGRCcEI5OERaUVRoSHZZUDFFVjNMZFJNWitLa2R5ZG1FU0xtS3N6WGdudWd4akRvSGxGK0hlRUdRdWhNdWNMc1Z6L1REMTBXcVQ3SlBNSHVBd0d1czVqd2RpUytXalVxcjR5SGFGUFNEMVJCMjRYeTFJZ2tzY0pxMlh6dThJSnlZK2swLzFjbC8wcDZSY2VRNjJBVkx6d0YreTd5SmNud2lXOUJ0V1B5UURPcStBQ0V5dFczOTFqUUxqWm1Bdml4aWtsOU5XN1pzSDBDdVY4ZC9uZUZVTDFqK1RSdTkyTndQN28wOW1SMDdkYmIzWjR0MlJCU2pNNHZWWmMrWlJRRGxSZnpOY2RtUkJiV3hsZk8wUXJXZndYTklXZDRndnV4Y0VqRyszRVU5SkoxQzJ1enB0SEpLUWhTVkNNM2hkNkROdUtYWFp1ZkFBVnN1QUJUZTN4NU9JZ25zZGxxeGx4emdZRjFCMWJXSnhPYVZJYlUyQUYxbDhPbGNtMlVhSlhKOWRiUC83SDdDMEx1cEM5TU5UN2NzaE5XcDlzODlGZzRvS3IvS2ZnQ29oUGlyRVhtYkxkNG11clZpR3llZGFUbzlSYkpQZmZ3YTdtSDdEUEFNUzdGRVhyRTB6c2dSMU5NNE0xbGd5cmVqUkNwNFI2Z3dHV0hWeHZUOHVoTFdxaTJINkJ0SDNqaUpZbHJuaVpzY29wZ3l3WUtZTTYvMzdyemFnUWhPYXVHdXNQZXE4czltdys2MVNpVW8xUVFkdDN2ZW5HTWh5R0tVNFpFbWhBZmsrM0s0Ymt2ZExJalowYWJLOTV5THoyN3dOWXNMKy9QWURrRkRPUE8wOGxTZ2NrZlZSWWQ1UnV2ZFVLU1hjNGxRbEl1QWczaUFONXhDY1NzK1grZ0FTaGpMNmw0SktBcGZmNVRYd1lLakttM3kzRjloTmVQRk84Tzc3R3gweW9WRE5NdkhoVUFBOFBYRng4RW5wMk9BeW50UzhDd2lhMmRGcnlQdkhOWEczMUFUNE5GVzRrRHpsN3lPRURYVWsrYWtBdTV6NmhFOU1Oc3F5WTI2c3lpMXY5MGpWL3piN2hkRTJrM3NQKzJ1TmRtejIyNHo1T0tNS1FHUDZpMFFLa1E0TzBLU3M4S1NVeXpEWitIRU16ZEUxYXBTL2VWYWV6bXZBQ09Id3J5WkMyNFFFSEFBMTEyVzZlSmRrSEE3V2VQNEdYbGtTWHl3NnJiYUFFdVlRenNML2s0SkdTdHN4elFndm14UHNGdDYyV0J1M1M1MFZjaXFHeXJ3Z1diTjJYNndnZDR0Y1dCWDRCYjdKbVFEc0RkeDhTeHNzMTRkVS9DdU1GdVluSzNlanZjc3paWXZRTE56ZzQ3VU8zVWgraHdxRTdlRFo3OW5kcW1kL2JBdnErbXhISlFYL28vTG9wbzduMkZuZkpsSXMxak9YTFBJV3c1Mk5tK2gwcGxlbDFQZ0xJaCtvWUp3QXhUeCtJZ2NMd3AxT2F2RmdHRnl4aFBtWXBSNGkzWEphYU5seDVrMFo0Rlh5cGMrbWV4YWFTZFh4MzVVczNaYXA2TXlXOVdobG1uS2RVWUlXdEQ3aE0rSVlTUDQ4dEFjNVFIUHRuOG1CaWVEZkI2Nm5vNk1XdzZKcUYzT25IM3N4YzI0REI1cDNReU1aellIWGtBOVV3SVI3Wi90RjlxMm01NG1hbitDbG5xMk9tdm1sTTUwQndRa1N3Tk5SVzVIWGpvRXhnaEpSTEpSSFJvL2xhUTRMU1F4ZXJwUjdKREVlKzZHZkhxSks4RWFXT2szTjNSN0taOTlScWZrdnBqZnhEYlE1Tnk4UXordUZ1L3RkSmRLR0Z6TzdKQ2tUWWZ1ZVlScDI4YzBMWHlmWXR5SzJPR05xL09Nbks0UVBUNjR0ekhnc2dFU0lac3dZdFRnYTYvNXM3bVp5bkkwUy9VZEhRc1lzQkhUdVRTZEtCUk12endxRFhDVWlPSTBwR3RHdTBZdE9CMjNnOExFSFlkUnNNVU9RYW04dS9sS0xPekdnWkZLRUtCb0Nna0ttS0VoZXFIb2NGazhiTCtVZmdOTG05dEdNa2RMd1I2eGs5NnpoY05lUjdmdTB4NDVaeGpsSkRzQnUwUitzMmpYLzFOTHpvWml6MWZ6Y2hKejlBRGp6T09ESFNFRDBpTXZ6V001R2NCMlFQZ3UyNGNtNmhrYkNlZEllZGxsazA4K3RTY2tyWE8wVmhOQmJYOTcwVTdKWnY5eldvOGF2SlhOQmFBQ1g5N1hZaVNyZG8xVnRzVkFkWHJOWitvQUxrSkljbTdIZXJJdDdjWFpRZXhOaSt1endSQVBGbVd5bEE1Y2w5ZVpzTEFTZXdEZmdKazdiVGZFdFZuMU90NW8rbEl5dHZkalVmM0tZSUIxNVJDRmJuY0xoS2ZwMlVvRWk1blNpelZsdDZKeC93RmdLOUJuaTlqNE83SEtvKy9IVXZWNmNxM0JvY3IyY3hTMFBJamk0QmF1Nkp3cW9BR2l1ZE83bThxemhwMGRkdzRlRE14QlkzZzhrWStZMXEzT01qdG4vcWZIYzJGZVJETjk3L0RJTVRNaDBQbDR0ZmJyY2ZJSThxemVWZ0RjUVBISjg1ZzVLSTREYWY5aE1jdjErdzk4Tkc3MlJhVU9YQkRUN3k5YWg4dmJyUGVZYUhQSEI1VXpWVE9ZMzNRalVDL3d4TTlCQWFkZS91NE9oU1ZzT2hIcjZVNjdPK2RXMkFvQjFTUEhJeVN5d3dDeXJqZi9paTBKNW0vYkNRUmludkdvZTZ4cGV0S3FlWlRXWjh1djlBWEZEbE5BSEhZMWlEM3M5cHVBQ2ZsTTVRWHg2dVhzOGVkTU1ZQ1BEWUpSc2UrMW5sRTNkczF1YUY2QWtpVG5OY0JpYmlkeHZhNy9HYk5pbHNmeDErMUNONFRUQVdEblViUTljL3ZCWGd4Ym83ME5KMSt6U084dzdXTHhiSGV3WGlldW51b2FYQmYvMWZ1M3ZZZ09vYjJuazRzYzZmWFp4SXc5Z09kRmVFTXhES0NzT1JqcU0xTGIvUDBSOXdoNmpyN3plTFdqOHNxcEt0NzJvaUNXbkxsY0ZZTmdWbWdlVEZoYXRNNkFyaGJ3cCtic1EydUtBSURQQ3Z6KzFNdm84anFIcFhvVjFxSVVELzF3TmNjZGpYYkt5MkVPQ1lXeFBmTW1KaUFycHNXTm52VGZaN3ozR3k2bzJEK2hVUnBLMEw5cXloY3pRNzZKMEt6aEdXN1dYWW9KTzMzeDVzdUZjd1RWNC9nak8ybUtReVQzR1ZudC9Ebkl2UFV6VXVaaHZhUGRPWksvZ2JkT3EvOFFSUTV5UVdVVGw5MmtaZThFYTJuQ0RTOThBWExIMkVYVnBTMTA0VFF2VFJPYk1DTUgrVTVGcDNsNHEyYXV0d0hKQVd0SURyUkdGaGFiUkFoNnpsb3RIbHR1aHdFNHdvYVZjemoyN3pxVnc4WEJEbFByQldCRGRBMUZhUFNReWZxUUdSeU1MUTVYdU4xWURqRXVqb1NkaWRkdDFwUGRXNlp4UDVEVzUzYVk1cjZjRTF5Y2grYzBSTXpaMDVwd0wyQVNvcy9scERNdmRZR2Y2UnlSOGdjNCtUSU56bWRtUzdrSjdjOWp5YkNlYUhjcksycWdzcmtQaWNqMmVOdjhCSm9CQndubTlqd3VjSlpvNmRHUkhpd2dsTVVzdUk4RldaYW5lSTU2MHJ1WmJ6ZzFCRHEwQ3JSdFdwandPcGpOL0M0WEhkd1NJT1d4TkdRNjQ4R3BWK3VLRURJZnJZRzJRcEJPT3gybUpUdk5VWUxXdTZPM3krZVBjTUNpdUwyZCtDQWtMK2lDclVNRURKaC8rZGdrRHhDY3pTQmIzUGxSdkZzREFYME85WlNpT3NuNjdiY25xdG54VkIydVBaSmptMEdiWlkzeGhkcy9zMlFrcTdNV0ljVDNHZU5iWWNoNWIvbVBPMlcxbG1lUFZnN2REaE1KMDJFYmM4cDZJUmJsdVR3MmkwN0E0ejRyZk5SQmprR1ZINTB6YjlZZ3JRN3ZNVlVNdDBKRUo4aEY2aUNiOVNLSVRXaGJTZW1hTHAxSGRwQUt6emlxaCtqQkk4eHp5YnhOVWc0N1RNMlRkV3hFUGh5TXZnN1pjZFpuWEpDOWl3WE1HWDcwZHNmdG9UNlJNdWhhaDdvNUUrQUk0dGN5V0JhRG41bUpQS1YxRG5xNVh5c0VpcjBGblN1S1o3NEhSTFBZclUwZzlzaFhkK08zKzR5Q3c3SWtKd2NmNDJFcTB0TDBQVEUvYk9IQjJlWit5M1ZzYnVPMGh6SHg0YTNacnV4Z09FemJUbTNyNW0rVmRiS3MzK0lsNXpUQ1ZJN3NhTTdObm5uWndmSjVFalJPOWlLQVF3VFpEV0t4V2w5M3d1RmcvNGFkNWNGYXhETzQ3TU9PaWhWd3pzZzhSKy96cWkzcmp6Yk5nZFhSbW1SRWFZMm42UHVGU2pnblNmWVF6b21PZmVRWUJLTE1ydmt6d2M3Tzhad3Z4KzZmNGZZUEJFbmNlQ1ZLejZsV1RhWXJtMjJwY1RSTEVkQTkycXYxTWM1VXVDSGEyLzcyQlJzQkxCMTJBSzZJSHBQTHhyUGY1QnhjQjBiWmVCZnRGTEdVekVjQjVGZGV0VTMyRUJmTDNSeGZpYnE2QVBJVXJiNjAyVDZmS2RLUXZBQXZZNDN0NXEwMnljVjVZT3FnWFB1c0REV3I5VnFOOEpYOTYva2kySVRWVUQ3VVlWb1hvUFRuc2ozL2J0eUNqY1lqK1JxY3l6cU54eTRiZWVYam1NbmJVMldnNHhxS3Ivc2RVWDJLUUswMnJzZXlwN3gzRUorUkNDOWZRS3ZsNUIrUmZHM0huZHNSbEFhM1F3QUltVjFMSnZlZTR1aGxRa1JHNzd3SktaZnNDSzN6T1FmVVp5cW13ekJ0VjBxRU5MWVd1RnltZHFxalZzRHN3ajNzRXV3dE5sbm90Q0t6L1U2ZkhVc21ET2RlR29menMzZWQ1czZuZGFyN0RHUU1XMGxlaUxRK2djTlIyRnhvSFIwQWUrQ0lRTDZIU2NWNER4K1lFMlpla2FrWUZySUtzaWNMYkFaZ0c3VHRSTDdPSTRHc0JIcFEwUTZpOWpFUm5VaDRTbWxOOWNWZnFmeDdRdWVRRGk5NFZRbkVEb29NVHRYYWxTRERHdG5QQ29JUTBWbHNBN1dILzI4OVk1d3M0ZmxyNkhZaWMydFNBS0R3VEh6R0E5QXMxeW51dENvcCtjd0lUL0JSYmF1ZTJSWk9Jbko4cVZ4UG1udE9XSnhKamlKYkJWVnhqdUNRWnFpQ3k3WnJaMCtZUFlsT1JBeUVZUFNpRkx0MS9nVmN4emwzc1RYa09aTzRuTTFvbC9RWkxzUnJQTSsvd25RdUhJRENJanB1Ymx1SnZ6NUJ6Sjc2aEI2M05OS1pYTzhyNnh2ZFk0SmtkNUJKcStLMGJydDh0bU0vU25Xb3NNT0RNREUwNEhKaTNGMkR4NFhQOHJFdjV1OGR3dU5RTHRNUDNUNituS3hiQ2NOK2hpdkRiL09aaWV1QUdRZE9aUDJJRzk1bzFmYzhwTXFTcHRQYnJmSlRnQVlmS0dOdmt2T1J0MDhibVJmMjBXMXRzTFR5UytFcDQzYWM0bk82L1oxSXZ1MHdSN1hFNnV4aS9ObVNhZjYrN1FKODdHaVM1VGl1R0pia2RVckhpcE8yVGpzaFB0dXp0VTFXUEVWa3htc2prR2NzSHRhNHpLOWpwR0F4WERraFpWOVdoTFBRWTBoQ1FmWlluQzl2bnNsR0QwZW5UbzhOTFNzMmVMQ2d0aUVMRmtRUE1CcS9RazNFZEtFU0I5eDNPR0cvT3F6YmMrVTdPL1FNRW1wOW96TTVZWFZPN1FrZTNUa3NJVTRmSXdNOVpJTlptekhxWlJkZXQzNFpXVVUwSFFTYXgwSUFFQjFPakhrUjhmRkMzT1huK1ZVek5iT3dUbk0yZ2VUSTdHWGRuTlBQVnRXajkrMUo4bm1FVHNzZTFUVHNPWW1pcVp6Snp0MUNVamJFa2xsSWdoSnJubWRiRlFkTFhlTThtQ0crQ0NzNzNWczhQVTU5bnRIMEhpd0ZqKzNudVQwck42MkVocWNpcU9lcHNiRlhRV1JDaXd5dTNjZFZDSVBnekhTS2w5VVZoQS83alh5YUZWeDNueUZ4enVjYkV1RkRhZ2VDRWZScHhyS0xHTWNHMWVjOHhvVkZDNVpNcnMvMlVnTEhaOE5kUHNPYXNzWS9IT0FTcEp5OXJRY2RoYy9zY3hoNVdSVDlBbGtlakJJQzJGckhyZkxTUmNDUDh1VVd3bWtuVEU2T1YyRFk0Rk9ySmc2ZHJhZEg4Q3ZYcXhjL25nd0F6TTJuWFpTTnBHdnloR2FDZ3FCS1dKNHdsQk1VWHJNYVBsZkRNOTA1TGJua1hVdTVIQnkxYnQ0aG9JbWNRL1FZbWp4ckg1QWRic1daeUNVNUJzNEhqSG1VTzgvTWhtenJ1TWhrdytBTGh3VG1wSnJyZzFUcEgxODFUTE55TVNBZklZVHJObitFSllSMENvbzl3Zkt3YTV4blJ0Z3dOQ3FSRm5yaTBIbUhQVXJoY3YyaVUxb2NnMi9lSHZObiszQmNaektrZFVveFhnTGtaaGNNbE9xNE0wejc0azFaTTBjcVA3YUdtdlpYZ0htNHBFTngwMzA1VGVGaytlNHpzdlI5YlNnYlUvVk9qRWRzRnd3eTN6YTJuMmVaZk9ZWjRKdXc1bUJ2RzA3eFJNZjdRMnhZUkNkZVdwd1JnOGZqenVEMEVTTFRtOE1qcndvdGRFaGxRK1pEZjE1UFU2RWh6WW5oMzJtRWRjS01GZDNiaWdVbnA4WDcxTkYvdGpsTE0xZ09wQ2pVYUp1SFJIUi9aMDQzR0dDM3lMZjluOG5RblJFTUhpNmZLdjc5eVVCQXRNVUYzMWE0cWJxTGJJUzFVN3R2SE1YaVYrZE9PdExENmhOWUtpRS96dURKT0QrTk1qWjdQczlQMTgvSUgyd0VzTCtjWWdTWHh0aWpFOEVzTlR3dHpxOEEvZDIyeHovMkNIVDJ4T1lXSkNPT0MyRUdYKzQvcXNhSi9RN2JRUUJab1ljR3VsV3UxZW92ck5FNXJ0c3BSNThZYk1VTDdLQTZvL2g5NjVscnVUQk0xTllHTjg4QW5EdGdBOEZobVFqTjZTRG9CZVpEQkxPUEJiRGpIRUx3VmQ1Y2ZZbU90cFVDVFFJMzJtZEkwaGZTWlcxdlA0L1ZJYXBEeGw2azludkxBQk9vS2ZLdU03TkNQTENqdnlLMVJPcWViYzk0N0FoU3Q5L1h1TzJVS0krak1ud0NEalF1Mis0RVBLbFdOTnRuMnZJeXZFa3ZkcVRFcFE0Tmp0MDd6LzBnNE5qQ01CMitEblREbUJEMFRzZjNJVkJ6Z052UTYvWXpobE5hcnJwU2xVR2Z1K2ZGelFIRjg4VWc0OGV0b1dBOGdCL3dNenZNYXpuVi9BN3d0cXJxN3M2VWVuMTJoRjFRdk5kdElWcFlCTWtKMDZzRlRNUlJMN080bGhVMnM4Q0IySFlHYUVxd1QvWGZhWUh5Y01peCtYMzRrTUpNSkIwT25MYzQwclpyS2ZnSHJYRldnNmpOKy91NEhNVDY0Yy9iS0dlV0RRSmpnWXhqNzUwNmhpZ2tERm5GQTRLbWVWdDVERmU4UUJZWTlMZDZJTTVqOEhiVHpQRU4wNjBkOHdVb1BYRWtmaTBQUFFpa1FQN3kyUWpzMm16Qi9GVktsbnZZSHg1OE9BOXMzUHlTVFVmdVI4RjFMQTgzQ1ZpNE13ZEwzMjl3WXBXeDNqNituL0tvYXVNcHJOYnVzbjZlOFRNT2hYWFdQUXI5Y1FkOUxCRHMwVWtuWnBudDA0QTlxS3pZNG9uYThhelRxZGQ1WHM0dzdhYXpRSXdrRkNEcEFCQWd3cm1jcitjMHNwWFp6SXRtdUJzUm9Eb1VHZzJmNURhbllkRTVFZEZJTG1xZGd2Qm1kdER4ZE1OWDFXb052UTl1RVFpYmRhREpQRFhyTFVMYi9EREhlU2JhZXcxand1TmtmdmppeWF0YnRHZEJ1UFhEeU5IN1Y1bmM1OEQrNFBTMUJ3TDVGb2poNlpFNVU3UXh5TjVmSDVQblU4aFlUWjhRVWN5ckJ5S29UZFlCSCs0UHdZbkk1cU1lc3pPeWJTYTFOc3BzTVNDVG5NZCtmVUt5VTM1OElwVVBFd2lPa3JXYi9OVGhZMUNGTlZiazJGUHNPQjNFckpWcWIvSTVLcGFQeUt6TE5aMUFjMG9kbzQ5dXlFRlF4cThRQ2ZlWnhEekVUWjlUMXFXekRuVGNIcUM5ZkZyMGpNMG42T3dGclFsT0RTdjJmU1ZyVnNycGhNVkpVTmRueUNDWTBJRk1JOTZRMkp3ODNqN1BsNHlPV0s4UmVmTEJJWi93dFh4U0hqYVVtK29aNzdRckpXUHhYRTV4VUN3SzFBZXNiS09TVGZHT2ZQbTZSUG5NZ2NWNnpOVVN3eTJzSGlYYU8wdjRTSU1YT2VRU05EeEowdFA0ZmFiYXFmRmgvc3RhSkFJQ3YvWTRienQ5VnhZcEpGVU8wWFl1VHpxNS9ua291L0hBMU94SkxIdjJ2SjIwQjdOcDVyUEdNdkJ4WHl4Rmd2b3REdzZYQitqRmJzKzUrbGlPM0xmUUdlZElwK3Jlc3JHNTd1amMzWTNkT3NZZlkrL2V2b08xNzh2QkVuZXlCQU1pNUVBUjliUWRMdU8wY3ltOXp6UlZyTXNEVHNOZ1JtNTZHL2JRbUNZN1FZUEZ2c0VXM3B3TEpGWjlUa2FXSWpoenhFZnZRV0tjQXUvNGNYalZOZ2ZwV1NGclhXZEJxdnVBaDRvZFh3ZzZmb1hQNVBxd0creG9Cbno2dElSYnRNOGlPYVNwT2ZmVXNibU9rbmpPdUl6cHVmQWN5cmZ3NXNzUnJ5eUpGUFBYczlNd3lHa1R1TTg2ZVRFK1lOYjV6NDRyOGZ6RWRvVFB5QXY0UFU1WG1WMTI0T2dDcTNkdU1MbkliQ3RvKzhnRkFGbWsxRHF6bzN6b25PeUxCZVJtcGFNZVJjRkp6VDZaUHZ1ZWk0MW5TNTdYR3UzZ3VZL1RXUUJUS0hlRlY2OXRUWmtIK3lvbWkyek9jOXVlSGNiblF4LzBGeCtPMWEvM1RDaTExTWhPWUdJSHJMSDdiQ2Vyc3RsREo4ZFZKK2g2ek9mRFBSd2xrcDA1V253S1RQSXVUZDFjSTdwWHp6UHlUNWxlTmx3NjNnSkc5cUFDbEhDUExmdFFpczhDaGpQUHp3NDU2MUVjVnBsZlIvWmUySWxQbllPYXhBd244M2daY0lnb0MvVDZ5VnFEYlBZOG5LZGR6V292K3NOS0I0UFI4L2o0Rnk1cytyQTdhM0Y4b3BaMW15bWNaRngwM051cHQvWXhkUDB0VUg2ODlSMW5XcFdITnV3S011V1IwUU1ITTY3cnUwLzVLZnZ6aFZWT1Z0L1NONURVSjhRNVVNYUhQVmhxTk15VW1PcUx4QitXbVkvM3NZY0llN2EyWFk2WGRpaWliVzQ0Njg5TVpHd2F4dnU1SnlPY3h6anNiZi9UWTE3Zk1qdWJDeUNiem1tNG13ZWI0enFSTy9sWVllaHc4ckdQeTlRdzZINnlzZHNIMStLMjU3QTIyaFpqaDJVeGt4TjloQThNRVplRStEcHJiTmtza2FNUDgrMCtvYzdSVEVmd0xpdkdpSVJlQ25iaDhZSHN2cHN5Y0p3NkVJc2Y1VlBTYzVsV1VMZjZZTHZuSEdEWWVLMGNSSjdBVHg3aUJjeUwzZlJKSXc0L3hQTTlLWDBqN2xyc3V6bG5sbGREeXZpSWhlYzJMWTI1ZlBGTUJ3L0xUcjVnZllSVGh3ZzJ4QWUyMnRrRTZPemhVK0hXY3Y2NG8rUzBvMjFmb01tamU1eEhlNWJ3Rkorck1RRmx4MWg5QkhNZit1UmpIR0JSK2Rlb3FmdjB6NWlZUFg0TUhqa1N4L05xV0dVajJHMkhERHJnS3hOcFlYSGRacFhpUTVrTHVPQ2NzbWJ3UlFJYVh5eXo4RFBmZW9tODZWYy9JNHJxdGF3Zk5lcTBVajJBM2JJNHgwYzMyYm5zUTE3c1FEMVB1YktwR05zdzd6ejJSYlNZUmhXSG5wcXQ0cmN0bXlaOEVvQW14QmI1WnJxYmtCM25NeDViYVh3aXhPY2pIaDNEaVRwc0Z1Z0NsczJ1TXF0d3k3YlNCRG4zc0RoOEVnQlB3UGhUVHlQQjVQbmRuVjdGRXZ2L2VaOHhoN045N0NLTVNDR2ZBRnNKUmg2Ym5UR3JZenE1UFh1c1daMkNHSWZQZDRJRi9yM2hrZFc0dGtkNFBuN3JrWUdicUhMZUVPOEM2ekJZRTJuRVRaT2dUanFSUVRzSUNYZUsyZWVjZHNjNnhMYXVVMVdyQlppdE9nUGJhMjFPRi9TUXp2RzNWa3hndVh0R0I1V2RweUNkVnY3dVdDWVRVeUxzZUM0SFdGcnRZTXRLZEFvUWlzUUo2K056TkN2WThaeVJLdzQ4eFFDaGE4Z2NPS05aVkN1S2drOHBmWHpDUUZYS3J2QTVFOThPMmV6akI2cjl2aWpmNVROL0crSzFPUHk2TzhvU1VuSTdHcjlEZTdGOEkrRHNubVdqOVQyZnh5aUxISW9GZ0krNjhKNTc0U3hPM2E3TDU4UDRiSjBBL3IzcXBTUkIvRXp4ZVJxUmZRSVR4aGlBVnBqRm1EN2NiSnUyOVJqZmt2MHpYdTA3QngrTzV4QytmVzVXUHVtb2Vjb1lFVjhBY3J2MlBMTk1rR2Z3UlZaS1VNU0pzeVVpSGpIRzE5bUhxVHUrM3g2VEhzNnpTYUJld0lmRCtvb1BkQTcySEgrVnV4eldKOW1wQnV0M2pIeTJyUXpGM0Nyb2FtSWZtTHVkTU1DTlFkUnNyL0E1ajVzM3cyQlp2ZXZNQVNrL2xjU09MRHpQSjRXT0wrTkdzUmx5cUR6ZlhqMjFEejQyT1B0b2ljZmtjYlNtZkoyejI0dWxIbzdFNWlxUWloYWtUeCtUR3BEZU16MUMyVWY0ekIzMTVmTlVMUFc1MitOanFaOTcrMXluWUJIVTR5TlRuVFJ6cGplaWMzMEdlZmw1eHRncEgvTEpBc1FZNDd3ZGFXQ1ZBNEpXY1RUcE1OM3R3VFQvc211N1Y4KysrQzdyQURrRTl4N0hDVmh3OG5wZzdJT3BIWFhvOHhwOXFPT3AvdkZoeUw0WWszN1UwOUZCa3piSDNhZ0RCeHV3V3QyNE9rYTFOV0FsajBJUkZENnphWllHZVhyaU9jQzNXSi9scmN1V3UrODg3YXlmcnY3aGdhWGo4cHkrVnlKbWQ1cUhJYzJXcmpqTXdHTWdLQmZVMk5vOHkrVXIwdmkrY1Z1ajgrVjRnMjBCazArc3c0WTlodVhDaVVHT1RYZnFHcFRaSnlGNStqNWZuN3NtZjl2MjR6cXgvd1Q0dXVwVlBISWdOSGdXNUlGdVA3TTl2b1JMZmRWSEQ4R0lBZmZzQWNSOUd2ZVREMEFiQmRtSEEzeVBlZUVYTGRLR200cjdvWjdQWEVmOEJDSnZuUnF2OXhtTlZ0MUdIdzU5aHAxakg4UnRLMVVzaTJGbGZZYnRERDZwd256N3poSEVjNXp6cnFkUURCYW1oU3pwNTVuelphc1p2b0U1TGduazRaVEpzMXZsZkVuVGNYenoxSmRFSDV4bWtpRHlCcTlEOHJGamJJY0ZsL0xPeGZXYmc3UW15aEhXRHdTQno3NC9icWY3bkdPczZ2VTB3UWZOQVJuT3JMdHQ1YWhxNi9jOHhXUGVPVG5jczBXVGZGWXIzUjRwcHpPZ1R6ekJSeTZybkFDRTg4eTBKdzJXTXFtbmkrTjliYWF4ZThDR2ZvbUN3d0xzL2ZnOGV6WVZQQnhrcml0YWdXQ1RnZ2N6UFR2RTM0ZHVKcCtpbUIyd2RTcjFYMnZaQUVGajZEZUF6V0theElkd1B6QTN1M2tpb3VNNkQxSktYNXFlZk10S3VkSmxocHRvMkgxTXdadWR0d1hFcXVlYzh3dWFzV09BckdPKzY3UWppK1crUGg5Lys0cVRGaVcwRGlCNlNOS0cwL2h0ejBXNHdwaTJSbDgzdTVFUzhnUGR5Zlo0UG9pUkdidmlaYm1sTllhV2ZGb2xpTEJZcGpTZmQzWUY0T3VFRkx1WDF2REp1MnZZOHUyRDZ0LzJaV1FJZHU1VW0zd1ZDOVc2YytSdDhiUFpHbWRqeVozWXhCcmJNWHRiN3ZuNkNIRWN3L1A1NnBBVmJLbFpPa0M0NUlyUzlWa01kZHVVWjhORXNOM2t0a04zd2JibDdHQnBRd0MybmcwK25vbzQ4amlhcjhkajdMVUFadjhQUFBmdkVhNk8wVTRBQUFHRGFVTkRVRWxEUXlCd2NtOW1hV3hsQUFCNG5IMlJQVWpEUUJ6RlgxT2xvaFVGTzRnNFpLaE9Ga1JGSExVS1JhZ1Fhb1ZXSFV3dS9ZSW1EVW1LaTZQZ1duRHdZN0hxNE9Lc3E0T3JJQWgrZ0RnNU9pbTZTSW4vU3dvdFlqdzQ3c2U3ZTQrN2Q0QlFMelBONmhnSE5OMDJVNG00bU1tdWlxRlhoQ0NnSHowSXlNd3k1aVFwQ2QveGRZOEFYKzlpUE12LzNKK2pWODFaREFpSXhMUE1NRzNpRGVMcFRkdmd2RThjWVVWWkpUNG5IalBwZ3NTUFhGYzhmdU5jY0ZuZ21SRXpuWm9uamhDTGhUWlcycGdWVFkxNGlqaXFhanJsQ3htUFZjNWJuTFZ5bFRYdnlWOFl6dWtyeTF5bk9Zd0VGckVFQ1NJVVZGRkNHVFppdE9xa1dFalJmdHpIUCtUNkpYSXA1Q3FCa1dNQkZXaVFYVC80SC96dTFzcFBUbmhKNFRqUStlSTRIeU5BYUJkbzFCem4rOWh4R2lkQThCbTQwbHYrU2gyWStTUzkxdEtpUjBEZk5uQngzZEtVUGVCeUJ4aDhNbVJUZHFVZ1RTR2ZCOTdQNkp1eXdNQXQwTDNtOWRiY3gra0RrS2F1a2pmQXdTRXdXcURzZFo5M2Q3WDM5dStaWm44L3hydHlZdkRSZkc4QUFBQUdZa3RIUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmtCd0lSRWcrc2gwT3FBQUFnQUVsRVFWUjQydXhkZDNnVTFkNSt6MnpMcHZlRWtJUmlDQzBRYWdoZE9xR0lOQkZFVWNFR0lvSUZwUGhodVY3QWNtM1gzcEFyS2dvaUlDQWl2WWwwRWtwQ1NPOWxlNXZabWZQOXNUdkQ3R1pEVVVUVS9UM1BQSnZkemN5ZU9YUG1uZmZYQ2FVVWZ2bnRZclBaVUY1ZWp1cnFhdFRXMWtLbjAwR3YxOE5rTXNGc05zTmlzY0JtczhGbXM4SGhjTURoY0lCbFdiQXNDNDdqd0hFY25FNm50UEU4TDczeVBBOUJFT1IvRTBFUUlOOG9wZUlyb1pSQzNBQVE3MWNBb0pRUzk5Q2xWNi9QU0Y1ZVhseFVWRlFUalVZVHAxQW80aGlHaVdFWUpvb1FFZ2tnQWtBb0lTUVVRQkNBUUFCYUFHcjNwZ0RBdUk4bkFPQUJzTzdOQnNBS3dFSXBOUUl3VWtyMWxOSjZTbWtkei9PMUhNZFYyZTMyNm9xS2lvcjA5UFJxOTNHb2JHdnduaERpL1ozNEdRQlFRa2lEVjlsR0dZWUJJUVFNdzBBUUJLalZhakFNQTRaaHFFS2hnRUtoQU1Nd0VQOVdLcFhTcTdpcFZDcW9WQ3FvMVdxbzFXcG9OQnBvTkJwb3RWcG90Vm9FQlFVaE9EZ1lJU0VoQ0E4UFIwUkVCS0tqb3hFYkc0dUVoQVJvdFZyL3pYUWRoZmlCN2JjSnk3SW9MeTlIWldVbGFtdHJVVjlmRDcxZUQ2UFJLQUdhMVdxRjNXNkgzVzYvSXFESndVeStDWUpBUklEekFqTVBJQlBCU1E1UzNvQWxmMTlkWFowYUhCeWNvbFFxYjJFWXBpVWhwRGtocEJtQVpnQUNicEpwdGdNb3BwUVdDWUpReVBOOEFjdXlGM1U2WFg2elpzMHVlQUVjdlF6Z05RQkFFZmdJSVI1QVJ5bWxTcVZTQkRZSjBPUWdKOS9rNE5ZWXdBVUVCQ0FnSUFDQmdZRVN3SVdHaGlJOFBCeVJrWkdJam81R2ZIdzhFaElTb0Zhci9UZVhIOWorSENrcEtVRmxaU1ZxYW1wUVYxY0huVTRIbzlFSWs4a2tBWnJOWnJzc29IRWNKN0V6YjFEekJXWWlLeE9CVGJ4MlBvRE00MzFlWGw1c1FrSkNCNVZLMVVHaFVMUW5oTFFIMEJhQTVxOThEWGllZDVTV2xwNU5Ta282NDNRNno5aHN0cHpjM055Y0hqMTYxTHFab2h6VUJEZFQ4MkIyM2tBbkFwc0lhQ0tidXhMSWlhQ21VQ2lnVXFrdUMzQmFyVllDdUpDUUVJU0doaUlpSWdKUlVWR0lpWWxCZkh3OGtwS1MvRGVaSDlodW5GUlZWVFZRT3cwR2c2UjJ5Z0hOYnJjM0FMUXJzRFFpcXAxZWdFWWFZV1VOR05uRWlSTVZIMzMwVWZlQWdJQnVDb1dpS3lHa0M0RFV2K08xNEhrZXBhV2xhTmFzbWZkWGVZSWdIT000N3JqUmFEeDJ4eDEzSE51OWU3Y2dBenNKOUFnaGdqZWpjd05iQXpiSE1BejFBWEJRS0JUMFN1eE5EbkFpZXhNQlRsUlB3OExDR3FpbmNYRngvcHZPRDJ4L25CZ01CcFNWbFVrc3paZmE2Y3VPeG5FY1dKYVZHSm9QT3hxUjI5RjhNRFBpdzE0bXNqTHl4Qk5QS0pZdVhkcEhvOUgwWkJpbUZ5R2tKNERnZjhJMXVReXdlWXVaVW5ySTZYUWVNcGxNaDJmT25IbG96Wm8xVGg5QUo0akE1Z1kwNnNNdVI3MlpuSmY5alhyYjMwUUdwMWFySllCcnpQNG1WMDlGOXRhMGFWT0VoWVg1YjBJL3NGMC80VGdPSlNVbEhpeE5yOWRMTE8xcTdHaStuQU1pb0hteE0wbk5sREV5eUlHTVVzclUxOWUzQ3c0T3ZsV2hVUFFqaFBRSDhJOWM5ZGNBYkEyZVU0SWc3T1U0Ymw5VlZkVys1czJibjNPRFd3TldKMmQwSW51VC95MDZHT1FnSndKY1k4NkZLOW5mUlBZV0hoN3V3ZDZTa3BLZ1VxbjhONlVmMkg2ZlZGWldvclMwdElGelFLNTJpcUFtc2pTUm9WMHRvUEU4TDZtWmdpQTBDbVpXcTNXQVdxMGV6RERNWUFBZC9GZm5kd0didDJRN25jNGRScU54VjNSMDlENjR2TGlDTjlnMUJuSU13MGpxcWtLaG9GY0xjQ0tERTltYkNHNXk5ZFRidVpDWW1JajQrSGoveGZjRDI3V0x4V0pCY1hFeHlzdkxVVlZWNWRNNWNLWHdEUysxazNnNUJ1VHNqSGd4TkFuTWJEWmJsbHF0emlLRVpBRm82cjh5TjBUS2VKNy8wV1F5YlkrTWpOeU9TK0VxUGtGT3BxNTZxS29paS9QeW9OSXJzVGR2OWRUYnVSQVhGNGVFaEFRa0p5Y2pLQ2pJZjdYOHdIWjFVbEpTSXJFMHVTM05sM1BBMjVibWc2VmRDZENJdDgzTVlyRU0xR2cwdHhGQ1J2bkI3S1lBdVMxNnZYNUxURXlNeU9ROFFNNmJ4Y2xBcmxHQVV5cVZqUUtjbkwxNU94ZThiVytKaVlsKzc2a2YyQzR2SnBNSlJVVkZLQ3NyODJCcEJvUEJJeWJ0S29Oc2lhaDZpdXJtWmRnWm85UHAwb0tEZzhjeURITTdnSGIrSlhsVHlsbVdaVGVXbDVkdmJ0bXk1Umtad1BFeWtLT3kxd1lzVHE2bXVvR05YazF3cnp6MlRmU2NpdXl0YWRPbWFOYXNHVUpDUXZ4WHlBOXNEVm1hNkNEdzVmRnNMSVJEQkRWZmdDYlBFcEFEbWdobW16WnRDaGc4ZVBCRXBWSTVnUkF5ekw4TS96b2lDTUkycTlXNjRhMjMzdHE0YU5FaUd3Q25IT1JrTEU0UTJadTNtdW9WSHVJQmNDSzROUllhNHUwNUZSMExmdmJtQnpZQWdOVnFSVUZCUVFNSGdjalN6R2F6WkV1N1F1YkE1UUNOeU5WT3ZWN2ZJU2dvYUJMRE1KTUErRmZpWC95WnlISGMycEtTa3ZVcEtTbG5aYW9xNzYycXlnQ09YZ25nTGhmWXE5VnFFUndjTExFM2I4ZENpeFl0RUJnWTZMOHkvMVJncTZpb2tGVFA2dXBxRHdmQmxlTFNaS0RtRTlEY0FiVWU2cWJWYXMxU3E5V1RDU0VUL1V2dWI4bmkxdW4xK3JYUjBkRTczQXhPRG5DOEx6VlZGaWJTQU9BYXM3MzVpbnNUVmRQWTJGaEpOVzNTcE1rLy9wb28vMGtueS9NODh2UHpVVnhjaklxS0Npa2x5bUF3d0dnMHdtS3hTS0RtY0RoOFpnK0lnQ2F6by9rRXRMdnZ2bHZ4MFVjZjNhMVVLdThHME1kLysvOTloV0dZY1pHUmtlTjRudDl2c1ZpK0hqeDQ4TnJEaHc4N1JaQ2psRGJ3clBJOFR3VkJvR0xpUGMvelZCNFM1SFE2cVR4Y1NOUVE1S1lROGFFclBvU3RWaXZNWmpOTUpoTnV1ZVVXS0JTS2Z5NWpLeXdzL0VlY3FORm85QWxvb3NkVHJuWmV6bzdtUytXVXNUT3lhZE9ta05hdFc5K3JVQ2ltd1I5ejlvOFVTbW0ydytINGN2MzY5V3NXTEZoZ0pJVHdNaWJYUUUyVnNUaHZCbmRaKzV0Y1BSVURlOFdjMHlaTm1pQTVPUm1ob2FIL1RHRGpPTzV2ZjVKbFpXVW9MQ3lVdko1aUJvRzM2dGxZR0llWDJrbGthVThTcUdWblowZTBiTm55Zm9WQ2NUK0FGUC90N1JjQStYYTdmZFdtVFp1K25qSmxpczVMVGVYZDRDYXBxTzVnWHlyUFFmVldUMzJGaFhpblpFVkhSMHRlMCtiTm02TnAwMzllNU5EZjJzWkdLVVZ1Ymk2S2lvcWtnTnZMZVQyOU13Z2FVVHRGTHlkREtTVW5UNTRNYmR1MjdReUZRakVEd0MzK2U5a3ZQdVNpeldiNy9LdXZ2dnB5K3ZUcGhzc0JIQ0ZFa0NYZGUyY3VVRjhaQzQxNVRjV0EzbWJObWlFMU5SWHViQWsvc1AyVnhXUXk0Y0tGQzVMNldWMWRMWGs5NVFHM2plUjVFdTlVS0M5UEo3Tmt5UkxGa2lWTEhsUW9GQS9DSDMvbWw2dDcwSjYxV3Ewcjc3ampqdFZidG14aDNRQW5xYWd5Z0JQa0hsVHYxQ3lWU2tVYnl6ZVZxNldSa1pHSWpZMlYxTktVbEpSL1RNemIzeExZcXFxcWtKK2ZqNUtTRWxSVVZEUUk1ZkJPWHBmYjFMeFltb2RqUVBSeTJ1MzJPMVVxMVNNQWV2aHZWNy84Qm9BN2JEUWFQd3NQRDk5SUNPRzhBTTZid1ZGWkJnUDFabS9lTVcvZUFiMWlTRWlUSmsyUWxKU0VXMjY1NVI5UkR1bHY1eFV0TEN6RXhZc1hQZUxUNUxtZTNzbnJjcFltT2dya2FxZk1qc1pZcmRhQmFyVjZwanZseVM5KytXMXNncENNc0xDd0RKN25SMVZYVjMvV3BFbVRBM0tBOC9haThqeFAzUUpCRUtoWC9UN3hQWHg1VVVXeml1aEZ0ZHZ0c05sc2FONjh1Ui9ZL2lyMnRQUG56K1BpeFl1Tk9na3VVOW0yQVV1VHE1MzE5Zldwb2FHaHN3Z2hEL3R2Uzc5Y0wyRVlaa1I4ZlB3SWxtVS95c25KK2J4ejU4NzVNb0FUdzBSNEFJSWdDSUxZMzhLOVVURmxUdzV1M2lBbk9zQzh3YzF1dDZOMTY5Wi9XN3ZiM3dMWWJEWWJ6cDgvNytINWxNZW5OV1pQODJacGJsQ1QxTTU3NzcxWDhjRUhIOHhXS0JTUEFVajAzNHArK1NORXBWTE42TlNwVTViRllubS9iOSsrbng4L2Zwd0Z3TG5aR3lPcXFKUlNxUmltMjRGRjVjVVZ2QUhPdTFxekhPQllscFhBN2UvWVNPWXZEMnc2blE2NXVia29MQ3lVQ2tMS3EzTDRLZ2JwZm9ySlFVM08waGhLS2JGYXJVTTFHczNqQUFiNWJ6Mi8zQUJwR2hnWStQeXZ2LzQ2b0xxNitxTW1UWnJzSllTd012V1U0RkpPS3ZWaWNIS0FvNzZhQXZsU1Q4VW9nTlRVVkVSRVJQaUI3V2FScXFvcWozQU9NWW5kVjRWYldTZ0hFZW01RDViR2xKYVd4c2ZGeFQzT01NeGMvNzNtbHo5QlBSMFFIeDgvd09Gdy9IZkhqaDJmWm1WbFZiclZVMFlPY0s0SzVrUm9qTDNKVkZWY2pacWFtcHI2dDNJcS9HV0JyYVNrQkhsNWVTZ3FLcExDT2VUTlZYdzVDYnhaR3MvemNwYkcyTzMyQ1NxVmFtN3B1ZU5keXgzQnlFaHZkVk9kYzMxOVBXcHJhNUdhbXVwSGdMK0E2UFY2Yk5xMENRNkhBNE1HRGJvbWc3MWFyWjQxYk5pd1huVjFkZTlIUlVWdElZUW8zT29wSjdPOUVibjlUUTV3TE1zU2xtVWJ0YjE1TXppTzQxQlRVd096MlF3QWlJaUlRT3ZXclg4MzhTZ29LQUFBeE1mSFg5WDVWMVJVd09Gdy9HN25CdFBvTjZ3ZW55eDdFb1A3WnlJanN6OGVXZmdxeWt6T20yTEI1T2ZuNDh5Wk14NXhhcGZZbWc3RkY4N2cySkZma1oyZGc4TGlNbGhzZGpnY0RpSUNuRHMxaWdpQ3dBaUNvS2lzckV4Mk9wMnZxVlNxL3dIb3V2by84M0RQd25kdWluTTlmUGd3M256elRRREFrU05IOE5wcnIvMnBZL2c5d25FY0JnMGFCSVBCOEtlTjRYckwyYk5uWWJmYkczenVkRG94WWNJRUZCVVZJVEF3RUZhcjlacVBUUWpwSEJrWitSN0xzb3QzN05qUmpGSWFRQ25Wd05XWVdrVXBWVkJLRllJZ0tBUkJZSGllSjA2bms3QXNDNVBKQktQUlNFUXZxRHlQMUdBd1NGV2lLeW9xVUZ4Y2pBc1hMdURRb1VQNCtPT1A4ZmJiYi8vbWRmYlNTeS9oekprekFJQ0NnZ0tzVzdjT0sxYXN3S3BWcTY1cVBXelpzc1huLzE3cmVtZ1UyTFo5OEN4ZS9IUTNSazUvQnYrMzREN2svZmdlSG5uMjR6OTlJWjA3ZHc1bno1NUZmbjYrUjdWYmthMVZGZWNodjZRYXlzQlFoQVFIZ0hOWVNIMjlub2lNemMzVWlDQUlJa3NiRngwZC9SVWhaT2JOK05ULzhzc3ZrWkdSOGJjWWcwcWx3dnZ2di8rYnVpN2REUFBnUytiTW1ZT1NrcElHbitmbDVZRVFna1dMRm1IeTVNbG8xNjdkNzVtM0IvcjM3Ly9mRXlkT1pBSFF3dFVUVmdRM3BSdmdHQkhjM0wwMENNL3pjRGdjeEc2M0V4SGNMQllMVENZVFRwNDhpWUtDQXRUVTFFajlQVmlXeFpneFl6Qnc0TURmTkU2VHlZVGR1M2VqVFpzMkFJRE16RXlzV0xFQ3Q5MTIydzFmRDQwQ1cxRlJFVWhFYzB5Wk5BWWpiNzhYTHk5L0VjTzZKTUVKUUY5NEZIUHZuNENNakV6Y052a2g3RDVYQlFBNHV2NU5ETSs2RjNrMkFIRGl4WWRHNHVGbFg3cDUrVWxNeWhxT2Q3L1lpRGxUYjBkbVJpWSsyMTNvWW1DSHZzYzk0NFlpSTZNWHBqNzZIUEpySFNKdHhOWlBsbVAwZ0w3STdEc1lEeTU0QmFmUG5VTkJRWUhVRHMrN0owRkZlVFhBcUJBYUZBQ1ZXa3ZVU2dXbzRIU0JtdE5KT0k1bG5FNG4wMlBBaVBCdjlwMTVRYVZTZlFtZzI0RnYzOFR3L3IwdzhMWjdjTGpRSktldUhtTlk4dVlhT0c3UVRXTTBHbkgyN0ZuMDZIRXBEdGhxdFdMZXZIbm8zNzgvSG52c01UZ2NydEdZeldZODlkUlRHRHAwS0NaTm1vUlRwMDRCQUw3NDRnczgrdWlqR0RCZ0FCWXZYb3lzckN6TW1UTkhiTHFNdFd2WFl1VElrY2pLeXZMNXBQUTFobDkrK1FYang0L0g0TUdEc1dUSkV0aHNOZ0JBYlcwdFpzK2VqYXlzTEl3ZlB4Ni8vUEtMdE05ZGQ5MkZrU05IWXM2Y09aSzZJOHFubjM2SzRjT0hZOGlRSVhqdHRkZmdIVFR1UFlidnYvOGU3NzMzbnZUOTZkT25zV0RCQW9rcExWdTJERU9IRHNYWXNXT2xNWmpOWmt5ZlBoMnZ2LzQ2aGd3Wmdva1RKNktvcUFnQThNSUxMMkQvL3YzUzhWYXZYbzNWcTFkZjl0cnMyYk1IRXlkT1JHbHBLZWJPbll1SkV5ZGk1ODZkQUlDbm4zNGFUenp4QkNvcUtqQng0a1JNbkRnUkxNdGU5bmpyMTYvSDY2Ky9qaGt6WnFCZnYzNVl1blNwTkEvTGx5L0hxRkdqdWl4Y3VQQ0RYYnQyemYzd3d3K2pLYVVCQURTVVVoV2xWQ2tJZ3BMbmVVYmMzTUJHREFZRGFtdHJVVnRiUzJ3MkczUTZIVTZmUGcyajBZanM3R3hzMjdZTlI0OGVSV1ZsSmNyS3lsQlFVSURpNG1MVTFkVkp2NStYbDRkNzdya0hnaUJJNDUwOWV6YU9IajNxY1E0Yk4yN0VxRkdqd0RETUZkZjI1ZGJEdVhQbk1HSENCQXdZTUFDZmZ2cnBGZGZraFFzWE1IUG1URHp3d0FQbzM3OC9GaTVjQ01oMGM0K3Q4c1FHOUdqZkVwMTZqY0RTVjk3QjZSTFhpVkxlZ0Zrak9xSDdzR240YnRONnpKcHdLMXIzbUlBU084V3VqK2VqUllzK09HbW1vSlRESTROU01HejJXNjc5cXZlaFM0c1dhTm02RTJiTW00OUY4NS9FM253eitMb1RHTkMrSlVZLytDdzJyRitOMFQzYll0VGpybjFPckZ1R2xpM2FZdjdySy9ISzBqbElpb2xDMXJRbk1ILytmRXlmUGgzanhvM0Q0TUdEa1ptWmlZNGRPeUkxTlJVYUJRRlJhaEFaR1VsQ1FrS0lWcXNsYXJXYVVTcVZDdUt5S2FwWHJmbDI4T0lIUi8vWXNtMGZlcXlhbzQ3U1BiUnJTZ3M2OXFHbGRQM2FsWFJZdDFUYWVzVGpsRkpLVDZ4YlJsdTJhRXVmZWV0L2RPMm5LMmlubEpaMDJib1Q5RWJJcWxXcjZOdHZ2eTI5Ly9ISEgybi8vdjFwV1ZrWmRUZ2M5TTQ3NzZScjE2NmxsRks2WU1FQytxOS8vWXNLZ2tBUEh6NU1lL1RvUWExV0szMzk5ZGZwZi83ekgzcmt5QkU2ZE9oUXluRWM3ZFdyRjYydHJhVUhEeDZrSTBlT3BIcTludXIxZWpwa3lCQjY4dVRKeTQ1QnA5UFI3dDI3MDdObnoxS2U1K25DaFF2cEcyKzhRU21sOVAzMzM2ZWZmLzQ1cFpUU1E0Y08wWDc5K2tuN21Vd21halFhYVhwNk9qVVlETkxuNTgrZnAvMzY5YU1XaTRWYUxCWTZaY29VK3NzdnYxeDJERFUxTmJSMzc5NlU0emhLS2FWTGxpeWhhOWFzb1pSUyt2cnJyOU9ubjM2YU9wMU9ldmJzV1pxWm1VbnRkanMxR0F3MEpTV0ZIamh3Z0ZKSzZZb1ZLK2o4K2ZPbGVaMDVjNlowL0dIRGh0SEN3c0tydWtaRGhneWh1Ym01RFQ0L2NlSUVIVE5tekZWZjY0OC8vcGplZHR0dFZLZlRVYlBaVEFjT0hFaC8vZlZYU2ltbE5wdU5HbzFHT21QR0RQcmpqejlTbnVkL0tpd3NuQUNnR1lBbUFLSUlJV0VBZ2dBRU1BeWpKb1FvQ1NFS3RWck5CQVFFRUFBa0xDeU14TWZISXprNUdRRUJBV2pldkRreU16TXhlUEJnakJzM0R0T25UOGY4K2ZQeDBFTVBZZURBZ1RoKy9EaFlsZ1dsRkdQR2pNSE9uVHRCS2NXNWMrZlF0MjlmT0oxT0Q4d1lOMjRjeXNyS0dtREpwNTkraXVlZmY5N2pNN2VxalBUMGRCZ01CdW56anovK0dHUEhqb1haYkVaVlZSVXlNek9SblozdHNlK3FWYXZ3OXR0dlMrOVBuejZOcmwyN29xeXNERmFyRlJNblRteWNzY1dsajhiV3JkL2p2cXdPMlAvTmV4Z3plQWcrK2ZrY2hPSUQySEhXZ0lrUFBvM2JSNDdCb3NmdUJsdDlGTHRQMWw4VkN4bjE2SEo4K09veXZManNaZlJwR1lTQ2c3dFJhR1V3ZmQ0aWpCNHpHVys4K3dGbWp1dnRlZ0o4dndFMExBRjh4Um5rRkJrUW9IRGk5UEdqVXB5YWQwaUh6V1lEVHlrZzhCNnFwOHZyS1RBVVVNeCtZOVBEVXllT1g3bGsvc3loR25zWnR1M09SZjZ2aDFEUEIrREJwNS9CbUhIM1lHQ1hoRXRQb2U4M0FCRkpTRkFZVVdVTFJHSUVnMTI3OXQwUXhyWjI3VnFNR3pmTzQ3TTJiZG9nSVNFQmFyVWEzYnAxUTBWRkJRRGdwNTkrd293Wk0wQUlRZmZ1M1pHY25Jd1RKMDRBZ0ZSMU5TUWtCRXFsRWtGQlFXQlpGcHMzYjBhVEprMndkdTFhckYyN0ZqRXhNVGgwNk5CbHgzRDQ4R0YwNk5BQmJkcTBBY013V0xCZ0FjYVBIdzhBbURGakJoSVNFdkQyMjI5ajU4NmRxS21wa2ZZVGY5ODdJRFF1TGc0cWxRcnZ2UE1PVHA4K2paVXJWelpRTWJ6SEVCMGRqUzVkdW1EMzd0MWdXUmE3ZCsvR3FGR3VaSkFmZnZnQklTRWhXTGx5SlE0Y09BQ0dZWEQrL0hscEREMTc5Z1FBWkdSa29LcktwV2tNSERnUU9UazUwT2wwT0hueUpPTGk0cTVIVzc5cmx1N2R1eU04UEJ4QlFVRm8zNzQ5S2lzckFRQUJBUUVJQ1FtUjZxc3hERE80V2JObWIzenp6VGRUM0twcGdLaWFBaEJWVXdVQVJzeWVJWVFRdHlPTjJPMTI4RHdQdTkwdXFhWjZ2UjUxZFhWU1lMdlJhRVJ1Ymk1T25Ub0Z1OTJPR1RObTRQUFBQd2NBZlBYVlY3am5ubnM4NnIzbDV1WWlKQ1FFQ1FrSlYzV3VqYTBIQU9qY3VUT0Nnb0lRR3h1TFljT0dlVEQveHU2TGhJUUVKQ1FrUUt2VjRxNjc3bW9NMkZoc1cvTVo5aGN5ZUd6eE1temJzeGUzZDFEaGxkZmVkM2xRQUdnMHJ1YXRLdmNyeC9MdWZRWElHR3NEQ2ZlS2wyRTVCd0FGTkJxWGc3WkZlaDlrOWUzc29wd21DemliSGhmT24wZGhZUkhDazFJUkc2SzhYUGNvUWtFSXBZSlVPODNwNUJpZTU1bml2TzBKdlZxMmVDMUFxMzBEUUlKU280WUNBTWV6NEp3OEFBV1Vtb1pPWXJ2TkRpWERvNmF5RXBXVjFlaVNOUVZadmRyZUVGdGllSGo0WmF1aE1nd2pxUXNjeDBHajBVamZhYlhhSzZvL05wc05vYUdoMGpaMjdGajA2ZFBuc21QZ09BNXF0VnA2SHhJU0lwWEZlZTIxMTdCKy9YcjA2TkVESTBhTXVLcnpEQXNMdzhhTkc1R2Ftb3B2dnZrR3c0WU5RMWxaMlJYblllclVxZmoyMjIreGZmdDJEQm8wU0FveXRkbHNpSXlNbE01cDd0eTVQdWRRUG5kS3BSTGp4NC9IOTk5L2ozWHIxdUd1dSs3NjAyMTNoQkJjSVk4N1FhMVd2elJ6NXN4bk5tM2FsQ2lxcGpLQUU0R05jZHVUSVFnQ2NRZm5Fa0VRaU1QaDhIQXE2UFY2NmQ2eVdDd29MQ3lVd0sxdjM3N0l6OC9IdVhQbnNHM2JOa3lhTk1sak1HdldyTUdFQ1JPdSt6eW8xV3JJUzZ0ZHpYMmgwV2dhQXpZbGp2KzRFazh0ZUJaN1QrYWp0TFFRZXJQcnhsRTA2NFpPMFNyOHNPNS9LQ3d0eGFvdk53Q0JMZEd0WXd6aVkrSUExT0dYZzluSVA3a0xGNnI1S3c2OFpaY01SQ2hZYlBwbUhjcEs4L0RZdUV6MHZ1ZEZtRXdtTkVtK0JaYmFLZ2loOGJpbFpUTW9CUllCYWtXRE9EVjN4VnZDc2l3VWhBQlVJQ3pMRVo3bkdVR2d6TkNIWCszWHBIbm1oNW50dzJidTJyZ0c1NHBMOGUycU5iQ1FFR1IwYVkxYk9uUkVJQ3hZdjJvZENzOGZ4Y204T21sOGZYcjNCS2ZYSVNFakN3OC9PQTF0NHNPUWtkSGxEMS9ZYTlhc3dSMTMzSEZOVC9zdFc3WklidmJzN0d4MDdOanhpdnRVVlZWaHpKZ3htREJoQWxxM2J1MnhZSHlOb1hQbnpqaDY5Q2owZXIzMFB4OTg4SUhrdFIwM2JoeTZkKzh1cVFsWGtsMjdkdUhsbDEvR2JiZmRobGRlZVFWdDI3YkZ3WU1IcnpnUDNidDNSMmxwS1ZhdVhJa3BVNlpJbjJka1pJQmxXVXlZTUFFVEpreEFRa0xDVlFXZlRwbzBDZXZYcjhmaHc0ZXZ5WGl1MVdwUlYxZjNwNEJmZW5vNmpoNDlPcU5YcjE0dkZSUVU5UERsV0FDZ0VBU0JFZG1iNkRXbGxNS1hVMEhNMXJIWmJGSUovYnk4UEp3OWV4YVRKazNDbzQ4K2lxRkRoM3BVQ2VFNERydDI3Y0xRb1VPdnkza1ZGaGFDVWdxSHc0SGR1M2VqUTRjT1Yxd1BPcDFPc2pmLzlOTlBqY1d4TVhqc3BmK2lldjVDekJnM0JCd0ZvbHQyd2Nzdno0RlMzUVRMWHY4WFpzNTdIZ1A3cllJNnJDbWVlZVZ0cElVQ0dId25ScVY5ZytVUDM0WlBXL2REaTZaaDBGM2hKRFRKL2ZISzBnZngxTDhYb2UrN0hLS2FkOFZ6QzZmZzlPblRpTzQ0QkptdEwrRG5iejRENitTaDBJYWdaWW9HQVhCNng2aEo4V2xRS0FnUkJDSUlQQUhBREo3NHlOVFgvKy9oWndqUnBpeDQrWFVVUFRJUEkyN3RCMFZBQk81YitocUd0dElDR0lvbER3N0JzeDgralI5WHg2Sjl3cVdxbzhNZmZoNlBsejZCTng2Zmd1VThFTjJxSzE3cVB4bEErQisyWUZtV3haNDlleVNEK05YSTBxVkxNWFBtVEd6YXRBa1ZGUlZZdW5UcEZXL284ZVBINC9UcDA4akt5a0pNVEF3VUNvWGs1bTlzREFrSkNaZzdkeTRtVEppQW1KZ1lBSkRjN2pObXpNRENoUXNSR3h1TDJOaFlDSUlBZzhHQXNMQXdqQnMzRHZYMTlUQ1pUQmcxYWhTQ2dvS3daY3NXWkdabVl2WHExUmd6Wm96cndhbFFTRGZJNWVhQkVJS0pFeWRpeTVZdFNFbTVWTmR6NGNLRmVQVFJSekYyN0ZoUVN0R3VYYnVyOHFhS1BRTmF0V29GcGZMcXd6dW5UcDJLT1hQbW9Ibno1aGc5ZWpTbVRwMTYzZGZEODg4L2p4MDdkcUMydGhiSGpoM0RTeSs5aFBmZmZ4K3RXN2ZHMUtsVE1XclVxSUZ4Y1hITkJnMGE5TmJQUC8rODBaMkdKYS9zekFNQXBWUnd4MjVDb1ZCUWtSQ28xV29hSHg4UHM5bU1VNmRPU1d6eHM4OCtRL3YyN1RGeTVFZ0lnb0EyYmRxZ3VMZ1k5OTU3cjhmNGZ2NzVaL1R0MjllRHlRUEFoZzBiOE5wcnI4RmtNc0hwZE9Mbm4zL0dJNDg4Z2ttVEpqVzZIa1NRR2p0MkxQUjZQWHIwNkNHWkR5NjNIaHdPQis2OTkxNHA5T2FLWll0WWh3bFdCNFB3VUsvTzA0SVQ5WG85Z2tPam9mWllCd0wwOVhvRVIwWmVVL1N2d0RxZ045c0FCamliaytNUnpsRmRYWVhhZWgwY05sdURiQUk1cU1teUNKaHBkMDlWTFAvUGZ4ZEVod2N0Z2tjZ3NtdDgydUJ3YU5TZWhOVm0wUVBLWUdoOXFLU3N3d0tqalVkMCtCOWZhdm5zMmJNNGN1UUk3cjc3N212ZXQ2NnVEcUdob1ZDcFZGZTlqODFtQThkeEhtV2tyelFHbG1WaE5wc1JHUm5aWUlIWmJEYUVoMThiOEp0TUpoQkNFQndjZkYzbXdXQXdRSzFXLys0OHlDbFRwalNJdTl1NGNhT0g1MC9za1hHbGN5NHVMc1lqanp6aThWbjc5dTJ4WXNXSzN6eSttcG9hYUxWYU1BeURmLzNyWDg3RXhNVFgzbnZ2dlk5T25UcGxkNmRrY2U3TjZhN3pKaEJDQkhraFM0MUdBN1ZhVGNYYWJtTHBJN0ZvWlZSVUZPTGo0MkUwR3BHVGs0TlZxMVo1bk91bm4zNktQbjM2b0ZXcjZ4ZlFMaWJyeTBOQkdsc1AyZG5aV0xod0liNzc3anZvOVhwRVJrYmVYUFhZZERvZGNyeEFUWFFTaU0xVzVOMmpaS0FtcjV2R1ZGWldKa1ZGUlQxRENKa0J2L2psYnlxQ0lPRHV1KzlHMDZaTndmTThUcDA2aGErLy9ob2hJU0VyZCt6WThlSHc0Y05MQ1NFT0wzRGp2Y0JOS2owdWdwdThHNVlJYnFXbHBTZ29LTUNzV2JQUXAwOGZ0Ry9mL3FiSkx4V0JiY09HRFpjWS9jMENiSEpRS3lrcDhRQTFlY01WSDB4TlRJMWlCRUVnSnBPcG0xYXJYZWl2bWVhWGZ3cTRaV2RudzI2M0l6MDlYWElnOFR5L0pUYzM5NzEyN2RxZEJ1Q1FzVGVudTdrTTcrNnhJSWlOWStUZ0pwWWNGNzJYWWcyM2xKUVVxV0RselFKdVZxc1ZoWVdGSGtIUU53V3c2ZlY2Wkdkbit3UTFrYW41VWo5bFdRU0VVc3JZYkxaaGFyVjZFZnlWYmYzaUYxQktENWVYbDcrVG1KaTQxd3ZjT0RlNFNjek5YWDY4QWJnMXBwYUs0SmFXbG5iTlpvY2JJWDk2RXJ6QllQREoxSFE2bmM4S0hWN3Fwd1JxRG9kanNsS3BYQVNnbFg5Sis4VXZya3E5Q1FrSmtiVzF0VzlGUjBkdnBwUXl4QlU0UmlpbEhOeE9CY0dkVXVBbU9SUXV4d1AxQVpTK2ZnTnBhV20vS1MzcWJ3dHNKcFBKcDAxTkJMWExxWjl5VUdOWjltR0ZRckVZUUl4L09mdkZMeDdBa3hJVkZiVllyOWNIaDRlSGYrTXVkMFM4TlRZUjNKeE9wMDl3YXd6VXhLMURodzQzVmFNWTVzLzZZWXZGMHFpandFY1RZOUlZcUhFYzk1UkNvVmp1QjdYRzdRLzMzWGZmVFRXbXdzSkMvTlVhZGIvODhzdm8zYnMzaGc0ZEtxVWFUWjQ4R1pNblQ4YjA2ZE92KysvdDM3OGYxN0huYjB4WVdOZ1NzOWw4THdDdExKaFhucWtnWlNrNG5VN2lybHBKUjdRQUFDQUFTVVJCVk5NbUpkRGJiRGFQUU42NnVqb3BlVDQvUHg4NU9UbXdXQ3c0ZS9hc2xOSGhMZlBtelpNeVpScVR6WnMzU3hrT2Z6bGdzOXZ0MStMOUpQSU9VcUpON1oxMzNsRnhIUGNzd3pBdndwVlM0aGNmd3ZNOGpodzVjbE9ONmNVWFg0VEZZcEhlRzQxR3pKNDkrNmFkdzVNblQyTExsaTM0NmFlZnNHM2JOblRxMUFrcWxRcXZ2UElLbm52dXVlcyt2elUxTlZpK2ZQazFoZXo0a29zWEwrSzU1NTRUM3dZRUJRVXRyS3lzZkVpajBRUTFBbTRLUVJDSXZQeVJ1OUt1Qkc0V2l3VkdvN0ZSY0h2aWlTYzhVcTNrY3VyVUthbGdRbU5TV1ZrcEZTZjRTNm1pSE1kZDF2dnBaVk1UY3o0aEw4Znk2NisvQnFlbnB5OWlHT2JKdnlNWUhUaHdBTTJiTjhmKy9mc1JGeGVIdm4zN1NqbDFack1aMjdkdkJ3RDA2ZE1IMGRIUjBuN2w1ZVhZdDI4ZklpTWpNWERnUUo5VkZrNmRPZ1dOUmlNVkVheXRyY1hPblRzUkdCaUlmdjM2ZWFnVFI0OGVSVjVlSHZyMTY0ZmMzRnpjZXV1dGtscXliOTgrbEplWG8zZnYza2hNdk5RT29xeXNEUHYyN1VOb2FDZ0dEaHpva2VZRnVMSWlhbXBxMEw1OWV3QkFUazRPenA0OWk5MjdkMlBidG0wQWdMNTkrMHJ4WjhYRnhUaHc0QUNTazVQUnExY3ZDUWd2WExpQW1KZ1k3TisvSDZtcHFlalNwY3NWeDBBcHhkNjllMUZSVVlHZVBYc2lPVGxaMmljbkp3ZFJVVkVvTFMxRmJtNHUrdlhyaDhURVJPemN1Uk9IRGgxQ1JFUUU5dTNiQjdWYUxjMUQwNlpOWVRLWkdtV2xodzRkUWxKU0VucjE2Z1ZDQ0k0ZE80YlUxRlJvdFZxY1BuMGFuVHAxd29VTEZ4QVlHT2lSWTdsdTNUcU1IVHYyaXV2aCtQSGppSTZPUmxKU0VnQkllYk9EQmczQ3NXUEhjUFRvVWV6YXRVc0tjQjA2ZENpMFd1M2MxcTFicTRjTkcvYlJ5eSsvckhlcmxLTGR6ZWxXUzNsM3FYeFJMWVhENFNDQ0lGQ2owUWkxV28zRXhFUVBWWlFRZ3BLU0VnUUVCSGpZMjhUcjU2dHMwOUdqUjVHYm00dHUzYnA1eE1BSmdvQWRPM2FndnI0ZVE0WU1rWTczeXkrL29FMmJOZ2dMQ3dQTHNqaHc0SUIwTGV4Mk83WnQyd2FsVW9sMjdkcmRXTVpHS2ZVQU5Ya3l1M2ZURlZsdkFnOVFPMy8rZkVSNmV2clN2eXVvQWE0eU9rOCsrU1QwZWoyV0xWc21aUVBvZERyY2R0dHRLQzB0UldGaElVYVBIbzNhMmxvQXdMRmp4ekJwMGlUbzlYcHMzcndaRHp6d1FJUGpidG15QmZQbno1ZkE4T0xGaTVnNGNhS1UvRDFtekJncExXWDE2dFY0K3VtbllUUWFzV2pSSWp6OTlOTWVLc1hYWDM4Tm85R0lLVk9tSURzN0d3QncvUGh4M0gzMzNUQWFqZGk1Y3ljbVQ1N2N3RGF6YnQwNmp3VG11cm82bEphV1FoQUVGQlVWb2Fpb1NMVHpZT2ZPblhqZ2dRZGdzVmp3N3J2dlNvR3NwYVdsbURWckZ0NTQ0dzNvZERyTW1qVUx1M2J0dXVJWTVzMmJoeSsrK0FJbWt3bFRwMDcxS0ZXMGF0VXFUSjgrSGUrKyt5NXljbkpRWCs4cTZsQlNVb0thbWhyWWJEWVVGUldodExUMGl0ZHY1ODZkdU8rKysyQ3hXUERSUng5SmtmSWJOMjdFa1NOSGNQYnNXVHp4eEJNQWdQZmZmOTlEUGFPVTR2dnZ2OGZ0dDk5K3hmVncvdng1UFAvODg5TC9iZDI2Rlo5Ly9qa1loa0YxZFRVcUt5dkJzcXcwcjZLd0xEdkw0WEE4UEhIaXhHZ0FZdkZLRlFDbElBZ0tBQXBLS1dGWlZsSkxUU1lUcXFxcVlMRllVRjFkalp5Y0hBL21WbFZWaGExYnQ2SmR1M2JJeWNrQnBSUm56cHpCK1BIalVWMWRqYzgvLzl4ajdsNTk5Vlc4L3ZycnNGcXRlT1NSUjdCanh3N3B1dzBiTnVEbzBhTTRmZm8weG93Wkk3SDc1Y3VYU3lZTW85R0lKNTk4VWdMQ3FWT25ZdnYyN2NqUHozZGxmelJXdHVpUDJFNmZQbzF2di8wV3I3enlDdWJObTRlcFU2ZGk1TWlSNk5PbkR6cDE2b1RVMUZRa0pTVWhOallXNGVIaEpDZ29pR2cwR2thcFZDb1VDb1d5c0xBd1RoQ0VOK25mWElZUEgwNnpzN01wcFpTV2xwYlNEaDA2VUtmVFNXdHJhK214WThjb3BaU3lMRXRuekpoQnQyelpRaW1sOVA3Nzc2ZWJObTJpN3RMUWRNR0NCVlNuMDFHajBValQwdExvMXExYjZaQWhRMmhWVlpYME82V2xwZlRNbVRQUzhiS3lzdWpwMDZjcHBaVDI3OTlmR2tONWVUbnQzcjA3cFpUUzQ4ZVAweEVqUmxCWE5XcEt2L25tRy9yVVUwOVJTaW45OU5OUDZlelpzNm5UNlpTK3M5bHMwdThKZ2tDenNyS29UcWZ6T04rYW1ocmF0V3ZYQnZNd2VQQmdhUXdXaTRWMjd0eVpPaHdPbXBPVFF3Y05HaVNONFlNUFBxRFBQZmZjWmNkdzVzd1pldXV0dDFLeFIrZXVYYnZvK1BIanBkK2FQMzgrZmY3NTUzMWVqMDJiTnRGWnMyYjUvTTVvTk5LT0hUdDZmRFpxMUNoNitQQmhTaW1sSE1mUm5qMTcwdno4ZlByZGQ5L1JkOTU1aDM3NDRZZDA0TUNCdExLeWtvNGRPOVpqam80Y09kTGd0eHBiRDNhN25XWmtaTkRpNG1KS0thVjMzbmtuM2JGangyVkxKeGtNQnBxV2xrWTVqcU4ydS8yRDJiTm5ad0JvQVNBQlFCU0FVRUpJSU1Nd0dnQktobUVVR28yR0lZU1F3TUJBRWhzYmk0U0VCREFNZzA2ZE9xRlBuejRZT1hJa0prK2VqQ1pObW1ERmloWDQ5dHR2cFJwNUgzLzhzWFQvOSt2WEQvbjUrYWlzckVSR1JnYnNkanNvcFRoNDhDQ21USmtpbFMxYXRHaVJ0TS8wNmRPeGZ2MTZVRW94ZHV4WW5EaHhBcFJTMU5UVW9HdlhycUNVNHBkZmZzR0lFU01nc3N5MzNucnJ4cW1pNTg2ZHc0VUxGeVQxVTk3elU3U3BOUko4S3pHMTVPVGtSWVNRMmZnSGlKaXYyTFJwVXpBTUE2UFJpSkNRRUt4ZXZSb3JWcXhBYUdnb2NuSnlwQ2Q3WVdHaHBGNFNRdkR2Zi84YmdNdnpiTGZiTVgvK2ZQVHMyVlBLN3dSY3BXT2VmLzU1V0N3V0JBY0hvNktpQWp6UFM2eElQSjdjMXBPYm00dnk4bktNSERsU3N1RzFiZXVxZGpKNThtUVVGUlZoMkxCaFNFMU54YlJwMHhBUWNNbjhlZVRJRWFTa3BGeFYzQlBQODhqUHo4ZFRUejNsTVY0eCtWNnIxVXJxZVhCd3NGVEpwTEV4RkJRVW9HM2J0cEo2bnBhV0p0WGpGK1Y2cFFSZHZIaFJVcjJVU2lYYXRHbUR3c0pDcEtlblkrZk9uWEE0SEpnNmRTb09IandJcFZMcE1VZU5KWG43V2c4UkVSR1lPblVxVnExYWhjbVRKNk9tcGdiOSsvZS9xclhsM2g0WU4yNGM5dTdkKzhHSkV5ZnF2YlVyZDg0b0wrYVg4anhQV1pZVisvL0Jack5KYW1oNWVUbGlZMk5SWFYwTmxVb0ZoVUtCMDZkUFMrV2s1T3NvUHo4ZkZvdEZVcmNGUWZCWUUzTHpSV3BxcWtlMUYxOVNWbGJtMFNOVnBWTGRHR0RMejgvM0NXbytLblEwQ09rUWJXb3RXclQ0eDRDYVhJeEdJMWlXUlhCd01MWnMyUUtqMFlndnYzUlZKWDcwMFVlbC80dU9qa1pGUllXVUVMNW56eDUwNzk3ZDVTRmlHR3pldkJuejVzM0RlKys5SitVcnJsNjlHb21KaVZpeVpBa0FlS2cvVVZGUnFLeXM5TENmaVorM2JkdldaNFhadkx3OFBQend3M2oyMldkeDdOZ3hQUGpnZzlpMmJSdWlvcUl1ZTlNU1FqeXFzd0tBUXFGQWVIZzRQdnp3UTZrc2tpaWkrdTFMR2h0RFRFeU14dzFTVmxibUFmTFhVOFRmRXB2dWlML1Z2SGx6VkZaV0lqQXdFSU1HRGNMaXhZczlHcVpZTEJZY1AzNWNlaWhkYVQwQXJpVDhFU05HZ0dWWlRKczJ6Y091Nm10ZXZVV3RWai9RcGswYllkU29VZSsvK09LTGFBemNSQURpT0U0S0JSRWRBWVFRWEx4NEVkMjZkVU50YlMwVUNvWGtRRGgrL0RoNjkrNHRIVTljUTlIUjBkaTBhWk5QTzdCOHpPWGw1Y2pNekJUSEtqM0E1Q2FPcUtpb0J1cjhIdzVzSlNVbFV0TVZiNmJtYlZQekZkTHh6anZ2cU55T2dqbi9KRUI3NzczM01HWEtGS3hhdFFvalJveUFTcVZDYkd5c1ZBK3J1TGdZdTNidGtrcnNUSnMyVGZLazVlYm00cXV2dnNLR0RSdmdkRHFoVnF1UmtKQ0F0OTU2QzdmZmZqdmF0V3VIL3YzN0l5WW1CbHUzYnNXT0hUdHc0c1FKbkRselJyS3hUWm8wQ1FzWExzU0REejdva1lQWHQyOWZ2UExLSzNqMTFWZlJ2MzkvN05peEEwbEpTWmc4ZVRLT0hEbUNiZHUyWWM2Y09haXBxWUZhclphZXZtTGxpT1hMbHpjNDEvRHdjQ2dVQ256MTFWZG8wcVFKMnJWcmg1aVlHRHp3d0FPWU0yY081czJiaDdxNk9telpzZ1gvL2U5L0x6dHZqWTJoYTlldUlJVGc3YmZmUmtaR0JwWXRXOWFnU3NXMWVwczNiTmdBdTkwT2p1UHczWGZmSVRRMEZJTUdEY0w5OTkrUEpVdVc0TWtubjhUZXZYc1JGaGFHdExRMEVFSVFHQmlJdG0zYklqazVHVVZGUlI3OUFEWnYzb3podzRmN3ZObDlyUWZBMVUxcThPREIyTEJoQS9idDh5eUFtcFNVaE9MaVl2end3dzhJQ0FpUUFNSmJGQXJGUXdzWExuVHUzTG56L2YzNzl6ZXdpN3JmODRJZ1NIRnVsRkxpY0Rnb0lRVHlwdU42dlY0Q3R0VFVWTHo3N3J1SWpJeUV6V1pEY1hFeEFLQjE2OVpvM3J3NUZpMWFoUEhqeCtQWXNXT3dXQ3lZTzNldU5BOWR1M2FGeVdUQy92MzdzWGp4WWdCQTE2NWQ4Zm5ubjhQaGNPQ0hIMzZReHBlWm1Zbi8rNy8vdzN2dnZZZFdyVnBoelpvMVVDeGR1dlFQdXptcnFxcHd6dDJqUU43TTJHQXdlQlNJOUU2VGtzZXByVisvZmduRE1BditTYUQyeFJkZllOU29VVGg0OENCYXRHaUJ1WFBuUXFWU0lURXhFWW1KaWRpM2J4L2k0K014WWNJRVJFVkZJVEV4RWExYXRVSlNVcEtyRnBWU2lSZGVlRUh5TENvVUNuVHYzaDFCUVVIbzBhTUh6cHc1Zy9UMGRMUnIxdzRxbFFxSERoMUNXbG9haGc0ZGlvU0VCTVRFeENBakl3TldxeFZIamh4QnQyN2RjT2pRSVV5ZlBoMEtoUUszM1hZYmNuTnpjZlRvVWJScDB3WVRKa3dBd3pCSVQwOUhVRkFRZHU3Y0NZdkZnc1dMRjB1OUt0ZXRXNGNtVFpwSUhqcTVNQXlEWHIxNllkKytmYWlvcUVCYVdocENRME9saXJLaStqWnIxaXlKcVFRR0JuclU2WXFMaTBPTEZpMGFIUU1oQkNOSGprUjJkamFPSHorT2lSTW5ObWd5MHJKbFM4VEd4dnE4SmxGUlVRMDhkOXUzYjRmRllrRzNidDFnTUJqZ2REcVJucDZPOVBSMGhJV0ZZZnYyN1lpS2lzS3p6ejRybGZTSmlJaEF0MjdkRUIwZGplam9hR1JtWmtxZTZPZWVldzZQUC81NGd5ait4dGFEbkR3MGI5NGNBd1lNOE5oUHE5V2lZOGVPMkxObkQzUTZIVHAxNm9TQWdBQW9GQXAwNjlaTityK3dzREIwN05neDQ4NDc3N1MvOU5KTHAyV01UMFE0S3FxY2NpYW5WQ3FKNk5RS0NRbnhxS1JDS1VWa1pDU2FOV3VHRXlkT0lDa3BDVmxaV1VoTFM0TldxMFZXVmhhcXE2dHg4T0JCeE1iRzR0NTc3NVhVN2Q2OWV5TXZMdzlsWldWNDl0bG5KZTkxdDI3ZFVGcGFpcHljSEV5YU5BbXhzYkhvMnJXclZPcnE4T0hEcUtxcVFueDgvQitYSzZyVDZaQ2RuZTNCMXJ5ekNyekRPdVJ4YW1Md3JUdE96UzkrOGNzTkVMUFovTytRa0pEL0FiQzVLNE00QUxDUVZRWVJjMHVWU2lWMU0ySXE1cFdLU2ZNUkVSRlNYbWx5Y2pKU1VsS1FscFoydzVMbS94QlYxR2F6U1IzYUt5b3FVRnRiSzdYSHU1ejZ5Zk04NUdsU0RNTXM5aTgxdi9qbHhrbHdjUEJjblU1bmpZaUlXT2RtWmhUdVdEYXY5Q3ZxSW5YRWxhTkZDR1VZQmd6RGdCQUM4VytsVWdtVlNnVjNjajA2ZHV6NHUydmsvU25BUmluRitmUG5VVmhZNktGK3lxdDBpQjVRZVpGSXQ2dVdFUlBhM2JtZi9vd0N2L2pseGtwQWVIajRZMVZWVlphNHVMaXQxSlZjNm0xdmc3dUhndUIwT2tYUHFBaHlJSVJJZGpaeEV3Rk9vOUVnUFQzZFp4T1hteHJZNUtBbU5qSVdIUVVXaStXeWxXOEZRU0EybTIyWXUwcUhQL2ZUTDM3NWN5UW1KaVptWmtGQmdiRkZpeFlIdkpnYkJVQUZRUkM5bzVBQkdoR0xWNHFiSE5SRVlBc0lDSkNhS3Y4bGdLMndzQkFYTDE1RVdWbVpUMGVCM1c1dmtGVWdDK3RnVENaVE4zYzlOWC9wSWIvNDVVOFVRa2hLY25MeVE4ZVBIOWQzN3R3NXg4M2NSSldVaW4wUlJOWUdtWU5CVkVXOUdadFNxWVJhcllaYXJaYjZtdjVSY3QyOG9sVlZWWkpkcmJ5ODNLZGRyVEVQcUZqT096UTA5Q1ZDeUVEL3N2S0xYMjRLY0dzYUV4TVQycWxUcDlOZmYvMjF6UTFla3FjVVBtcTJ1VlZTOFcvNTU1Qi9Mb2EreUh0Y1hGZkdkajFhaDVuTlpwdzVjMFppYTJJT3FIZWJQSWZENGVFQkZkWFB1KzY2U3dIZ21mcjZlbjg1YjcvNDVlYVM0Wm1abVRVcEtTbXZYYmh3UVpBeE4xZjZnZnNQOXl2Y1dRbkVuVUlIK2VaME9xWE5YVFVFN2RxMSswUEFUZmw3YXo1UlNwR1hsNGZpNG1KVVZGUTBzS3MxVnRMYjdTd2dBSmhseTVZdGNEcWRONlR4aXRoVDBidnF4SlhFWXJFZ01GQUxRaGovVXZmTFA0MjUzYjExNjlicWxKU1V6OTA0SnNqQmpSQVJ4d1RLOHp6aE9JNjZhUnNWdmFSeUZkWGJZOXErZmZ2cjdreFFCZ1VGL3E0RDVPWGxvYmEyQm5xOURtYXpDVmFyQlhhN3BITEtLblE0aVJpZExQZUExdGJXVEhVN0MyNkk4THdUVGllUGF6MXZuVTZIeU1pSWErbzVhVEFZRVJJUzdET1MzQzkrK1N0SlVGRGduUHo4QzVXMzNKS3lGWUEzYzVQK1R4QUVnZWQ1T0oxT0tCUU00VGlPS3BWS2lhSFo3VFpZclJhWXpTYm85VHJVMXRhZ29xTDh1cmJ1QXdEbHRkeW8zbEpXVm9heXNuSlVWOWVndmw0SGc4RUlzN2xCandJM3VFbWdSdHhVbGRUVzF2UU5DQWg0Qmpld0xwenJhU0hndDV5M2FBQzlXakdaVEFnTEM4WHZtV08vK09VbUVXVjhmUHpEeDQ4ZnEremN1Y3N4WDh6Ti9Vb0VRUURQODVUam5HQVl6aXZrUXdtVlNnMjFXZ09OSmdCYWJTQ0Nnb0lSR2hyYUlDZjRkdzIyc1dxWFY1TFM4akljUDNzQk9uZEdnY0Z3S2FuZGJMYkFiTFdCdlFSc0lsc2p2Q0FRS2xDbXFLZ3dJU2dvYUQ2QWxCdExxeGtwenVaYVZXNTVjdThmdGM4ZklmcGplNkJvbG9HUXFCc1RGa2c1TzZ3MTlWQkdSRU9qVlFOd29tTHJKdGhzZ0twcEd5Umx0UGxiM09tL1pWNXRoVG13T0tNUm5STFh5SC9ZVWJYak1DSnY3UWVWbStnN2lrNmo3RmcrQUlMWVFhTVJITXBjeDdGRUlEb2w0V3AzdWFWMTY5YjNyMXk1c256YXRHbmxBTVJBWGZHVmlwNVNudWZoRHRxVlFrQXVlVWN0N3RBUHRic1RsaGJCd1VFSUN3dTdwcVl3anRKY0dJeGF4TFpMYW5CT3ltdFdrNmdWaXo3WWdQMUY1U0IxWlNpdnFVZlh1RkFvTFNaWUxHYVVsSldoc040TXd0a2dDRUNJRXNUcGRNTEpjY1RCT1FuZ3NxdTlrMnQrK3JuNCtDSGtUMWlRbE9LYTFVTXhQKzVhOXZzdCsvd1JVdkxaY2dSTi9neGh2UVAvOE4rcTIvWVpEci95SmJUTldzQlJWb0JtODk5Rm0vNUpVQVVFd25KdU44NGRxRUt6ekhaL0MyRDdMZk5xT0xBR2hmcE14S2FPYkl6bkkvKzl6eERZOTFabzNFU2ZVV3FnMWdiZzR0c3ZRSjErRzBMREc2Nm55dTgvUnNEdGFRaUw4UnhMd2Z0TG9lejFHSkk2UkRiWXgzemlSNVFZT2lNMk5mRmFOSjRCNDhhTks1dzJiZHBiTXRZbXlGZ2I0SXB6ZzFzbHBRekRFSVdDb1E2SEFrcWxheE16RWRUcVMyMytnb09EMGJGang2c21BcGJqbTNIMlZCTGkwNW8xT0tkckJ6YW8wVCt0RFhvMkRVRmhvUnE3OXBaaTd6a2R1a2NvWU5iWDRXS2RGWW5oZ2VEdFFFVjFIVEVybFZBSVRuQ3VDR1ZDQU1aU20vL1F5RGYyek16SlRFWEhHNXhiSURkaS9qWTFsdm5EOXdFRVVEQnc2cXZBMFNBRVJuaDZqU2dFRURDd1Y1VkQwSVFqTVB6U1lyWlhsWUpYaGlJb0t2VFNEcXdkb0FUT3Vtb0ltakFFaEhxbXREaU5kYkFaSFFpTWk0ZEM5ZHRCbUMvZGovMkxWNkxIMm8xbzBpd1VFR3l3MW5OZ0dBM2lCNDlBTUZPTy9BS0xqL2tRNEtpcEJzY3BFSlFRQTgrSEhROWJlUVVFVlRBQ1k4STl2cU1PSzh4VnRkREV4RUd0MWR4azgrcjduQWpQZ1RvRlVLc0JOZ3NRSEJmaE9UNW5EUHArK3htSWJJNjB6ZHFoZWJOMnFQeG9DWUNHYTVjNm5Xai8zQ29RWmNQUHphY09RTmxxT29nUURpaVYwamlvNEVUODdmTVFML3ZzMGpBNFdNc3J3RVRHSVNCUTAyQ3Q4RWJIZlZVVlZZVnhUZUxXQStCOXFhU0NJQWlFRU9wME9zRXdCQTRiSllRdzFLWEJLS0ZVdXRPc1ZHb0VhTlJRT096UUtMVUlEUTExMjlzRTJDckxRUU1pUGE0REFIQzZLbkFrQkVUZ1FKMjhOQi95YzFKZXF6ZWlvcUllYWs2UGtxcEsxTlhWZ3poWjJNd21XTlFxMU9vTUlBb0NjQzY3bW9KUWNDd0xFRXFvcTZZNnNWaE0vWlRPdXZrY28wU3drb0NRR3cxc2x3RHV0ekMyYTludnQrd0RBT2VmbVlpTHVTb3dTaVdFeW9zSXZuMGgrczRkN2ZyU2VBcnIreitEcEdFeHFEeWxBOHc2ZFBqa0p6UkxNdUxRZlZOUlo0MkV5bElHa2pZUnQ3NDZHeW9Hb0U0T2hXL05SN0ZLQVh2QkdjVFBYb0h1ZDdrS0VoYis1MUdjM0ZTQ2lPWVJNRjZvUThaM0d4RXJQZHdkT1Bua1RLZ0d6VUs3ckM1WFhocy9ySWVxK3dRa05IZXJFNHBBQk1ueVJ3Z1ZRSG5CYXo2cXNYUHdlTEF4TGFHQ0FTWmRLUHF1K2hDUk1ScFFVekgyVExrSDl0Q1dVQXM2MkJNR0l1dFZWMGsrL2U3UHNXZlJKd2h0bXdKNzJVVWtQL2tKMmcxc2ZwUE1hK1BuQklHSDhlZVYySDdnS3pDV01xRDFuUmo0eGl3b0FWU3UreTlPZmJrRCttTjFHSHhtTHlLOXNacmpBSGl1Si9ic3o5ajkvRWV3blA0VnJkL2VpN2EzTm5HcFpNYzJZZC9MWDhDU1V3SlM4RGpLUDlFaStyWkgwR1Z5UHdCbE9IRDNrOUFWbmtmSTdZdlIvK2xMcGRydHVYdXdlOVlpTUUxYWdTM01ROXhETDZIYlhYMTlyWldIOXh6SUx1elhLKzJZU3hXbEFrQUVVUzExdTBrSno3SncydTFVU1Fqc09oMzQ2SGczYTFPQzZNdFE5UXVMV3BVZFFlcGdYRlQraUlCM1hrQ2d2UXg1enp3SE5yUVpVSDhSUVVQbm92Y1Q0MEFnNE9KcnMzRnlZeUhDWWpYZ1dBZEltMlQzZkhpZTB6VUJtOVZxbGNJNmFtdnJvSyt2eHZIQ1NzUUZoN3JhYzluc0lMd0FvOUVHbzhOSkZGUUFGU2loREFoRHdJeGJzaUw4a1RVN242cXYweWRNR3o4WUtlby9ReEg5YmNEMmUvYTdaaERsblhCRzlzS29qNTRDTWVYaGg4enhxSmd5QWdueFNoZXZxRGtGUmVabWpGN2VFUUFMSjZ0RTFlbzNVYVhxaDlIZkw0YkNhY0N1SVpuSTJ6TU83UWNrQXJ3VHlyUXNESDV1Q3B6bGU3Rit3QkswR3JjTEVZSFZPUGZoWG1Uc09vV0VPQUJPRmp3amY5Z0lNSnc2QWsxNzNWV2RnK1hDQlFRbjkyejhmNmtBd2VrTmJCSG9zMzQ3MUNFdTZwNzN3aFNjK1dvWCtqNDJIT1lEUDZBK2JEREdmZUVxaE1tenJMUnY0ZWNmb05uVG42SFRHTmZUbldlRks0N3h4czFyNCtjRWdZY1Z5Umo3N1p0UUN3YnNITlFEK1lmdVFKdWVzV2d5Zmc2YWpCK0xIOXBNZEFPWTEvaWRIRUE5Z1UzVGJqQ0dmalVZUis3cUJ0QkxheTJ3NjJnTS9XbzBqdC9mRzZvNzMwTGEwR1Raa1JMUjU4dXZVUEwrWTdoUVQyWEhzK0xJWTNPUXNPQnJkQnpjR29McFBEYjNtNEg2TVhzUkZkSmdyVFJocVdMYXNtWC9MbGl3NEJtQlVnaUVRSURNWTBvcEJRVUV5aWlnMEFaUUZaekVYRnREdGFHQlVDanNJQ3dMYzEwMTRvZVBSR3lMSm9pTGprWnRSUVYyL3VkVkpJMThHY05uRFFHY091d1lPQUNsNDBhaXFmb1FqbjV5QVVNUGIwVjRrSURqOXc5R2xmU2c5RHluYTNMWEZSUVVvS3pNblFOYVg0dURKODdBb1FwQ3NzSUpzOWtPam1VaGNBS2MxRW5BUzRudEVBUVFRYURFa2R6cHlibjkydzJ0THptUFY3Y2Z3YWpVRVloVHdTOCtKTFpQTDFlbm5aQldpR2tEMUo4cVIwSzhlM0ZxVW5ITDZJNlNhVUNwQm5RblR5S3U3NU5RQUlBeURFMTZ0MGYxNmRQQUFKZjlKSzZucTRxcE1xRTdvcUl1b2o3ZmpvZ09rWWp2R1lrakQweEQ4cEIraUI4NERQSHQ1ZmFXUVBULzZkUWZmS1lNcWplK2c5enZkc05tdG9PdExrS0l1NXkwTnEwcm1GTVBZTmNjQitKNmRFWHl5SkVJVXJ2bnAyY3ZIUGpYTERqUGprQlVqMzVJSHREbEpwcFhaYVBuQkFCUm1abFFNd0NZTU1SM2I0WDY3R3lnNTAyUWNHUEtSWFcyRFlxOTMrRFlRWmRxVHAybDBCV1lFZFhSNTFvWk9IdjI3TE1MRmp6enNWc2w1YjNzYmRTTjBKVG5lVEFxQmdMbGljM09VcVZDQWNKeWNBWkdRQ0FzakVZak5Cb05BbXNLVUgrc0NIejBlaHlyL3dVVUFPdDBvRDZuQkJHcU0yRFNNaEFleEFCZ0VOKzNKNnJPTkxhcXJ0WlFXbEtDMHRKU1ZGZFhvYTZ1RmtkT25FS0pRNEhXb1VyWTdhNXFIVlFRSUhBY0dNSkF6UUM4UUFsQUNhV1VtZmI4ZjhaTkhkcm42WjdONHpHeWJ4KzA1d3F4cmREaVI3Qkc2Y1ZsdnRNRzRmZEZrQkQzbFZlaTgwZmIwSHZ4ZEtpNU11d2ZQeFI1eDJwKzgxR0RXamFIc2FENG12YXg3RitKZ3grZlJKZDMvb2VSVzdhZzYvMUQzZG9Nb0V6c2dkSDdma0xLa0U0dzdWcUZIMjUvREt4N3Y2WVB2SXdSWDY1QWVId0F6aSs1QjRmZTMzSFR6T3ZsenNublhvemlKbGwwQXFDS1JQeklMQ1JtWlNFcGF5UjZmTG9XVFc4SmJIU3RCQVlHemlvcEtlNExWeVVlRGFWVURWZjRsb0pTcXFBQVF5bDE5eXJsd1FQZ09CWXM2NENENDhCQmdOVnFoY2xraHNGZ1FGMmREanFPQWR1cUxVaVhMa2pLeWtLWE4vK0hsRjdYRmdweVZjQm1NcGs4ZW9BZVAzVUtaNHdVSGFJMFlPMDIyTzBPc0t3RENnQ1V0Uk9ISzJhTlVFRWdCR0NxcWtxVFFnUFZUeFRWR2x6VFp6ZWd4RUlRSE9DUDcycE1xdmNlY0JrclRIbW9PUWRFZHJ5OFN6NGl2UU9xOXU0RkR3Qk9BeXIyNXlCU1ZtRzI2dUJlbC9HMy9GZlU2Vm9ocWtVQUFCYXNSVUJVUmorMG0vY3NVdnJGd3BndjcrTE5JdWYvNXVEODlxdGpiUW1qeDRIZHR4cGxCUWIzZldLRnBkcHd5ZTBVR1FtMnJBUk91WG1qckF3QnJkSVJIaE1FQ0JhVS9iVDNrcUhhWkFMQzRwQTRhZ0s2djdZVXlwSnpzTHAzWmswbUJOM1NDU24zUG94T0Q5NEcvYm04bTJaZUwzZE9BRkMzYng5WXdYVzh5bC96RU5raDdlcmNkcEhoc0Z5aHNZbTNLRFVhc0hYMVYvZlBJVzBRMjlvR3F5a2NzZDI2SXJaYlY0UzNhQVpWRUhQWnRkSzBhZE43di9sbVRSTVIzQUJJNEFhQW9RTFB1T3h0VHNJVFFIQnloR1U1T0RnbldONEptODBWdE9zQ053NjBhU0RLQ3F0Z2l3aUh0blVxb2xxM2hEb2tFRUdkT29CbUg0YmVJZ0J3b25MdndjYlArMnJPMTVYWTdpNFlXVk9LQTNtVnNMRjI3Q20zUVdEdGdBQWtCQ25ocENBcXh0VzlCdFJWaDQ0Qm1LaW91SG1QanV6ZDdZRnZOK0xva1Jqb2EydVIwTEVuUmlScC9BaldpQ2hxRCtMSGNYZUFyNzZJMEFkZWNOdUJHcGY0T3g5SDNBOTM0b2NSSjZDeWxZR2tQWVJXL1MrcGxkekpMZGc2Y1N2c0JXZlFmTWxiY0RtYXFyRnIyRmp3Q2FsUW94NUc4eTBZT0ZRZWlzR2hjdE0zVU1jT1IrdkJIYTk4RXlYM1I3OS9UOEgrMi9zam9FVUxPRXFMa2ZMU2FuUVk2bkltYUxxTVJLdVdYMkY5dDk3UWRCbUIwUjhzUXRTZ1NWQy9kUmUyVER3S3hsYVBnT2hMRGdEendmL2g1OFZmSXFKTkM5Z0t6aUI2NWdLRXVhZmg3SUk3VUhSUmk1QVlOWFM1MWVqNndlTTN6YndLbHprbkFOQXF5dkhUN2VQQVdNckFkSG9NdDJSRUFkRGg0RDMzUUZmdmdORlFnUVBqUmtPcGJZRSthOStFMk1LNjlkejUyUG5ZT09RdkRVYjdsNzlFcTU0SnlGdnhLUEwyRk1HYVd3MVNjaThLWDlNaWJmbi9rTnpldFZmeVBROWoxeE9Qb095VEVNVGQrVFF5cGc5RzdkWjNjUGp0TFdBckw4TEIvWXJOKzFlaXlYMEwwWGw4VDNSNzgzWHNmbkFxU3Q1TGdaS3JoZG1TZ0NFL2ZZemd5NndWUWtqblVhTkczUUhndnpLVmxIZlRWSUZTU2dXbmt3b0FWU3JWY0RxZDREaU9FSjZubkVCaHQ5dmR3YnV1eWg5UlBRZWdhdnRLYkR6K0UzSWlBeEJsRFVQZkRkOGpKcjR2dWo3UUVqOFBHNDdRV0MxNHFuRTFEQVFhbkJPaEdtblFnUUFBSUFCSlJFRlVWTGlpQ2lvbXVKZVdpdVdJNnFEWEczeDFtWEludUhPRTV3VkNLVlhZN2JhSktwWHFmeTdyTDRkeWd3VWFiUkNpdEgrT2NhMjZ1aG9zeXlFeDhkcW9iWFoyRGxKVFcwbTE2LytvZlFEZzdGT2pZZW02RkIySEpZSVRnaEVVRlhUVis3ckNFa0lRRk5VdzBORlJVd2toSUJUYWtFQVA5Y05XV1FrblZBaU9qOEgxY09kUTFncHplVFZVTWZFSUNMcUtlQjZCaGFtNEV1cllCR2dDbFY1ZldXR3BySVVxSWhZQklaN0hZZzAxY0JnY0NFeEloRUo1azgzclpjNEpBSGhMSFd4bXhpdmM0MllSQWRieVVsQk5CSUtpUXE1NnJaU1ZsYzFOVEV6YUJjQUNWMmx4TzZXVUpZUnc3ckxpdkhkSmNhMVdpOERBUUFRRkJTRWtKQVRoNFdHSWpJeENiR3dzNGtJRDBheFpLM1R1bllua3BFdEJ1R3hkRlp4TU1BSWpnbjRiWTdOWUxDZ3RMVVZWbGJ5Mm1na1dpOVdkRDNvcGJjcnBsSEpCaVNDNGduQkxTMHZpVlNyVjNFdVBTeFVTSXNQaGw2c1RkVVFjMU5lNFQwQmM0OEdXbXBoNG45WUliWHpDZFIwM1VRY2k1RnBxYlRGcWhEUlBidVNyUUlRaysvNU9IUllEZGRoTk9xK1hPU2NBVUFSRklUam9abDE1REFJVGtxOTVyU1FrSkV6NzlOTlBjdTY3NzM0ZUFBOVFpYlhoVW9GS01aZVVLaFFLd3JJc2RXVWtLS0JTS1dHeHFLVE9Zb0dCV2hoWU84cEtTeEVWR1ltZ0lOZUVxYU91ZlAwdWEyTzcxSVRGMVRKUEJEVlhhVzhISEE0V0hPZVJNaVY2UWdtbGxNVEZ4VDBPb0tzZm9xNU5FbWY4SDFKdVRmRlBoSDllLzFKQ0NPbDB4eDEzVEhEYjJUU1VRdTVJWUVSY2tHVWxnT000d25Fc0hBNFdkcnNETnBzTkZvdlZuU1N2UjExZExTb3JLNlhXZlZkdFcyenNpOHJLU3EveTNpYVl6UmJZYkZZUHBzYXluRlJqU1JCNEtjSGRhclVNWlJobXJ2OXlYN3VFdE83bW53VC92UDRsSlRBdzhNSGMzUE5IVTFOYkh3YmdkREczUzdZMlNJbnlVcm9WV0phRFFzRktTZkkybXdwbXM5cWRKSzlEVUZBUVFrTkRFUkVSZ2ZqNCtLdmtuRDZFNHpndkZkUlZXODFtczhKbXM3dTlvS3hVMmx1dWdsSkt5YjMzVGxOb05KckgvWmZaTDM3NTUwbkxsaTJucEtTa3lEMmtLamVKWXVBTy94QUVNUVRFQ2FmVFNUaU9BOHVLck0wT204MEtzOWtNZzhHSSt2cDZWRlZWbzdTMEZGZGJQOUluc0xsQ082cmNLcWhCcXJObXM4bVpHdXZSQWRwZEpaTlFTcGtQUHZoZ05vQkIva3Q4N1ZKZFhZM1MwakwvUlBqbEx5c0toYUwvNGNPL2pCYUJqVktxRXNHTlVxcWdsREx1NnRseWxWVENGWWZEQlc2WDZyWVozQ3BwRlVwS1NuNGJzQmtNQm5mUGdocm9kSHFZVEs2MmVXTExQSG1OTmFlVEkvSXVVd0JJZlgxZHFrS2hlTXgvZWYzaWwzK3VSRVJFVE51eVpYT1NGN2hKc1cwQWlDQUlNdGJHU2F6TlZaRFM3cmEzV1dBeUdhSFQ2VkZiVzRQeThuSVlESVpyQnpaNWh5bFhlVzhMckZaUFVET2F6S2cxbUtBM1dXRmpPYm5EZ0JFNDY2eFhOdXhNWExCdUwvYVdtUzRkMkduSE43c1A0Y212dHVIZjIwK2d5a0g5Vi85Nmk5T0MydFBuWGNHa3YxTXFWcitBZys5dnUrNUQ1Q3QveFk3Wnl6M0dhRGkySGNlV3pNZSsyWE54NXJ1OUVIN1hMd2pRbjlpUDh4KytneE52cm9URDY3dXFyU3R4Y1Baak9QTEtoN0JhWmIva3JNTysrMmZDNUUrR3VWN1M5TlpiYjczZERXd2VRYnNpYS9OMEpIZ3lOeEhjckZZYnpHWUxqRWFYU2xwZFhZMnlxd2hTOWdDMnFxb3FWRlpXdWhMYzNYRnFMaFhVSnJPcjJXR3cyTUVRVnlFUHdja1JweXRtalZnTkZRTm5mN1Q1WVM0cUVTTmIvajk3NXgwZlJaMy8vK2ZNbHV4bTAzczJnU1FraEJZZ0dDRFNJUUtDb0tBQ0l2WUduT1c4czVldkRVODV6M0xxejNZcWxrTlJFYkZncEJjRlJLUUhDTTJRaFBSZU45dG5mbi9zSnRrVVVoQ1UwM2s5ekFPem01bjV6T2Z6bWZlODYrdHQ0S0gzdnVGQXZXc0xmNVQrSFV0emJNd2RNWWpnMmp4dVh2SHpyOXpBQ3RyQWRKUXQxejdhVkhiMHEyUmtYUm1XeXRxelBzVGpMejFMOE1VejhTd2l5dmxpSlg3REp4RTNZeFRaajk5TTVvYmNYM0dGS2pKZmVJWHF6RDFrdnZweGk3bW8zdncyUC96amE2TG5Yb2UyYUNPYjdudTF1Y0pLSFV6TUVDMEgzdCtnN0tPekJKMU9kME5tNXVIQkhscmI2YUtrTGJTMmx2NjJ4cW9FbDBsYVhsNUJjWEV4SlNVbFhSZHNoWVd1Wml6VjFWVXRURkNyMVlMTjFpallKUHk5dFlKV0ZCQUZCTkZWeGk4QVl1SEo3TnVQK01WeS82amVqRW0rZ0xrSkFpdjJGd0JXTmh3dTRkWkpJeGthRThIOFMwZGdQM2FVZzJabDhjOFdpcjVld3Y2WGx1S29POG5oeFl2WnYvaDVxaXFrUmlsRjFwdlBzLzJPTzluNzhoSWFURjE3cGNoMWhSeGEvQWpiNzMyRWdveDhUNmxIOWpzdnNmMk9POW45MHBLV21rK0hndmNJeDlhYWlKdmNwOFhIZzU5NWc0UkxKeEkxY1JhUktTR1lDb3QveFV3RU0vS2o1YVRlZncydEt6Q3pQMXhLN01LSDZURnFHSU1XUFlMOXUvOVM1bUhWUk0yK25PTC92b2RGZWVPZU5mVHUzZnRLV2dZUk5CN21hS1BXMWxSTDZobElzTm1zV0swdFRkTHE2aXJLeXNvb0xDenFtbURMeTNNVnVMZU9ncnBNVUZkYWgwZVQ0K2FBZ1N1Q0sxb3M1cm5IeTZ1bkowU0U0R3lvNTFTZGxjU0lFSTZYVmdGT0hKS01TdVcrbktoQ0pkZHpzdEt1clB4WmdrLy9ZWVNOR1lLb0NTSTRMWTJ3dExIbzlhNzVQdkgwQW83dXFTSCt0bHZSNUc5a3c5MHZka2xiTGxyeEdlb2gwNGlkRU1kUDE4eWp2TUlCT01pNGV3Ni9aRHBKV0RBZkgvTWVOdjcxMzEwNlg5M1BQMkJQSEk3ZmFiSXJpNWN0SWp1M0YvMHVIM1lPWnNoQzlkRTgvUHNuVW4veUdEYXZSQUlpeXFuSmFuYVhpQkVwQklsN0tjNnlLUnZxTEVHdFZsK2NuNTgzbXFiY3RtWmZXMk5ESnplZGVJdEFna3U0MmQzNWJXMmpwS1dsSmVUbDVYY3MyR3cyRzhYRnJsclE2dXBxdHduYTRCRUZQVTE2aDlNcHlMSXMzdkhRWXlxTlJ2TVhzODJHdDFiRnAydldjczJLbjlGcjFOVGFIWUEzSStLRFdQRmpCbVgxRGF6ZHVvOWNXY0JzZFNncmY1YmcyM3NReG1GSmlMb0FJbEpUTWFhbW92TUdLQ043NVM2U0huMmNpT1JrQmk1NkZPZTY1VlRVZDM1Ty82bFgwM2ZLS0tLbTMwYjhNQ2M1R3pLUVMzZHliS09Ub1l2dUlpZ3hrZmk3NzBYY3NZS3FoczdQVjN2eUpJYm9tSGEvYTlpL2dtMnY3U050K1JMOGZNOEZsYm9KbXhsVW1tSzJUQnhMWm5vdWFqMDQ2anpOQmg5OFluVFVaUlVyRytvc0lqSXljblpLU29yT3JiVzFDU1EwbXFYdHBYKzR0TGJHS0dtRDJ5U3Rwcnk4bk9MaUlteTI5bDlDYXBjSld0aWlINmlyL3JPeFpLcFpXMnRNeEhVNm5hNDJkcElrQ0lJZ3ZQTDBZL09CVkwxV1M0UEp5ZFhUTCtFU3A1cTlPemZqcDNIVmhONDJZd3JXdFR1NWZXa1dBL3YwWlh6UUNid1Zkbzl6RDBjMURkWCtlSWU1MVNUdlVQUysxVmdxZ1U3NjFCbzhraUgxeGtqS0s4dHhsTlppdFJTeTY5WWJtOVI5cjZRa3NBS2RVUC9MT09BME5Pa1ZPN1lSY1BGc0FrUFBGVmU4QWEwZW5QWUlKdjYwRDAxSUVEOHNCcld2dnUyZlNrNWwzNXhGaUtJNGJNMmExWk5EUThPK0JlenVId2R1V25GY3lidUN1eTlwazV6eDFOcTBXbGNnUWFkekJSS3FxaHBOMGtKaTJ5bmZVNXZONWlZNklsY3RxR2VUNDViNWFnNkhRM0FMTmNIdWNBbTFqQVA3L1ZRcTFYeUFQcUdCL0hLMEhORnJNS0hBOGVKeUVudTRPaEpwdlFPNDUvS0wzUzZhUWlaczgrWCtVSVZsOHV6dUlBRkJjcmFrSEZNSDRCMVFRME9wRGVLMFlDckRYQmVBTHFnTE9vNkhyOHRjV0lSK3NCRjFtQUV2UXp5alB2NFVRemZmUzM2UmNaZzN0SitIRkRUeFdwSnNvZTBia1NYNTRCMkl6dmZYRkZmcUNPamZnNXJNNCtndUdBYW1ES3BMd3hnUTc5dkNYRzBvTUJFU0Y5bnVHSnhhZnd5QnZzbytPeFBQWjNEdzdFY2VlZmo3WjU5ZGJBUHNzaXc3M0F3Z1RyZlcxcUoxbjlzeWxKdWpwRFozbExUUkpLMmhvc0lWU0FnUEQwZXZiL21DRXB2b2lLb2EyK2MxZURROHRqYldndUp3TlByV0hOaHNEZ0FCV1JiMjFEaHVYYmIvVkgrQTJMNTk2VmVidy9QYlQ3QmwvMTQrelpLWmxld3FIaTQ2bGN0SGUwNnc2ZUF4L3I1MEU0TXVIRXFjSXRmT3NsSVNnNi82QkpudmZVSGV1ZzAwbUFCQ2liMWlHSWVlK1FmRkdmczUrTVJpVkpQbkVPelQrZWxxMW43TTBUWGJLZmoySGJMMmFPZzVzVDlDV0NwOXh0cjQ4ZjduS2Q2ZlFkSG1OZXgrNFowdXBaajRqUmlKa0xrSFV6c2VpTXBOS3ptK2VuZTd4KzI1ZGd6YlgxN1Y1V2tvK3ZZampueStBYWU5bkt3UFBpUjcreUVBZWwxM1BUbHZQRVB1OXpzNThQaXphS1pjUzZoSEViMWNjWUJ5MHlBaStyVFZHZy9jTVlYdm4xMnU3TEV6aENBSWZlKzc3NzVKdEsxRzhFejlhSkcwNjNBMCt2V2JUVktMeFZWTFdsZFg1ODV0SzI4M2tLQ2FPL2Nxajl5MUttcHJhOXBwZW16RlpuT0ZZcDBPUnhON3h5UHZmUmFrOXZaNTNTcHFnNFpIQjRIS2k3UitVUnc0bGtWR3BaTTdMeDNITUhlZlE2Zk53cGJNYlBhWDFESXdhVEFQaklubjkrQU5OWmxNT0owU2ZuNSszVHF1dExTTTRPRGdidlVJUFpOanpuUjhydDNqalhIU2haaU9IcVFodndqRHdBdlJld3NFajVtTXF1d3dlYXUzSU1hT1pQaWpmMEhiaFg0VHdlTW1ZenV3bHBMTVdnWSsvVS9DWS93QWtmQXBNMUNWSGlRdmZRTzFoYlVFanh4TFVGeGs1NVJIK2tqc0dVdXA4UjVEV0srV0xDK1N0UUYxV0N4QmNhMXFBYVZpRHYvemJZeDNQRVpZYk5lWVlhcCsya1JEclphdzRRTVJHa3lJZmowSjdtMUVGM2NCSVZGMlRxV3ZSWWdlemZCSEZxRFZOSSs2NkpQWGFPZzFuY1F4N2ZjOTlSc3dqT0Q0U0VWS25hbk9yTk1aTlJyTitrMmJObHR4MTQ4MlVva0xndERZV2Q2ems1d2dpZ0tpcUhML2lPNE9WeXAzbHlzMVdxMFduYzZMb0tDZ0Z2Umd3amZmZk8zUnk2QlJ1Tlc2bVR3YWszUE5XQ3lOWEdzT3dlbDBpcklzaXphYjlWNlZTdlhzLzlMa251OThiR2M2dnY4VjJMSTJzUEhwSDVuOHdlTmRlckhaTXI1ZzFTTS9NK1BiNXppbkhsbEhCVnV1K0F1RFB2eVVvRUJSa1VMbkNOWFYxZjhLREF4YWlZdXp6U1FJUWdNdUQ2MU5FQVNISUFpU1NxV1NHam5iZERvdldhZlQ0KzJ0eDJBdzRPUGppNStmSDBGQmdZU0doaEVWWlNRdUxvNysvZnNUSHgvZmJJcDZCZ3pjWkpHTkdocDJ1OE90RWpvRmQzcEhVK25VbmoyN2ZWVXExYzNLVWlub0RyVHhFNW5hUmFFR29FMmF3ZVZmTGVhY2g1blV3WXovWnJraTFNNHgvUDM5cjd6Ly92dDhHODFSZDRSVVJhdFNLM2R1R3c2SEsxSnF0enV3MmV3ZVVWSlhibHRqSUtHMHRKU0dodWJRdk9ncWNxOXZaWHEyekZscmoydHQ0TUNCTndJS3VaV0Njd3RSamFoV2hNMGZ5TmNXLytDREQwNXdDN1oyZlcydE9kdmE1clpaV3dRU1hFWHlya0JDMDdacFdlVGVtSy9XTmhMcVp1NFFBT0c2NjY1VnFWU3FHNVJsVXFCQVFYY1JGQlEwbzFldlh0cDJ0RGF4VVd2enFFaG95cDF0RGlSNGtsSTJGc203MGo4c0ZvdExzTG0wTlZlUmV6dEN6Wk9TcUVsYmUvZmRkNjhEQmlwTGRQYmhJdFZUVWdvVS9LRzF0Z0hidG0wZDB4V3RyWDNOclZHNE5SYkp0MHovQUJCYnBuZllXdmpXbkU2bk8yK3RtUmtYRU5WcTlYWEs4cHhMd2VhblRJU0NQelRDdzhPbnVRVmFvOWFtcGhVWlpXTTFRcU1NYXVscnM1MDIvY1BoY0tCdXJBZHQxTllhODlXYUt3eWFmR3U0S2IrbkFxT3JhMnVwc1l0RUJmclFyZ3ZFS1lPcWRRS0FrNktxT2d6ZXZ2aDVxWlRWUFEySzEzeEtWYkVWTWFRWGZhYVA2ZEl4dHZ3amxCU0s5QmplcDh2WHNSY2ZJV3ZOejhoQStNUXJDSW8rVjVxaWhPUm9XMDBxcU5WbnBTdFdpeXRWNVpLenQ0eGVGM1dEQnJ3dW4yTmZiRVFDQWxNdkpxSmYxK2luSzdhdlJ0VjdIQUZoM2wyK1ZNWFdkRXF6eWhGMDRjVFBuY0xaU3VXVUdpb28zTElOcTBuRWVPbWw2SFcvM1g0MW5kaE5yVFdVeUtTWUxoOGppdUtJNDhlUEpic3B4QnVMNCsxdXJjM3BOa2ViTkRhbjA0bkRac0ZVWDQ5VHE0WFFTTHk4dkZyVmtUWnFiU1dJcm5yUTVnb0REMjJ0VGNBQUVMUnEyOVYzL2ZzRHByMzFMWC8vNkV0R3Y3U0NIYVdOOVhaV252dm9DMFkrOVI4U0ZpM0hzMFRWWWFwZy9pc2ZzZUN6elZ6NjRsSStQRkttU0xEVFFPVmxRRk56aEQydmZON2xZeHIyZmN1K0Q5WjJ6eVFRdFdnTUJvby9lWkhDektwemRqK24zbm1ZbFNsRFdabVN6Q2ZHYUQ0Zk1wU1ZLVVBaK01SSHYrcTgrUjh0NXNpR0l5MWZuUVc3K1BtRi8zYnZSS0lhamNGQTVkb1B5Zjd4ZUpjUHkzN2pNWW9PVlhmdlVsNTZ0R0k1KzU5Nm5iTlhhdTlnOTAyWDhNdW1RNWhMeTVIT0lUdkp3WWR1b3JpdzVRVXFOeTBqODh0ZDNUNVhiR3pzUkU5enRGV0VWR2dkU0hBNm5UaGxHV3QxT2ZXVmRVMFZDV2F6cFVscmM5V1JsaUUyVWhKNUNqVjNoWUZuMEFCWmxvWHE2cXFCZ2tvN2U4R3NtV3gvWUI0cjc3Nk9CL3A3c1dqRHdjWkhrc2tqTDJUVmdvdG8vZTVmOWYyUDFQVWN6RGNMTDJmbE5VTjUrYXZ0VkNqME1PMGlkTUtsOUpxY2VucnRyS0tFMmxPRk9OdVpQMmRESFhYNXBiU2g4WlJzbUU3bFlERlptajVTaDhVVFAzc1dnVkcrcDMxZ0d2SlBVVjlTeGEraEJlMTUyM1BNT3JDZldRZFc0ZWNkeUtpMSs1bDFZRDhUbjdxMmVYaVNTN016NWVkZ3FiTjBycUU0SEppT0hhRG1WRG1TdzBHYjlyaVNqYnFjZk95Mkxtd3lRd1M5WnM4aU5QRTByZVVjTmt6NXB6QlZ0TS9jYWkwdHhGelQwTTVhMUZDYms5OWluUUtIcHhFLzR5Sk9GK2lWTENacWMzS3dObGk2T0xzU2tpT2ZzbjBpU1lzZXBQOWZic0Rnb1VBNlRSWFVuY3B2ZDYvSUFBNExkVGs1WFpvbnllR2dldWNXVERVMjE1eTN1L2VLMnpLOXVLOWhiV2haY3FMUmFDN2J1SEZERHcrTnJja2NiZksxdVZzT3VJUWFndWp0RFJvVkRtZGpMYWtIdFZGZERhVTUyUlJrNTZIMlRPOW9McHR5NG5SS1NGS3p4Z2FJQm9QaEtoQko4dWpnM2pQSUgwdEpJLzJRbWlHOW9xQW1wODBVN3NncVpNSkZZd0VJanVsRlA4ZFdkcFk1dVNSY01VbTdZOUx0dkdvTVplWkl2SDBscXJNYlNIMy9FNkw2dUpydTJnNnZaczJzeldpb3dxd2Z4dVJQbmtldkJmT3hMV3llL3lBcVl5TFc3T05FM1A0dmhsOC9yc01yeVhXNWJKazlENHR2TDdSeUpaYW9TVXg3cGJrL2orM1lKcll1V2s3eUcyOFI3UDhyNytySWwzeXk0SE1TZXRWUlZpUmhyM0l3ZXYxYUxKL2V3L0hTa1Z6MDJDekF3cGFSL1lqOU9Kc1l6UTdXL2UxRkxDY09ZamM4UmZWM0FSaEd6bUhNUFhQYzVtZ1dXNjZiaTYydW51cFNQeWF2WDBIQUdWclo5aFByV0hYTjAvajI3b1ZVZmhJcGJqb1h2ZkVnV3JkZ3luNzFYbkxWS2l6Wm1VVGUvUktwMTQ4SEpFNjk4d2k3bC95RWYzd1F0ZmwyUm42NGpQRFlqZ2RSdmZsOU5qLzRMdjc5RTdBVVpCSHo0RklHVEl6cjhKaTg5LzdCNFc5MlVsdFR4RS96NXFKV0J6RHMvWGNKOW9XQzl4N2hwemUyRVJBWFNIV3VqWkdmZlVwa25HdXhDcGZjejRHZEVtTDJMcHdhYjZ6K3ljejg1SituZFEyVXIvc1B1OTllUTEyMm1ZcDdydWFFUVVYUCtVL1JmL0lBQU16N3ZtYjl0Y3VSS241QjZuTU5VOSsrRnhWUXZXTTVQOXo5UFBvK2ZURWQrNFhFZjd6YmRBekE4T0dwWTRGVGJxM05CcklOQkJXeTdKUmxXWlJBbHB4T1dSQkUxR3FYNWlaTE1vTGtiSkgrMFZCeWdyMHJ2aVF5MmtpSjFJQzZ0Vyt0MFZIbjB0YWFUZEJ2di8xV0o0cmlWUzFYM2NSN083T1lNK215VHJhSGxiSTZCeVA4UkY3NGJBM0pvMGNSN2dObHRXWUk5MUhrVmRjTkdZYTh1d2F0citzQktmcmdFZmEvczVLb0YyNXh6WEsxbHFscnY4U2dzN0g3cWxGa2ZyMmZsTm1KN1A3cjM0aCs3RE1HVGV5RFZIZU03OGJlU3NYbFd3bnU0RG1yMzU1T1ZmQVVydmo0TWRmYnVCVTlqTE91bElyOWg3Q2RKWHRLUHJHSHdCYzJrenJjQ0E0TFRxRHdkQ1owOUFpbXJGakI4U2ZtVWhYM2QxSnZiS25kU3FVbUJxNzltbUIva2QxWERTZjMreXdDcHNlZm1Wc2dhZ1NYL3JnVmpSckF3cllwUThuZFBaL2V3MTB2RSszZ1M1bjQxRHdjaFZ2NWFzSmpKTTdhZ2lGN05Udi9jNHlMTjIvQ3oxZWsvSXRuK09uNTk1bitlc2V0UUxLWHZrdmNveCtRUEtNM0lPSHNnaGJWNCtiSDZYSHpLVllsWE0zSUZTc0lhc3hrcnN2ZzUzK3VaL1MycllTSDZjaC8vVzUyUGZjK2w3M1YvSEtxMm5tVVN6YXRJeUJZaDlOaTZkRGZHVEo1QVZNbUwyRHJoRGlpWHYyY1hyMWJwa3liSFVZdS8rWTUxSlljMGdmTnBLemlYaUo4QzlsNSt6OUlXcnFSWGttaDJQTzM4UFhNcDRpYnVCdzNWU0ErUG9acDgrYk5XN0ZzMlRLcnl4eEZJeURiWlJBRndmV2Y0Q0t6eGVsMHlrNm5VNUFsV1JhY1RuY3RxYnNCakNHQTZObXppSXdNcDJmUENOU05VVkNYR2VyMFNQRm82VitiT0hIaWJLQzV6N3hrNS9VdlZ1TklTR1ZCLytDdWVuVXc2RFJvUkVHUlVXZUltdTByeWZ3NEhWTkZIWTdxRXFTK3plOGFROHBvRERvQUxTR2poM0g4d0NHWUFxV0h6S2kyZnM3ZUhTQWpJVHZ5cWNxdUozalE2VjhxK3FRVXhJemIySEszbGZEVUZIcE9tNGJCb3pKTVAzUXVjdzdQUFhzM0ZuTWh2WWE3VFVHMTdsZlZFYXZpa3dqMmR6MTRodWhJNnFxcnovaGNnbWpoeFBPTHlkOTVBTHRWd3B4VFMwQmxEZUFTYk9FalJybUdiQnhHY1BCSktyTXNtSGR2QTIvSWV2bFpWd3YweWhQVUhQVEM2WFllblE1aEkwYnk0ek4zNERoeUNjR3BZK2s1NFlJekhyZmxXQWJtcUdHRWhibWlDQkZqeDFDN05MM0ZHQUltemlUQVhjdXQwdjI2YUVOZ3loQlhkWWd1QWtOSURaWmFjSmJ2b3J6R2k2QXYvMFBWbDRCa1Jxek1wS1lLOU0waUkvcjU1LytWdW16WnNzMk41cWpzTWtjZElEdGxHY25sYjVOa1NYSzIwdGc4b3FSYU04VS9iYUdpcHA0Q2pSZnFSaFBVNld5ZDR0R2NrQXVJYXJWcWxzZjdtazlYcldhckdNZjdVL3ZUZVY2NEY2Rythc3BxbmZ4bHhrVkFBLytwaDFBL3ZTS3BPclk4VzdvcVRxNWp5NlBMR2ZmRmZ3bUxEYWJxNnhmWjhyV3RJd1hQZFJKTkVCSFRwdUxqWHFnZVU2ZmpHKy9kNGJYVTBhbGN1bTA5UlZ1M1V2ak5VdExmV2N2TXpXK2hQVWUzS3VvTnA5bEhVdE8vY2hkNVNRVlBCMVkzaWhiYWU5MW12L29RK2FVcGpGMjJDSjIzbXQzWERVT1c1Tk9md1gwOXI1akJSRTJkNnY1OEtqMXZEbWd4bFBhdUZYWGI4MXlTdHAraXJUOXg3TEhyS2J6dVZVWXRTRHRuMjB2cmMvYWVQMEU4VGRHYmZ6UlJVNmMybGNUMW1EYTdqVnNnTEN3c0Rkald5dGZtbWJBcnUxSS9YSlJHc293Z09KMnlTMmE1M0doVm1ZZEJOakpnU2hyUlBZeUl6Y200enZiU081QmxXYWlxcWt3U0JPSGlSbjlaK3ZyMWZGWVh3anRYcGpTcGxKMXRtWkdKUmpZZnl3YWdMUGNreDlTUnBJWXEvclhUemxod0NPcnlYRXdlY3N0ZVZJUWMyWmZnMkdEQVFkNjZsbzFIVEh1MlVXOEJzRkcrYlJlaEF3ZUJiMS9DK3BocHFBc2diR2dLWVVOVENJaUxRV05vWGpodFNBaDFCUzBicURqcTZzQS9uT2pwc3hqMjBwT284NDdpNmZ1MVpXMWwrMTBQVTFsMzd1YkFLeUNBQmpmOXM3UDRBSlZGTGNtUjFIb0Rsc3J5cy9lZ2h3UmhPdFdTYnJxaG9JQ0FJY1BRZWF0eFZoeWlhR2RMUHJtU0hWdGQ4MVc0aTRxcTNnVEg2UWdaUGhwcjFpSDAvWVkwemJtZk1haFptQm1DMERxS01WVzFsTlMydWpvTThja2szTGlRNVBtWFVYMzB4Qm5maTY3UElIUUZ1eWd0ZFFVaGluL1lpbC95NEYvTnFLUDIxV01yNzFvRVhSVTNqQkJ5c1JwaW0rY2hMZ3BOcTdlaldxMU8yN0JoZlk5MkJKdXEwV0pzbEVlU0pDRUw0TERaV25TMnNwZ2FFUHo5Y1RpdDFKZG5vMjRVYW0yckRKcUNCb0tQajgvbHpjWjBDWXMzWlZHcjh5THRXVmVvWFJ2YWkrMExKd0R3NU5zZmtGNXNvODdtWU1haUpTUU5Ic2FITXdZeGZjd292bnRuRlplOWVaS2FxbHIrZXZrMGdwVVN3Tk1MdHJBUkRKNFp3dW9MUjZBMnBuRHh0NitoSHpZVkkyK3pldVpjdEdJZHVxQ1Fsb0lnU09LSFdaZWpwZ3FMNzBRbXp4Z0V3TkJYWCtiNytkZVM5MVlDYW5zNTlTWWprOVl2YVNMUTdYWExQV3k2K1Q2K2ZGOUgzTjlmSlBuS29kVHYrSWlOLy9jSmdYM2pNR2RuRW5MN1EvaDd2SlNkNVNmSi91d3JZaDViVE5BNVNuOExtWGdGcW4vT0lYM21UNmo5SXRHRnROUnpqSmRmejlGYkgrS2IxYS9nTi81NnhqOTY3YSs2WHZUY0JaeVlONStWSTk4azRwcUhHSG5ITkdLdXVaWDFDeFpRdDNFZ2xoclFKN1JrWGJFZldNMmEyV3V3WkdjUys5ai9JOEFiR0RDVjFKdTJzMzdDT1B6N3hXSStsWTNmcFE4eTlwNUwzVTl5VHdiZmR4RmIwMGFnOG90aFRQb0tnbjNneUVOenlEMnB4emRVUzlYeFVsTGUvdHVaMzR6dklGSWZ1cGp0MHlmakh4OU1kYmFOa1o4cyt0VnJrbkRUUXJiZlBaTmYvQTNFM1AwU0E2Y25kZkNtTUpMNjJrTnN2V2tLSitMN0lsZVZZZ2xLWmZwSGk5b0kyR0hEaHFVQ3VaN0NUWlpsdStDS2tFcXlJTGpOVVFtVmx3N0pWRTlWdGdsYllEamFXQzkwNFVacU0zOGlxL3drSllJT1lmRGd3ZTcrQm1Zc0ZvdGd0VnF4MisyQ3crRVEzQ0ZYbGRQcDJBUDBQeHUyVlVsVlBYcURBVC90NzZPdG5lKzBSWjNEZ1NrL0gxVmdCRHBEVzcrSXM2R09obG9MUGhHaHJjd2RpWWJDZkdTdlFBekJYWk5Fa3EwQlUzRTVtc0F3ZEw2NjMyVzlaSnVKK3RJNnZLTWorTDMwZTJkREhRMmxOWGozakViVnpzdllXbGFNcFBORDc5dlN2SmNzSmt5bEZYaUZSYURWZFcwUDJHcktzTlpZOFRaR296b0xsQ1pPVXcwTkZTYThvNDN0anYyM2NhbllNT1VYSS9xSG9QZHZQNWxabHVXam9xaTZBNmdINm5CUkdwa0JpNEJnRjBUQktRaUNwRmFyWlkxR0kzdDVlYUhUNldTOVhvKzN0N2VMMHNoYmo0OVdUMWpQSGk2TnJka0ViZGJZY0NmSW1VejFhV2RIcUxrY0h1R0JTcm5RcnpRR01FVEhubDc5OS9iRjE5dTMzYm4zTnZiczNtcHB2Zkh0MmZOM3ZWdEJhOEEzMnZDN2prSGw3WXR2QjZrYVhxSHRWeXFJT2dPK1BiczNkcTEvS0ZyL3N6aDJneisrQnYvZmQ4dUtXZ3lkN0NOQkVQb2VQSmpSZCtEQVFmdmJtS1BJVG1Ra1FSQUVTWEpwYlkyQkJNODZVb2NrSTJuVjJHd1d4TWJHTE0yNWE4MytOVUR3OHZLNlRCRW1DaFFvT05lSWo0OGYwY29VYmMzNFFYT1psWVNuN1BJc2tMZGFiWWdldmpYQjdWc1RQQngyb2lBSTA1VXBWNkJBd2JtR1hxOVBvN242b04wV2ZhNGZxWkg1UTJpaHNUVjF0ckkxYW15U1IrREFwYWtCZ3RuY01CV0lVcVpjZ1FJRnZ3R01SNDhlR1VqTDhxcEd4by9HMUROQmtqeUw0NXMxdDJiMmp5YkIxb1p6emVYZTBHcW5LblA5MjZLMHRKVDgvQUpsSWhUOEtSRVRFelBNVTJOem02T3FWdVpvQzY0Mk40VjRDNjFOZEFjTW1sUzd4Z1BkWnFnaTJCUW9VUENiUWFmVGpXK2xyYlZuanJhUVdhMERDWGE3SGRIVERHM1UxQUNob2NFMG9YMHoxTW5Pak1Nc1dybUJlNWR2NHYxOXVSNzBLekpaZVhsOHVtMHZyMjQ4U0szSFVRNXJBOXNQSGVldGpUdFpubG1pck9CdmlFUDNYY0dKSGNYbndVZ2tmcjU2UEFXbi9qaHpheXZOcGJxdzRneVBybVBiWlpkUzJxWERiVlJsSE1KK0ZoaHhhamN0WWNNVFM4L3FQTWdORlpRZXlXM3orYy9YakNVdnAzdm1hRWJHZ1Q0ZVdsc0xqYTN4cHlWWG05UW1RaXEyTWtQeE1FTW50cjgzNi9ocWJ5RjlZbVBFelJLVUFBQWdBRWxFUVZTNHRIOFVtN2RzNFBFZkdrZHU1cjMxZXpoU1hNSmJQMlMyRUd5bGVUbThzemViL2IrYzVJdGppbUQ3TFdFdEs4QnV0cDBISXhHSm5yY1F2OEEva090ZzFTdnNXYkwrakFXOXBTQVBSMWU2VFZQT2pxdHZwTnA4Rmw0dnBrb2F5czR1LzU2VSt3TWIvdnBpbTg4dGVUblk3ZDA3VjY5ZXZaSTlOYmJUbUtONG1xUE5XcHRMc0ttYm82R05UQjR1TTFRVXhmWUZteGpBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JuU3pHYzBKOFBFdnF6ZXNOYVBxaFRoTTI1UVBYT2RJNHZYNDhkRFFFanA5SC95dkZOU2JxMjRxUHNlK3gxekZaZkV2OTJOeUZHWDhCQzNySVBLZHA3Rkx0ZFRmQ2tXZlNabm9vQVZQK2NUbVdsbm9ZOUc2aXBGSW03NlhhTVNlNGlkVWNkMmUrL1ErSCtrM2pGRDZIL3dwdnc5dTQ0KzlOMDZBZE9yTm9Pb2hidjBhMEViODUrTXBkOGdxbmFpaUYrQ0gwWDN0QTVBK3hweGxDemR3MUZCZjcwdlhRRUFKV2JWMUlsSlJKL1VSSmw2ejZpUVcya2NuTTZGbWN3Q2ZQdklEVFczLzJ3bDNMOG5YZW95Q3JCa0RTTy9yZGNpVmJkcUkyVWNlSzk5eWc3VW9CWHowUVNicjZWQVA5cU1sOStuNG85R2RUVmxiRi9jVFpDWkRLRGIzUjVieHdWV1J4OTkwT3FUOVVTTVBZeStsMlY1azR3dHBIMzBWdWMybm1TZ0xUSmRFVUJxL3grQmFkKzNJL1pWTU9KRnhaVG9CV0puTE9ROEhoLzEvbVd2VXZlanFPb2pRa2t6cC9mVk5qZXNRSll6YkdYbjZVOHU0cklXVGZUYTB5L0pzMHcvL1AzeVB2aEVLcUlSQklYZG42KzNBOWVvdkxnQWVUaVhQWXRYb3lnQ3FUMzN4WTJrU2FZVCt4azk1SlBzWHRGTStDZXUvRnpsN0JZOGpNNDlzN0gxRlU3Q0oxNk5ZbFRoaUlBM3Q3ZUk0RFBXcHVpamVZb3NpUTVKVW5BNlVRbHFtVkpJd2xPdTAwMjFkUmdreVFzWHQ2SWpWTFBuWlNMTENOVVZsYjBwNHZOV282VWxwTm9ERkdreXU4TXVXUW5HK1kvVCtqTWErbHozUlVJNXBvV1JJQW5sMzlGNkNXekNkQmxzL1hCMTVwTW9acENPMUd6cjZQM3ZHa1V2WEk3QjljY0E2Qm1Wem83L3ZZNG1wUnB4RTdvd1k2cnI2V2lSZ0ljWk53OWgxOHluU1FzbUkrUGVROGIvL3J2VGg5UVRYZ3NZV21qS2ZuOFZWcVNiVFN3ODZicmNmYTVtSDd6YjhRL1FNTGE2UnYrOUdQdzZ6dUl3bGZ2NDhUdVFteFpXL25oNGY4UU1DalJwZk9zLzR3ZEQ3eEk0T1M1R0JNZGJMbjJUc3dPbHhXeTg1b1psSm1NSk41Mkl4ejlqQitlVzk1a29mdzA3eklLQ24xSnVHMCs0YjI4cU0ydEJMVXZ3ZVBTOEU4TVF4dmRsN0MwTk1LSEpycHZLWjh0TStmUUVKQkNuOXV1b3Y3Ylo5bjl3WFlBU2o1OWxsMmZIaUx1cGhzUjlxMmtyTER6eW41ZDNFREMwbEpSYTcwSUhKTkdXTnA0ZklKY25JaUZTeDVqMTZjWnhONTBNd0dhazZ5ZmQxK1htSG5yMW4xS1ErU0Z4TThjeWFFN3J5TDNtSXRFTSt1NXY3Qi9WVGF4Tjgwbk5LeVV6ZGM5MU9uNS9JZU9JV1JZRXZoR0VKNldSdGk0QzkwMFR5NnROR2RGT3NaWjE2QXQzY0pQenk5ek9iUks5N051NWkySWd5YlJaOTVsRkw1OEI0YzNaUUd1WmkrclYzOFgyWjZmRFZrV1pBUkJFQVFRYUhLak9lMVduS2pSQkllaURkQ2hibDN3anFzMmRIeFhIcVpUMllkNTg3Q1RkKzdzcDBpVzM5dDcxVkNKdzZGSGI0d21KRDZDa09TVzM4ZGRkeWZSSS9valIxMU54dVVmWUFPMGhETGdyemRSc1g4LzVtb2Ivb1BpS045MUVLYTQraVlFWEh3TmZhYU1Ba1lSdCtJOWNqY2RJMmhVSmNjMk9wbTQ2eTU4TkJCMDk3MWtwVjVMVmNPOUJIZEEvYThON1lreDFNZ3ZiVFE3SzVacUs0RmhZUVFNU0NKNFlITG5RcngwWndkak1ETHl0YWRaYzh0dDVCaHE2ZnZpUndTSE5wY3pSYzViU095WVlUQm1NTGtmRGlCL2J4VXg2dlhrbHZkbjVyMVhvd0w4NzcyRHIyZThqdVhST1lnWnE4a3BUdURLcjI1M01ac2tOOWRHaHFlbVlqOFVRWmsySG1OcU15ZGMxZnJsMUJpbk1mNkdpNUdCUVhmZHlLcEZYekg4eGxIa3JsaEo3NzkramZHQ09Jejk3K2ZFaDFkMmVyL2VQZnZnM2RNWGpVWkhTR29xb1labW9aRzk0aXY2UHZROXhnc2lJUGtKY3BaZVFNR0psNGpyM1hFSmwrYUNTMG0rS2cwQjZEZnpNM0xUZnlBbWZqQkhsdXdpZWRPUGhJYW9rZnZmVCs3U0VSUmxPWWlKUDMxOVYwRFNNSHhWK1FpR3ZCYnowSWplQy8rT2NXZ2dnZlpackhyT1ZWOWU4UG43YU1iZlN2OXBvNUdBZ1F1dVlNZnlkSkxTWEp4MUtTa3AvWUU4VDNOVUVJU21aRjBFUVVBVVpVSEVwWmhwdk5ENWFuQTZyTmdGTDVkZ2ErenUzdmlqVXFuR2RqYlpGVVU1TFBqOEFJdHVtRW1pUWFsbS83MmhpcHZFeUhzeU9IRG5ISDRvdEdLODV1K01lR0J1VTMybFY2Q3I1RjNRYVJFY0RpVEFXWkhKK2hrMzRUMXlLZ0VSL2pRVTF5UDVORk5TZTBlRU52Mi9QalNNNnNvU0hLWGxXQzJGN0xyMXhpWWFIcStrSkxBQzNtY3k4a0NHdmZvTSsxOTltQy8rbmtmQWlNc1k4Y3FUK0hhd3B4eWxSUjJPUWRkblBER0ppemhlTUpqeG8xbzJHTkdITmRKL2EvRTIrdE5RWGsyRHN4aXBNb050Tjl6WVBLb0I4VWlBdGJBWVRVeDh0K2lhNm92emNSemR3NVlibXZzbkJQY2U3anBmYVIxQllXRnVWU3dDUThDdktRZzFZeWsxbzJ1MG1NUkFER0ZncTZ3RE91WkkxSVZGTmJrcGRNWXdHcklxb2FZSXM5bk1vWHR2NVdqVG0rQUNWTmpjOHVYTS9LcnFRSmRUVmFWUklWdXRycEVYRldENjhRaWJiOWpjclBrTmFTNXlDZ2dJU0FZMmVHaHJyaDhCQVZrV0pLZFRrSjJTSUlvcUpFbVNIZVphb2FiVUtodDhmQkYwdHJZYTI3MzMzcXNTQktGRDN1aTZpZ0p1K1dnYmQ4NmR3YmdJYjBXcW5CZFEwL09XQitsNXk0UFlTak5ZTjI0MlJkZk9KZHJZZ2U5bTR3b2NRMjVnN0w5dUIrRDRFN3Z3REZnMkZEYzMzREdYbGVKMVlUanFNQTFlaG5oR2Zmd3BCdlhaR1huZ21GbE1HRE1MMlZMRmpubVRPZjdkSEZKbW41NDFRaDBXMmVFWXlyOTVrZHpxSWNUMytvV2ZYOS9BcUR1YTNjWG00a0lnQmJEUlVGaERaRWdBM3VvSVZKR3BUUGpzdFRhRjlqWmpCUGJjbmRna211akFQU0VJQW5LcjdpaytFZEY0cFlReThiMkgyd3FVY0gvTXBhVkFIRmlLTVZVN3Vpd2dCRkZxMWR0Qmp5NU1qNld3SEhwSGdGU0ZxUlNNWGFCYnNaUVdJTHMxR1V0aEtkNFJRZUFmanQ3Z3o1QzNsaEVlZUFiS1NqZTZ5T2dqamZoZk5KT0pUN2ZQeUtMUmFFWU1IanhJYytCQVJxdEVYVUYwNld1Q2dDemh0TnVSTkdyc1pnc2FuMkIwWWY3b3ZIV29XNW1oUFBua0U2T0IwMWZOMnV1NGMwazZ1dWcrVkJaa3M3UUFWUG9BNWlXN2lseTNIempFeVlweXJFNHpYMjdQSUNFOGtxa0pvVWdOMVN3N2NJckRwNm9wdFVrczNRR3BBL3FSNktkUlpOSlpnQzFyTzBjMkZSQ1pPZ0JIL2s2czJoaDhBam94Y2FKNjBMQW5uWUtmUjBQeExvNTl1dy85OUV1YWd4RnJQK2JvbWtINE9nNlJ2Yy9BK0ZmNklQaEw5QmxyNDhmN24yZmdEUmNqVnhWU3NDZVBJZmZkMWlIN1J0WCs3WmhxckpoTlRpcDNia0Y5eW91UTFCSG9kS1VjL05jS2dzYU5SRXNsOWFWMmdtUENPeHkzRUpaNjJqRTRzN2F6N1I5ckdmWE5ONFQ0bHJGK3loeE9wUGFuOTFDWGhDLzY1QzF5VWlNUXNsZFRZcitRWVJjRW9oV24wdFAzUmJZL3M0UStsNmJpS0R4R1NiYkVCWCtaalhiUVZHSWovczMyLzN1RC9uUEhZc3ZkZ3h3NWlaN3U4L25IOTZYcWc2ODRPVFFJYldnTTBjUDdFVGhwRGo0dlhNN1BiL1ltYmt3aTVxeERWSnZDR0RSdklqRnpybVRicTRzSkNibWRxcS9lb0w2cmNvMFFBbUljbkhoektkYmtTQUpTUnVNYnJDTnUxa3grZXZGSkFud1hVci9wQTJvaXBoSFZ1M1A5MHI0M25YMmZYWXd4b29ZajN4eGx5S2ZqUWUxTHY1c0dzdnV1aDBuKzZ6V283ZVVVYmRwUHdtUDMwQm1CdnlvNkhuM0JNeHo2ZkJYK2dVR0VqeC9WRkh4cEQxR3piK1RBSlg4aG8zOEl4Z0ZHNm83dXhPcVRUTjlMaGpVcGNPKzk5MzZ2bEpTVVF6UTNVMVlKSUNJSUlyTHNSRVpBRkdSWmxwRkZBYnU1Rmx1REJybTZGSlZhclJiY2lia0NJRDcxMUpOWGk2SjRlaCtiWktmS3BpTGNvTUZpZDJDeE83Q0tXb1pIQndGd0xQY1VlVlkxUTJORHdlRkFyZmNsS2N3WDJWclBEOWxsK1BnSDBpL0lHNHZkUVZSNEJCSDYzNWFNeG1ReTRYUkszVzVLWEZwYVJuQndNQ3FWNnB3ZWM2YmpRM0JTdFdzN1JaczJVMXNxTUhEUjA0UWFtN2VqYjc4VURJSHU2SlltZ0xCaC9kSDFIRXhnVUEwNVg2N0JqSkdrMjJaajZKRkFZRnc0TmJ2U2NjUmNoTDVzRDZYSFRReDgrcCtFOS9BRlJNS256RUJWZXBDODlBM1VGdFlTUEhJc1FYR1JIWExtbDYxYlNkWHhmSHlUVWhGckN6RVhsT0J6UVNvNkx6Qm5IYUJvMHliS0R1Y1FmY3VqSkk1TjZGUjdPZDBZeXJkdkpuVDJYekQyalVEUUJoQTVvaThWaHdzSkdSaFB4ZnBQMEkyZGkrUGdKcXJLZkVoNTdnbjhBM1FnZUJGMTJVeHNSN2VUdis0SFRGVjJ3c2FPd3o4cUJBUXZvaStiZ1QxN0ovbHJmOERxQ01BNFlRUTZiOWRUcTQwZFRFaVVRUFhoNDFqTVdzSUg5d2FOSHoxblRLTHU1ODBVYk55SzFhb2xZdXg0Zk1OOE1Rd1lnYStZVCs0M205R05tVTFNU2krQ2hnN0ZxMU5aSkJJK01RMWIxaUhxOC9MUnhTVmpDTkxoZThFNGZPUUNUcTFhajgwUXovQm5IOGJnM2JrcWJSaWVobGZCeitUL25FWEMvYzhTayt3UzFFR2pMOEZIS0NJdi9UdXFzb3J4dTJBMFlmMWlPaWNpOWdvbmFtdy9haklPWVM2c3huOTRDbzNNWkFISkk5QzdEVHZCTjV5d1FRbUloa2hpTHhsQnhaWTFGRzc3Q1ljWVRPVFkwWGdITkZ1QWVyMCs2N25ubmp1QnE5K29IWEFJNEFDY2dDUUlvaXlxUkZrUUJOUmVPbFNTRTZuQmd0b1FpS0RUNlVSUDdqV0h3LzZOSUFpVC9xaWF6Zm5PeDNhbTR6dmJ5SDM5ZHJKTmt4ai93T1YvbUxVL2N2K2xtRktlWk9qY0ZFWEYveCtBdytIWW90Rm9uNldabzYxZUVBUVRZQlVFd1NZSXpSeHRXcTJMbzgzTHk4WFJKcm9UY3BGbFdaZzllNVpLRUlRUnlwUXE4QXFMd3ljaTZBOTFUN3FZUkx4REZKL3cvNHpYV0swZUdoTVQweHc0YU5sTVdXeDBuN21TZFJ0L1hLbHJhczgwajNmZmZYY1lvUFREVTBERTdQdUorSVBkVTl5ZEx5b0wrNzhGbjJYTFB1NDVhdFRvWXpUM1FCRGRhUitOcFZXQ0xNdXlMRGZuNDBxUzFLeXhBZWgwdXFIS1hDcFFvT0I4UWUvZXZYdTVoWnBuMmtlallLT2x4dWJxMVNKSlVzdkNVcFZLcFRnZnppTEN3a0s3RlRnQU1CZ00rUG41S3BPblFBSGc3Ky9mcDVVWktucjhDSzAwTnlUSlJXbWs5cUFwRWdSQnVFQ1p5ck1wMk1LNmZZekJZRkFtVG9FQ056UWFUUkp0Zld5TnhmQk5UQitlUmZHZUdoc25UaHdQQXhLN2VzSHEybHB5SytweG5DNG56OW0ycWF6VmJDYTNyQnF6UTFaV1RJRUNCWjFDRUlTRUYxNTQzcWVsWUpOYm02TkNjejZ1Ui9BQUVJeEdZNWVLM3BIcXVldVZGZXkxYXduM2NsSm8xL1B2NjZjeElrd1BXSG51bzIvNU9xdWNVaW1BTFU5ZFJiVDdzUGRYcnVTTnpEcDZCSGlSVjJWaHdSV1hjT3VBTUdYbEZDaFEwQ0VtVFpwa0JDcG9JcHhFRkFRRUQ4ME5hUGExeWJLRXV0RkcxV2kwWFJOc29vWUZzMmFTMU1PVjFyN3l1MVVzMm5DUTFmT0dBeW9tajd5UVd5ZWFtZmptbmhhSGpVZ2R4VFV6dzlHS2tIOTBENU5YYk9QeUFWZDBVdEdtUUlHQ1B6dWlvcUo2QXBsdVFkYWljeFZ0b3FNdTRTYTZKWjJnVW9rRHVuWVpyeWFoQnRBenlCOUxFOCtNbWlHOW9nald0ODE4N2hzVjNsUnJGeGJraCtpd1k1V1VSVk9nUUVISDhQSHhpZk1RYXExYjhqWGxzcms3V0NGSmt0Q1U1Q1lJd29CdVg5RnU0cjJkV2N4SjdkdU5nMlErMlhxUVljT1RNQ3FrSUFvVUtPZ0VHbzBtb1pWUWErRmphNTJvSzh0eVV3bVlBSFNQVkUyeTgvb1hxM0VrcExLZ2Y5Y055aDAvYitYamNqOWVtRFJBV1RFRkNoUjBDbEVVKzNob2FXNmhKbnVhbzlBaWdPQVNiRUpwYVVraTROWDFTem41ZE5WcXRvcHh2REsxUDExVnZBNW03T0t4bjJwNTU3bzBnaFZTRHdVS0ZIUU5YaXRYZmhIaUlkeEVXYVlGaDZSbkFFR1dYZWtlK1BqNEpIVDlHakxwNjlmeldWMEk3MXlaZ3I2TFV1M0U4UVA4ZlZNQmI5dzBoUmh2eFFaVm9FQkIxOUczYjk5UVRwK2s2eUhVWE9hb0doRFVhblY4bDY5Z0xtSHhwaXhxZFY2a1BldWkrZFdHOW1MN3dna0FQUG4yQjZRWDI2aXpPWml4YUFsSmc0Zng0WXhCL0dmMURnb3JSYTU1K1VQM2lmUzhkOTg4QnVxVlJWT2dRRUhIQ0FrSkRXOXJqcmJVMmp6TVVWa1FCRUh2Y05oZkZrVngvcDloZ241TDJpSUZDaFNjSFpqTjVtWGUzb2FsdU9pTDZvQTZONFdSQmJBTGd1QVFSVkZTcTlXeVJxT1JSUUJCRUdLVnFWT2dRTUg1Q28xR0Urbld5c1RUbUtLZWFSK3VMd1JCaUZHbVRvRUNCZWNyVkNwVjlHbUVtdUFoM0FBWmtKdStWQVNiQWdVS3psc0lndENqbGNZbXlIS0xsQTkzOVFISU1vZ25UaHdQQjNUSzFDbFFvT0E4aHU3Zi8zN0pwM09OeldXT2lzSEJ3WkhLbkNsUW9PQjh4OENCQS8wOEJGbWJkSTlHb1NiTE1xS1hsMWY0bVZ6a1RHaUx6T1lHY3N1cU1kbi9QTFJGc3VSQWtwU2lXQVVLZmkwaUlpTDhUcU90dGY1QnJWS3B1aWZZenBDMjZLT3ZWdkxtVVJQaHZsb0tLMDNjT0dNcUN3Zjl3WlhGd2swc1Q3NGVWWThJWkpzRnI3Z1Voci80RWhHOU95OUJNKzMrbWdQYkhZeTgrMHBsUnl0UUFQajcrN2ZXMkU1bmlncWlLSXFoM1RxN203Wm8rd1B6V0huM2RUelEzNHRGR3c2NnYzVFJGcTFhY0JHdHlhMnZuRHFkN1E5ZHg4bzdyaUw5MnFHOCtzMVBWUHdaVnNNcmtVbDdkalA3NEg3NkRuR3cvZi8rWDR1dkhUVmwxT1lYSTdYUThpVHN4ZG1VSHZ3RnlkRTlqVThHY0Zpb3k4bkJicFBjNTNOOVo2c3FvNzYwcHMweDlwb3lhay9sNDdBcG1xV0M4eGZlM3Q1K3B4RnFUZFRnamFWVmFsRVV1MG1KNWtWU2orYXkwcDVCL2xoS1d0SVdVWlBUNWlpOVIwZFlDVkNyeEE0YjdQN3hvQ1pzZUFxV3pVZHhBaW9zSEh2NkxnNXZ5TU0vVkVOdGJSQVRQbHRDUUdBZE8rZmZSc1dKSEJyS0pOYk4zUVVCU1V4NDkwbThLQ1M5NytVTTM3T1RVQU5VZnJtWWJlc05YUGJHWDEwSzRwTDdPYkJUUXN6ZWhWUGpqZFUvbVptZi9KTzlONlZTSVF4Qk5sWFRjRFNEaUwrL3hZaWJ4d0tRL2NKQzluMlRTMkJzRUxXL2xIUGhxcldFTiswSUMvdi92Z0QxUlhlUk5GM3A4NlBnOTRWV3ErM1V4K2JXMkZBTGduRG16U01iYVlzbVhkYWxQLzlwenk1ZTNaWE55UW9yLzVoM0tVRi9odFdRNmlqZXRJbHFTdzBuWC91Q3VHdWVRZ1ZVYjNpUGpCMGFMdHU0Qmk4MTVMdzhuMzF2cldMQ3c1ZHo0YnNycVBudVZUWi9aV1hLMi9kMzYzSlZPNDl5eWFaMUJBVHJjRm9zVGF1dTZUZVZDUS9Pd0xKN0dWL2V1NHpoTjQ5RlJTbEhsL3pJaFZzeU1JWUREaHZPRm1XOEVqV0g5dUUxc0ZwNXFoVDgvcXFCV3UxSHg3NDFvVm1OZ01BemUyQzdUMXMwc0c4L25qTEdzRzN2SGw3ZHVKK0xiaDNQSDc1MWlWUkw4YXB2RVlxUFVhTWZ5dVFiSmdKUXRuMDdHa1F5Ri84RENiRG5WbEJsUFFUOHVzN3JBUk5uRWhEc3l0NVI2WnF6ZU1LR0RBWkFGeDJOV0YyTkhWQVJSTVNJSUhiZmRnTTlKNDBsSXUxaUlnWkVleXIvakZ1Zm9UeFJDczRMcUZTcWRreFJHUkNFMWc0WkVmRHIvaVhPakxiSVlQQ2hkMlFZTjAwZGpWLytNWDZzK0JORVI5VlJKUC83SmNaK3NvcGVrY2ZZOVZwNjArUWJrbEtKbWpxVkhsT24wbXZoSTR4OS9KYXVTTXJtNVdzbkpLMzFhWjlWUUZDN1YwbHNhUjRQZVhjZG8vN3ZGclQyQXJaZk9aa1RlOHVVSjBqQmVRbFJGSDFvNDF0cldWTGwvZ3hSRUlSdUNyWXpvUzJTS0tveE5mMVdXVnBNbmtOTG9PN1A1R1VUNlhmL0E1UXNlWjdLR29uUVVTT3B6VHlCZjNJS1lVTlRDQnM2R0VOUXMvNnE5alZnTDYra3Blanl4Y3VubG9iQ0JwZld0Mi9Qcnh5VERadEpJbmo0V1ByZjh6Z0pZOE9velNwcDhmM2hKKzdtMkFaRmExUHcrME1RQko5T1ROQW1YalkxZE5NYVBDUGFvcjY4c3ZRenRwdDFoT3BGY2l0TXpKbCtFVVAvWkMwME5iRnA5QjMvTEFmL2s4NjRCMjRsYWNmZHBJK2JURUN2Y09wemZ5SHFqcGRJdVdxRVM3dE5tVW9rTi9MTnVJbG9JbEs0NkxQbjBPRkw3K3Nuc1hQV3hSeExDRWRyRU1IbjE0eW9sQzBYWDQ3VG1JaVdTbXJyNDBtYjNOL2plenZGMzM2T05td0tmU1lPVXA0c0JiKzNZRFBRc3VpOVRhb0h6UkpPS2dDTXY4WEFUQTBtS2l3T2duMTlNV2grSDdMSjg0MjJ5R21xb2FHcURuMllFYlcyYTNOaUxTdEUwZ1dnOS9VK0N5T1FNQmNYNDBDRFQwVG9ueXhTcmVCL0RFV0NJQzRFVExpb2kycUJla0VReklCVkVBUzdJQWhPbFVvbHFZSGZqT3JSNEczQTRLMnNqaWRVQm45OERmN2RPc1lyOUd5K2gwVDBFVVpsSVJUOEwwRFhnUm5xQVZmd1FHRk9WS0JBd2Y4Q1dzdXFkZzBNV1VZUmJBb1VLUGlmRW14dEFnYnRDYmhHL25BRkNoUW9PTitoNmtCamF5SGdHc3NTRkp3REhEcDBHSnZOcGt5RUFnVm5CMkpIV2xwN2Y2aEFnUUlGL3dzUU92a2RRQkNCYmxJNk9ObVpjWmhGS3pkdzcvSk52TDh2bDJhZFJDWXJMNDlQdCszbDFZMEhxVzN2Y0llSjl6Zit4SmI4R21XSk9vS3RtTXgvUFVmZS90emY1ZksvdkhRdjZaZE1Zdm5vRzJnNGg5Y3haNlNUUHYxU1ZnNGZ3dEh2ODMvWEthL1BPb1NwUnRHd3oyTjBXVmFKZ0xON3A2N2pxNzJGOUltTjRkTCtVV3plc29ISGY4aHAzS2E4dDM0UFI0cExlT3VIekhZRjIrb3QyM2pqeHd5MkZOUXF5OVRSUTdiamF3NTlzSlQ5Ly9ueWQ3bCt3ajB2TXUyVDV4R3JLam1YaFcvNlFkT1k5dTBxZWlWNTQ3RCt2clJKSjU1WlFQYk9ZbVh6bmI5d25rWmJhNk8xcVFFYm9PbTZsUnZBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JubTBOcmk3TlpXdWpEN0RqdmM2b0YvQkdRdDNvTnZlNTlpUHlYUDZiVzlqZjh1aEM3cnQ2Wnp2SGw2N0dqSVdEa05QcGZPYjVweFUxSHRuTnMyVGVZYXlYOEw3eVlmbGRQUklXRnZHVWZVclQzS0hhN211QkpzK2d6UGJYVEpOMks3YXZJWGYwakRWVW1mQWVOb2U5TnMybGtwYXJidTQ3U21pQzhTbjRpZCt0UmZNWmN3ZUM1YVdmOGdpNzViaW5aYTNlQlh4VHh0eXdrTk5iRjJTQTNsSExzN1hjb1AxR0VsekdHWGpjc0pEamF4UUpvT3J5Vkl4K3V4R29WOFJrMGx2NjN6T2h3ZzF1emRuRmsrUVpLanBZanJuZ1R4eDQvL0VaZVNxOXhTVTNuTzdiMEs4eFdMVkZ6YnlRMnRROEFoVis4ZzJ3Y1JPbDNLekZiZlVuODI5MkVHRjFqc09ic0ozUEpKNWlxclJqaWg5QjM0UTNvZFIzZkU1ZzQ4ZnBTZ3FkY1NNNlNwVmdjdnZUNTIvMEVHdzNLQStHMlk3cWpzZjBxM2Z0SWFUbUp4cEF1N0ZFYnozMzdNd3VuRHNOTFNXL3ZaSzZxeUYrWFRlVFVPVVFtbHBEZkJTMUNMdG5KaHZuUEV6cnpXdnBjZHdXQ3VhWkowN0ljV2NPYWVRK2dHM294Zlc2YWcxRFc2RDZvbzZiUVR0VHM2K2c5YnhwRnI5ek93VFhIT3IxV1hWWXVnV25UNmJmZ2VxVE16L2pobVkrYXY5dTNucjMzL1kxVDJWN0V6SnFKMmxGM3hocGY5WWJYK09IWmRLTG0za3hrbkpNdFY5NUVyZnVOZVB6WjI4a3ZES1R2N1F1SkhOSURTNlc3RnRtV3ovZno3c0k3YlE1OWI1bUxIaE9PVHE2akRvb2lMQzBON3hBRFBvTXVKQ3d0RGYrNDhPYTV1LzVSZk5KbWtuREZPSTdlZXozWkI2c0FLUHJtWFhZKzl5R2hsOHdtUUpmTjFnZGZjNSt4Z1owM1hZK3p6OFgwbTM4ai9nRVNWbnZuOXdRbXNsNTdrUi8vN3pYOFIxNU05S2dFTE9WMXl2Tndlc0VtdC9xM2hjWm01Z3lwaTA1bEgrYk53MDdldWJOZnAzLzc4ODRkVlBkSVpteW9sbjNLQW5VSWE4WkdLbnhTQ1RkcWtkTEdjR1R0T3ZxUHViNWpXZGhRaWNPaFIyK01KaVErZ3BEazV1OXlscjVONkhXUDBuK0dTM01LU1I3bS9pYVVBWCs5aVlyOSt6RlgyL0FmRkVmNXJvTXdwVStIMTRxOS9uWnFqK3lucHFBYy82VCtIRnV4RzdpMitXMlprTWFJaDI5REFLSi94VHprTGw5QjNPMHYwV1BFQlRCaUVJVXJCNUgzVXo0RDBxS3hWbGFpaVFyQkw3NHZJUU9TUExaK05WYVRDbDFZQklHRDRnZ2VOS3pUNjZnQ2pSaFRqWlNFNk5Fa0RzR1kyck41N3Q3L0QyRTNQRVN2c2NPUWdiNnpoNUdkdm9tNGdTN0s5cmpyN2lSNlJIL2txS3ZKdVB3RGJJQVdLNVpxSzRGaFlRUU1TQ0o0WUhLWDdzbjFpSnJwYys5enhBOE5WaDZFdHJCMFIyTTdJNnV3b2lpSEJaOGZZTkVOVTBrMGRCSmN0Vlh3ajQzWkRBM1hzUDd3U1U3VzJNa3JMT1pRaFVsWnFuWlF1RzR0R3IyRm82Ky9RVVZlUFdWcjEyTHQ3T0dNbThUSWU4Wno0TTQ1TEIrY3lyWi9mZHJra0RBWEZPQWJGOWZXWVZHUnlkcTBOREpYcktmcTBHRWFpdXVSSEozdEhSTzdyNytZSDUvOUw1WDdEMU9YWFlSa3M3VjRaZm9tSnA2Vm1sTkxaU1hlSVdGTjcyQjlXQ0NXMG5JQStqendBbDU1WC9QdGlLRjhmY20xRko1d0U4MzdKREh5cGRzNCtlUUN2aGlRektZSFhzYnFPUE14bUVvS0tmdnlUYmJjY0NQZjMzQWp2L3hZams5d3Mybm9GZWhpSVJCMFdnU0h3KzNkRG1UWXE4OVEvczdEZkRFd21YVzNQazZkU2VyMG5sd0xHWUp2dkNMVTJyVktaTm5jam5iV25rRWdxM0VWbEhZTGRSVUYzUExSTnU2Y080TnhFVjBvL3BSVmpCMFlTMjd1S1hLQjdIbzc5dEpTVGxURWtoU3MrQTlhdjVUeTEyOGxmTUs5cUF4YVZIMUhFcEQrVHdvT211ZzFzS081VXRQemxnZnBlY3VEMkVveldEZHVOa1hYemlYYUNQb2VVWlJrWndNdE5ldktqU3R3RExtQnNmKzYzV1hlUGJHTFV5MmtwUnJSNFdpeGMrVDhIWnc0SE1HVmUxNUdDOVJ1ZUkzRE96SmRkSCtOYjhzelNDSVMxQ3FrUm52TkRWMVFFQTNscFVCUHdJRzV0QXEvTUpmYnd5djJBaTU4NjJQQVFkYmlCZXgvYXdYR0Z4Y0FFSDdaUXNJdlc0aXpKcDh0MHlhUXMvY0crZ3p2b2xIU3FyK0VJZHhJNU9oN0dISGJtRzdkVCtDWVdVd1lNd3ZaVXNXT2VaTTUvdDBjVW1ZbmRYaFBkREovdG9waWJBNHZmTUlELzZ5Q3plUWh6RHIwY0tobFdhNFZoRzY4WCsxMTNMa2tIVjEwSHlvTHNsbGFBQ3A5QVBPU1hlcjc5Z09IT0ZsUmp0VnA1c3Z0R1NTRVJ6STFJWlQ3Wm94dk9zVXJIK2RUbFRDSXl4TkRGVG5XV292Sy81SEMzSjVNdmUrMnBvQ0JmUEFyOGpkK1Q2K0JsNXhlS2M3YXpwRk5CVVNtRHNDUnZ4T3JOZ2FmQUxmcGVNMThEczk3aXN4NEhXRnh2cFIrbjBIY1hiZmdIZFdEaGozcEZQdzhHb3AzY2V6YmZlaW5lMXpEcHhlaHNVVmt2UEFoRVgwaU1VNmRqQzR3Q20velFiTFc3U0RZWU9Md3F4OERRMzcxZlllbWptRFhmMS9CSUUzQ2Y5Q0ZoTVNGMG5QT0xEWTgrUy9DNHg1Q3lscE5mbEVpRjEvb010bXlQM2dWb2Vjd2ZFTTFWSnpJd3lmNUtyY3BjWWdEeS9ZUVBpWUZvU2FMQnBNdnZsMTB2dnYxVHVEWThuZnhGY2ZpSFRlSTBONFJ4TjZ3Z01NM1BNYlJ5Q2NKNmVsSDlkNGZFSHZQb05lb3VBN09WTXJCZjYwZ2FOeEl0RlJTWDJvbk9NYmxzK3ZvbmpyREwwOWVUMmJwU0daOTl1U2ZWYkRWZDZDdHRSQjJxaWVlZU9KS1FSQVN1KzdZdGxObFV4RnUwR0N4TzdEWUhWaEZMY09qWFIwTWp1V2VJcytxWm1oc0tEZ2NxUFcrSklYNXRqbE5kSGc0c1g2L2ZiY09zaXdBQUNBQVNVUkJWQU42azhtRTB5bmg1OWM5ZnMzUzBqS0NnNE5ScVZUbjlCaHJRU0hxdnNQb2tSemY5SmwzbEJHSFhVTm8vOWdPVkI0blZidTJVN1JwTTdXbEFnTVhQVTJvMFdVbXFVTVRpQmszZ0pLMTZSVC9mQWg5NzFUQ0I4YmkxWE13Z1VFMTVIeTVCak5Ha202YmphRkhBb0Z4alIwWk5SZ3Z2Z2p6c1F3c0pTWUNocWFnOVE3Rm1CcEx3Y292cWNxdHA5OWR0K01kSGtWNGNyUDU2UlVaNzNHT3JzRTNlUXcrWWlXMVdibW9JeFB4and4QTMyc1lvVVlicDc1S3gxUWZ4SkIvTGlJbzFFVkc0NmpNcFdqVFprcCszSWNoZFM3SnQxNkNTZ1JFZ2RxTUhSUnQyVVRsTDFVa1B2ZzAwZjNDdXFabERSdVAybHhNM1M4NTRCZEZZR3dZNnJBRVlzYjBwbmhOT3NVL0hVRHdqY1U0YmpnNmd5dk82dHN2QlVPZ2V4OXJBZ2diNW1LVU5tY2RvR2pUSnNvTzV4Qjl5Nk1ramswQTZQQ2VYTkFTTkd3b1duWDdZelQwSGt6b2dOZy81MHZmNlR6NjlOUC8rQmxYRU1IYStLOGdDSGJBS1FpQ0pBaUNMQWlDTERpZGpvOUVVYnptenpJNXZ5VWYyN25pY0ZPZzRFL3BwTEZZVnVyMTN2K2xMUjliQXkzNDJFUkpsR1c1VXBreUJRb1VuTzl3T0J5MUhpYW5mSHBmbTRBb3kzS0ZNbVVLRkNnNDMyRzFXaHZMbFZvTHREWUNUblE2bmVYS2xDbFFvT0I4UjBORFF4MHRrM0pQR3gwVjdYWjdpVEpsNXdaaFlhSGRDaHdvVUtEZzlLaXVyajZkS2RvazdCb3pQRVNMeFZLcVRObTVFbXhoaW1CVG9PQXNvYWlvcUs2MVFCT0VObVZWc2lDQVdGUlVYSFJHMHJPMmx0eUtlaHluSTJSd3R0SVFKUm1IVTJyNmthUS96NExJN254MHVSM1dsZE1WdXpWOUxpa2JXb0VDZ0l5TWcvWHVSME5xRm01Q080K1BnSHJ3NE1HbGt1UzA0T29BMHpta2V1NTZaUVY3N1ZyQ3Zad1Uydlg4Ky9wcGpBalRBMWFlKytoYnZzNHFwMVFLWU10VFZ6WFZDbjYxYmpXUDdDakF6NTJnTS9yQ1VieHdVZUlmZnpWcTl2REZwSDh6NCtjblNCOXdENU1PcjJwcTVKcS81QjVPMWt5Z24vRUFCNDRrTVBHcHVVMkhiWnVRUk95SGh5aThKNW5RcDNmVHE1OWEyZGtLL3N5dzNILy8vUTBkbUtJdC9HMk5UOHNwb0d0U1J0U3dZTlpNa25xNDB0cFhmcmVLUlJzT3NucmVjRURGNUpFWGN1dEVNeFBmYk51bGZPcUVDYnc0UGtGWklnVUtGSFRQNnBIbHZGWUNUUExRM0ZycWE0S0E2RHBHN2daTnExZVRVQVBvR2VTUHBhbkdUODJRWGxFRTY5dlhMcXFycTloeUpJZnNHc3VmYUVrRVZGNWVnSWhLcjI5UkhDNnF2QkMxSW9KS2hkZ3ExVnpVNjBFRTBVdnY0amxXb09CUERLZlRXZEJLcUxYeXRRbXlJQWcwQmcvVWdDeEpVczRaT2JudEp0N2JtY1djU1pkMStxY2FMeDMya25KVzdTOWg2L0oxVEo4eWhjYzk2R0grc1BDL2dNdTNMZ0hnMHQzTFczeGx2SEV4cmxiRjAyaE54VGpxdTEwQTlQaDRoN0tyRmZ6cFliUFppdHJSMk5wTitSQUVRVllEc3RQcHpPNjJZSlBzdlA3RmFod0pxU3pvM3puTnlyUUphVXh6LzM5WjdtRW12TGVkNnkvb1NheEdXVFFGQ2hSMGpQcjYrcUoyVE5EVCt0bEV0elE4MlUzRmtFOVhyV2FyR01jclUvdDN1OVZWYUhRa1VZNTZUaW44NEFvVUtPZ0NTa3RMeStpQ2o2M1JIQlVCdWFxcUtxdnJsNUJKWDcrZXorcENlT2ZLRlBSaTE0NnByRGMzL1paMTdDUUYrbUQ2K0NnTHBrQ0JnczZSbVpsWjRTSE1wRTVNVVFSQkVMd0JyU1E1aXdHdlRxOWdMbWIwb2krbzFYbmhKYm9jZGRyUVhteGZPQUdBSjkvK2dQUmlHMVZtQi81Nkw1SUdEK1BER1FPNDc1WDMyT1B3d1Y4amtWY3JjZS9zcWN6ckUvS2JUOUJ2eWU2aFFJR0Nzd0tySUlqWDRtcGpVSStMMmFOT0VJUjY5MmMyUVJBY29pZzZWU3BSMW1nMHNpQUlndDR0MkxZQXllZHViQkpsMWZXWW5RTGhBYjU0L1U0SitZcGdVNkRnZnd1U0pHV29WT3BGdU5vWWVBbzJrNGRnYzdvRW0wcldhRFJ5WTQ2QkxFbFNwaWlLNTFDd2lZUUcrQ21ycEVDQmdtN0Jack5sMGRhMzF0ckhKbnVZb1lpQ0lNaUE3SEE0TXBVcFZLQkF3Zm1HdXJxNjNIWUVXcE9QclhVT1cxUHdBSkROWnZOaFpRb1ZLRkJ3dnVIVXFWTUZyUVNhazlPa2ZEUUt1Y2FZcG56OCtBbEZzQ2xRb09DOHc5cTE2MHJjZ3N2cElkVGFwSHMwbWFHaTRLbzhBT1RVMU5SeVNYS2VBSHIvcHFOKzU5SzJuMTF3TmFUTVUxWlVnWUkvT1dSWi91WFJSeDgxdHpaRDNYUkZucHFhaDNBVG00cmdaVUNTSkdtdktJcTkvOGdUNVZXVGk2b3dFNnE3MTVUVzc5UXBSTWNKVUNzc0d3b1UvRmF3MmV5SDJ6VkRaU1FFV1FKQlJwWkJsbVJCbGhHY0lEamtwdUFCZ0d5MzIvZDFmaWtuT3pNT3MyamxCdTVkdm9uMzkrVmlhNWF2Wk9YbDhlbTJ2Ynk2OFNDMXJXM2wvQnllK1hJajk2M1l6RWVaaFgrNlJTcmZ0NW14VDM3UjRyT1QyNzVsK3I5V3QvdjNQNjVad2VqWmQ1RTg2MUgyMW5oODRhaGwwWlAvWU5BVmQzUEo0cTkvMjV0d0ZIUHRUUTh5OUlxRlhQdkdEMTArN0lVbkgrRy9lNnU2ZGFsbC8zbU4wZGYrbmVnWnozQTIyVkMvVzduNi83TjM3bkZSMWZuL2Y1NHpGNFpoR0VZWVlFUkVSRkpEUkVNeUpEVXpjODNNekZ4enk4eTFzakl6MTNWYmExMXovZlUxdDIyN21HdG1kak16MTh6TVRNMVlORFBYeXN6SUM1a1JJUklpSWd6RE1NemxmSDUveklVWndHdnFWczc3OFRnUFpjN2w4em5uOHptdjg3NitQcHpSN0hNM3NLdW9sQk10S0wvbWpaZkpHVFdabm1QL1NjVjVlL0F1OXUwcnh0YU1uMi81aTA4ejUvMXZ6K2hLQmF0ZnArKzQ2YVJkK3dkMjI4NWhGeFViVTZiUDQ0RDkzSkVJSHJmYURyWmloZ2I3MlBDVFRVcEl5RkpUOEFCL1pOUnF0ZTQ2ZGVmcldMT3JuQzZwSGJnaG94MmJ0K1F6YTJ1SmIyY0RMMy80QmZzcmpyQm82NzRRWUR0V2RvRGZ2YnFOdUxiSkRMMDBHZG5sdnVpQXplMm9wL1JvYmNodnNSMHl1T3ZxTHEwY1hjZnNmNzdIelBsUHNudlYvNUVkMDdTbi9MT1BlTGs4Z1oycm4yWDl3emRlMkp0UVcxajJ5dCtaTnlxTEdydnI5RUg5YUNWV3UrZU1tcnIxbnNsc1d6Z0pkYTJWYy9HcTVHOTRqNElEeHppdzV4dXE3Y2VaLy9KYXFrNW5HdHBMR1g3L2k3UzZPSWk5bUJrdkZySnM2YlBzWHZaSExPZnR3ZGN5Y2RKY2lwb1I0MWlycTZtdWQ1M1JsUWFPdkoxdFMvOUNrcXZ1eEVTeFp5R0ZtOWF5cjAwV25mWG5qbzZtcVBqUUQ4MjB0V0FmbTVEODRPWURPRitxaDFBSDI2bWpSOSt5YS9QbUFodHc0bUluMmNUajQ2OE4vTm5HZnBUN2R2OEEvVk1CUGY4M1lRVFVsckQyNjA5RFRsdXhiUmZYRFJySXZibEpGeFdZT1k0ZjVzbVgxMUpjcjJWb3VpN2tDN3pzdGJjb3NpcFlMczBPT1dmbnR2K3c1c3R2S2F4MnMzcmxXMnhUUlRMeHpwdEppYlN6K01WMzJMWDNheHhWR3VZOHQ0ellqcGxNRzlielozR3ZibHNWaTFmbXMvdjdDaFNka2RFMzNjRGdqUGdtY0N2OWhvZm12SWxObjhDVTM0K2dhNXkzME1WKy9EQUwzdGpJbm5JYm1ibDltVHE4RjZkS2cxWWFqck5vMlh2cytQNFlzWW1KakJzOWd1eTIrcE8vMEFPdVl0bkt0Yno4U1NGYmxEVThOUDRtektmd0xHejVZQjM1WHhkanJUL01FODh0UTQvTXJXUEhrTkZHSnYvOXRXelo4eTFsamdhV3ZQUW1lbDBjMCs2K0R0TUpyOWJJMHRjM1VlT3E1cUE5Z2FHZG5LejgvQmpUNzcrZGpEZ051ei8vaEJVRmV5aXZiU0R0MGg1TUhYTTFKZzNzL3U5bVZ1MDhTSW05bmtXTGxtSFJTQXk5NFVieVVnMCtCYjZLSnhjc1pzOVJHRC8ydHd5NHBNMVBHRVE3eTk5WXc2WnZqbURwZUFsVGJ4dUt4UWRVWlVXN2VXTEZSeWh0a2htZUZZOGp0aFBEZTdRTFdIS0wvbDNBclZPZkRySHVWaXgvQjJOcWU5Wi84Q202eEk1TS8vMzFXSHgxbURVbCsxbTIzMG1POWtlV0ZCU1IwT2t5Wms2NENqMHUxcTlleDZvdmZyQzlzV0hya1daYW1nZFFoTmNjOVZPREMwbENLSXFDcmNHRHJkR0Y3SE82Q1VENTZLT1BGQ0hFampONUR2c3JxK2ljZEtyU0tCZDdTMnVKRWNlNWMvRmIzUHJ5Qmo3NG9lWmk4QkF3ZmRwc0R1cTdNR2xZTnN2ZXlRL2FweUk3cHlkZHRVZFpsQithUXBqY0laMGh1ZDB3U1JIazVXWXpKSzg3UmcyQWh0NjlMeU92Y3lJR2N5SkRyc3ltLzZWdFQ5b0Q2NkVEekZuNEpyT2JiWnVLenYzaVpNN3FDcXExQ1l5L1pUaGorN1ZuNm9OL1lYdFZrNWEyNUowdERCbzJoTnlvSHhueWh4ZXhBelFjWmRTRVI2bU02Y3lVVzYraFpOUHJUUC8zMTZkc2E4bjhwMWgvSkpwcGQ5ekkwTzRKVkIxdk9PVTV4UWYycytPSE9wTGo0MG5RT2RqMHlkNFdwbDF6U2V0OEtVTjZYNEpPWTZUL2xka011YkluQ1Rydmk1bmU5VktHNUtTajB4a1llR1UyZ3kvdmNnb2E2a2FXdnZJbWNxZmVsSCs4bk1WN3RlUkdWZkRFdTE4QmNMQ2tncHdyODVnMmRnZ2NLR0RNczVzQVNFcnB4SkFyTTRqVmFPamRPNXNoVjE1R1Nwc202Ris5N2orazllckxzSTZDMFg5NWlaL0NMZkhxTS85Z2ZtRTlFMjhkUnV5UFh6RDRyeXU4NmxGdE1VTW56U2NsOXlwRzl6SXliZlo4Vm44WlpORGJmbURUZ1NqNmRvc09BYlpWYjc3QmpOYy9aL1NvNjRpdDNNbkl1VTJ1azVvZmlwajk1SFBNLzI4Tkk2Ky9pbFNkQ3dkUXNId0pVOTc5anR0K2U5MFhUcGRiYWNVRTladWhpaUtFa1BEcWJZMXVCWTFHVFl4ZUc0aUtCc0RON1hidjBHZzBnMDduSVpSK3Y1Zm45M3A0Y2ZLbHAvb01ZSE81V2IvdkNNK1BHWWF0L0JzbXZMYVJqZytONGRkTURxNVU3R1hGOTNIc2VXa2dGaGxtM3Q2ZlVSLzRIN2RNUnJjTTVNTzc0ZnZROHl6dE8yQnByOE9naVNDblZ3YVpBYTFDUTg4ZUdhakxkMk1vajZSdmRzYXBMVWVObGdSelN4M0NvRG4zTlczNmxFeW1ENi9oczIrK3d5Wk1aQ1E0K0d4Zk5Ybjl2VnJibU50K3krRHNTNkRuSGJ6ODFuMXNPVHlKMUQwRjdFdnN3NnJSVnlBRGMrNGNTc2JUVzVsL1MvZVR0bFY5M0lxK2JReHBxUjNvMlNYdHRQb25HeXpNZStRK1hwNzdERU5tM0FkRjN5T2Z3bXBLNmRpSmxEZzNXbTAwdWRrWklhWm1hcWRMU0kycFJ4Y1JUVjUyeGtrMHRlRHZXUnlEK2wySzgwTXpTcS9MR09DcFo5VVgzby9NcU4vZVJQRzNCeW42c1piTXJxbk1YMWNFRENhaFhRb0o3ZlFZTlZxeXN6UElhYWFZRGh4MkhTUDdaTURsMGN4ZU9JOFNKMlNjVmVWZkRVdlg3MmZtcTQrUWw2SWhyOU00bHZTZnkyNzdyY2dmZjRJemF4RFRoM2l0Z3dsWGYwaGg4RWZ0eHpMS1l4SklhVVVEdnZmTzIrbmZQWWIrS1dOWStKdEZGRDk2RTJtKzQreUdOQmJQSE9NMUVmTUFGSmEvL3pGVEpqL0haUjIxZTFveFF6MkFSNUs4NENZRUlDSDhhN3FvMVNvaUl5SlErM0kvaFBjZ0llcnE2ajZMalkwOTVTTTQ5bU1KOTd6MUZYUHVHRUhucUZQWjFHcjBhaGpXK3pKU2paRmd6S0pQMUhZK0s3Zi9xb0hOV1ZPTHJVMGNadC9qc2NUR0F4ZDJVVEE1UW9mRjNOSTBNZXBQSGQxZHR1QkpacTdkRDhnODhkeDhSbmVKUFBtSGJsYytnMmEreTVCQnVTUkVxYW15ZTNDNG0vdy95V2JmdkpLTldHSmNWTlkwSWxkV1lqMzREU01mUEJRNHJuZkhTMUhncEhSWTk5NS9QNDhzV0VIMnNOZlJKWFprL3YrYnlzQ09KeS9aUyt2VUFZQWhOMTlQRW1EczJ2SENUd3BaalZvR1dhVkMxa2hvWlJYMlJnRTBNSFBLSTJ3UnFRenFab0hqVlRoY3B4ZUJOeHQ5OTYxV29WYTVVY1JaK3hLb3JEVmdNZnRJRWlOTkpFVFpLRDhPNnRvYUxPWW1XditFMkpqUWp6aWd5RklyRjlXUWxPQTdOaWFXQk1sS3BSM1NmRjFPN3BqY3pPL1ZTRVZWSTBNc0pnNlVmRnZjR3FnRis5ZUVkME9TWmJRbzFEYzRzTmtkaFBqWUFHWFNwUHQzckZqeFppMFFjNkw3cnp0Mm1EdVhiV1B5bUJ1NXlxSS9qU2Vtb1dPaUFaZmJIWGdNTG8rRVJ2NTFMMDJualRWaFBINk1LZ1VzTWxSVUhiM3dQcjdxbzZ6LzZQTVd6dmNocGxReTIwYWY5Tnl4azZjemR2SUo3azJqeHVFS0RRYXNlbWNESXlkT1pkNklUb0NMNGkzdmhPd3ZxNm9DektCWXFhalZrUlFiUVhKQ0FnbFpiZGo0MU5nVGFEZ3FaTGVuUlVUUzFMNHpDLzgrQy9Dd2JQNC9tUG5hRnJiUEhuNWF6NlJydHpQTWFKSWxaTVZ6eGdFTW03V1dLcnNnMVhJYXV0eVBlMW40VFJ5bEh6eUlBU2paK2paUGZGRVNkSUFFMHBtdjd1YTAyeWcvM2toeXV6aWFrYytqVlNrNGdvZFFiU0FoeGtaRmxRdFNOR0N2b2JMZVFGSWIwSm5qS2QzV0ZQTXRxemdLUWQ4UlhXSThDY2NyS1ZjZ1RRNTFRNVVmcVlFVUU5UldVeW1NbUlNZ1EyNEJoaEZZekJHVVY5VFVQdnI0TTJVbkFMV1FraXJaVjNFUXFkUFNScXNSR2hWZWpTMUl4TXFWSzkzTGw3L3hzU3pMdzFwM2w5VXgrYVgzMFNWM29mcnc5N3grR0ZTUkptN3Q2YVg1L3VTclBSUWZxNkxSMDhBN254U1NudGlXNjlManViSFhwVXdvK0M4OWpUblVIejdJNTRxRnY3YUwrRlVEbTV5UXdhM3B4NWp4d21ZbVgySGlzVGMraG9TK1hzQ3BQY3EyZlljcFBmQWo5cU5xOHYrN0cxTkNNam1kemkyVms2bFRkeGIvcmZzNXY3ZXM3dDBvZXVrZEZtZnBTVTF1eitBZUhVaHBsOENLclZ2WTJWVmkzOGNmc1A0SEpVUWpYL25HMnd4T0dVM2xwKzlUMnFFZmZkdks2RTBEU1Z2MENOTmVhOGV0VjZSUVdWTE1IbnNiSGhxWjR6MHBxaDBEMmg5anp2TWJHTnpKek1DQmx4T3JobFgvWGdYdHV0TFpyR2JuOTVXa1oxNXovZ1pTbjBoWGRSa0xWbnhFWHRzb2NpN1A0WFMrNXh2ZlhNeVlkUjVzNzgwNDlSSndNZkVrT2I1ajJVZDd5TkU3ZU9LbER3bk5sVGVSMGQ3RG9xVWJxZXhtSmlNcmk3UTJwN1kzQ3plOXplVnpkL0h0Wjg4U3VveFNEUDE3UlBIVW9yY3A3MlVoTDY4UHlRWVQ0NFpleW1QUExpWDJ6djVzVy9VbXV2NVgwMU1QY3I5K0pEODlrK212cFpBVFdjV3JueDRoTjNod2pla003bGpMOXFJRzBqSkNOZnRGTHk4ak0vSTNiRisxa3VSckI1QitVa1ZVNXRiciszSFA4eTk5ZXZENzhtQXoxQjBDYnNLL01xV3ZSbFFvMURzRWtpU2p1RDJvMUdxMUpJUkFDQ0g1dEgvNTRZY2ZUbENyMWEzNzJSUVh4NTBxRXFNME9GeHVIQzQzamJLVzNzbGVNK09iSDBvNTFLZ21KelVlM0c3VWtkRmtKa1JqVGt5aW03NlJEVi8vd0k5S0pBK1A2RWNuZ3hwMnZkbXlqYmJkSWFuN2VabWpqZFhsS0hWSDBldjFaM1JlYlcwdDBkSFJ5UEtaaExKVkRPaVh3NEdkTy9qUC9xUGNjY3N3T3FVa2tkdTVMYmFLVWxaK3ZJZGFLWm9lU1ZHVVZsUmgxNXJJN2hnTWJGcDZaWGNtcWhVTlB5b3VnWnlPOGY4ejBOYVpVeGpjMWNnWFJUOVFyNG1oZDNvaUdkMnpFT1VIZVB1alFxSXU3Y3U5MTNTa1UzcG5VdHA0UDJEWFgzVTUvOG5mekE5U0lnditmQ3VKa1NyUVJISHpiM0w0OXNzdldmZkpWMVE2dFF6c2N4a2Q0dlFCTjhZMUEzTDQ4YnRpU3FvYTZOR2pDOUZxc05kVXNPbVRYZVIvZm9DVTdFSE12aldYaVBPMTZJMms0emY5dTFGOHNKamk4bU9rWFpwQmZHVFFvR2dNOU9tUlNtdnZhM3hTQ2xkMVR3a3lxMVgwNkpGT0pKRGNzUlBKTVZwMEpqT1hYWkxHNE95MnJGdS9sYy9MR25oZ3drMjBpemZUcjF2N3dBdC9WYjllVkpWOHo3ZUhqNUtZa2s1N2s5WVhYT2hJZWtKVVlNN2taSGNoMkRzVWJiWXdvTmNsTkhjazlMM3lDdW9yU3ZqdXgrT2tkZTFHZ2w2aVorL2U2S3UvWitYbUw5RWtaN0xnd1p1STFraWdNWExUb0N3T2ZGMUVqYjQ5L1JJYU9HcnF5ZzNkTFlIN1NoQlZMTmhWejIxOU9nYUNCeXZmZkk4YnhvNWllLzRXR2kwWkxIamdCcUkwVGM5T1p6TFRPejAwU2Faajk1N0VXZys5ODg3MnZZY0FKOUFJT0h6L09nR1hIK0JVc3F5b0pBbTFTa1pSQkU2M0I2Y2lJZWwwT3RudGRrdENDRmtJb1JKQ2FFdEt2dStla3BLeTdZSzhJUmU0cEtyMjI4OXhsKzhqTHU3TUtnOUtTMHRKU2twQ0hhNDhDTXRGS2tYZmZFZHFwMDZvbmNlNTlmZC9aT2pNcHhuZlBjaGo1YXBoMUwxUE1lZloyV1FZWk1ESnFCdkdNWGJSQ2thY0dmMGg3K1J2djIva0grYjlTQ2dIbTAyQ2VpUWFKU1NuSk9HUkpFbFJ5N0xRcW1VUm9kVVFFYUVSL3VDQmtDUUo0WTB2Q0VCSlRlMVlwQ2llUFVCbWVEakRFcGF3QUd6OWNBM2pacGVoU0pFTUhUV0pjZDJidWVFMUpsYTlOQ2ZFTDVqZXRST3haN2hna3lMRXZwRi9tSGVzbVJucXBtVzZoNUI4T1d6K0lLaEtrbEhKRW1wWmxnbnlzd1hBemUxMkY2alY2bDhkc0xralluREhwa0ZDNHBtWnNMVVNJajRWTk9GbHRjSnljY3JFT1M4dzhRelBtZmZhVzJmY1RyMnQvdE1UK05ZOFNKSVgxQ1FFa29Ra3k5NElzMXFMU3FORjFrWWdSK2dDNlI1SWt1UlQycnlJYUxWYXQ4VEd4azc1dFEyT1IyZkNKVWRCd3BucHhvMlZMa1Q4SlJDbUJnOUxXTTZyZkZPNmN4K2hhUjV1d0NOSlVwREdKaUZKc3BCa0ZaSktnNnpSSW10MXlGb2RxZ2g5azhiV0xKOU5NWnZqdHltSzV6RFE3cnplUmZidld2N1d0bnQ0ZE1NU2xvdFFoQkRsbDEvZXU3U1pDZXJmZkpSRlVnaHJyaXpMZ1UybFVxRlN5VjVnazJWWmVEeWVZRk5VQUI2UHgvT0JTcVdhY0Y3dkpNeTdGcGF3aE1VbkRRME5XMXZUMW9LMkVCNDJXWmFGSDhPOHdPWUZON2sxamMyUGpIVjF0dndUZGFER2F1V0hZN1lUc3dONFF0T2ZGVVhCN1FuZGZ2V2lWTE5pOFNJV0xWckUrdTFGdjdyYnF5a3ZZdldLNVN4ZmR5RUM2RTRLVnErbTBuRVJ2TjJPS3RibmYzYkMzZnUyYjZTd05MVFdldmVXTlJSVnRGNGxXbG04azVYTGw3Tm15KzVtODlQSlp3VnJXYjVzR1h0S203aDRQaXRZVDVYemYzUHJCdzkrOTFVelVITUQ3bEF6bEJZYVd4T2dxVkNwMUY1ZzgyOFE0RFlTZ0JJYkc1c1BIQTU5R0RZZWVQcFZybCswamo4c2U0ZStUNjNpdjVYK0F1UkcvcjdzYmZMKzlnTHBjMVpTRmpqSnhVUC9lbzIrODN6YjR5OXo2Y3dsZkZRamZ1VXpWTVpnTUZDNjR5MFdydDd4aSt1OXUyUUxvNmM4MWZwTzZ4NEc1VjNQOXFKU0tpcHJPUCtmS1R0UFRIdVF3b3VBTzJIZE0zOWkvYjRURTZXdFgvd3dxN2VYaGZ5MjhkVy9zKzJBdFNWR2xtd2lkK0NkN0NrdG83STY5T0d0bmZkNzduM2liY3JLSzdEYW0ybzdiSHZXTUgzK3h2K0pHZHFqUjQvdmZlRFYzQXh0S3FYeUZZWUdZNWNYMEpvMnRVK0ZrNXJTUGlRaFNTaENDQVZRUEI3UEJwVktkVmZUdTZyaG5sRWp5R3p2TFJOWnZmNDk1dVIvellaYmV3TXFCdWZsY3RlZ0JnWTkvMFZRbHpVOCtjRHZBMytWRjMzSnlNM0g2V09TZnVXNFptTFlyV1BSVlg5Q1lja0p0SjdLTW1yY09sS2JNNlFvVHNwS3k1QU5acExNb1RXUURsczE1WlZXekVuSkdIWG5LYTlPVVhEVWxMRnArMWU0M1c2UVpkVCs1R1JGd1ZxMGsxTExRT2JObk82ZFdLZDFUVUFHZTAwVmxUWklUVzY2WjZlOWhySUtLMG1wS2VpQ0wrWjJVRkpXaVNYbERKZHVWSnlVbFphamo3VVFhOVNGZEtLeXJCUzMza3hTck9IMEFONWhwY29HbGxndFplVTFKQ1ZibXU3WE4wNDZjeEptUTJnNzFSWGxXSjFxVWxJc0ljOUhBUlM3bGJJcUc4a3BTYUdKdmM1UzVpM1p5Y0xkcjdSNGVCV2xwZWpNTFdtL0ZMZWI2VXMrUWEyV1cxaEp4VHQyWU9oN0M3T21UME9XMVNIbmJOKytnM0ZUTmpONWNHaCs1c0R4azVpYS9RQ2xVNGFRY2dGalpYYTdmY3NKZkd1ZUlQK2FBZ0VmVzhBTTlXdHNhclVLdFZxTjJtZVBFbXlTK3NLakN1Q3BxYW5aRUJjWDF3UnNSSkRadnFrVUtpVTJCc2NSZjZHem1zdlMya0Z0eVVsdjRLMmRleG1XZlRVWGRYeFJzVEYzL0EyOFd1Z21SVjlEbGJFdkc5YzhqMFVIOXJJZERCNTBHN3IwbnNqV01tTDczOCtLeDhZQnNPWFZ2M0RYM1BWa1phWlFldUFBTTVaL3pxZ3N3em52M2hPVGg3Tis1dy9ZRGxReGFNaDFxT1ZFRnE1ZFJtY2RQRFp4Q0p0Mkg2Ym1ZQTFEaGx5SG5Ib1ZHNWZNUENXNGplL2RCbjMvQ1d6TjM0SmVkakJneWdzOE1TR1B0Zk1mWk9xQ3JXUjBObE5VMnNpcmE5YlROODJJclhRN2d3YjlEbDE2Rmc2SGk1b2dqcUV4bVpHTVd0WEFxSzVRczJNSlhhZCtTc1dPRndFNHNHMHBvOGMvU216bkxKeFZKUXlhOWlLengvVEdYcjZMMFNOdW84cVlCbFVIU0IzeEtNdG5qejFwdjhmbnRxWEVuRXZwcnMvb210c0hhL0ZYOUp6NEFnc21EYVJ5M3laR2pya2ZiWElHTlFmM01YRDY4enc1Y1JCUXdjaXNmbFFtZENhV0dnNVVtMWk1L20yeUxEbzJQbk0zajZ3OVFpeU4yS3VLY0diY3lmWVZzd0x2UWtuQktpbzYvNGFRSVhWV01XbkVOV3lyU2NDRUE3ZXRtc0ZEZklwejRUcEdUbnVXb2wzYm1MNzhXNllPU2ZhZFZNV1VrYjlqNThFREZGZktEQm15R1V2dUxTeDc3QzVLdHk1andwelhLTnBWanFIOE50WTlwV1BjckpjWTE5OWJGb214SjRNN2w3T3FvSVJwUTFJdjJDdXhiOS8rTDA5aWhnWnBiS0ZCZ3lZVDFHdUdxdFZxU0U1dWg5bHNscUtqbzZXSWlBaFpyVmFyWkZuV1NKSVVLVW1TVVpLa0JDR1VmVUlvb3NYbXJCUDNQZk9TV0xqM2FPanZOY1dpNTZ3M3hhRld6bkhWSFJKNXM1ZUsvUTJ0WE84Q2JFZU9WSWhEaHc2ZDhYbGZmLzIxYUd4MG5GV2JIejUzajdqK2p5K0gvUGJEQjArS3hGNjNpRnFQSW9Sd2lEOWZmNmw0OElXdFFnaEYvT2U1ZThYVjl5ME1IQnZjN3UyWHhZaFhQcmY2L25hS3hrYjNTZHYrOGFQRm9tMWlva2hzdGozNnhtZW43SGZEMTh0RlRLODdXdDEzL1BPWFJlS1Y5NXpSYzdpalY1UzQ1cjVuaE10Ly9RYTdxUDFxbFVqc2VKWDR2dFo3SDErOE1VUDB1bjJ1RUVJUno5N2RSL3p1OFRYZTlyNWFJV0trUlBIaGo5NXpiK2tXSWQ3YTcrdkxmeGVMeEN2dTlMYmpLaE5YdDQ4WHIzeFM1bXZYTFk0ZHJ4RkNLT0xSbTd1TCs1N045eDFYSlc3czFrNjgrNjM5NUgyK0lsRzh0ZDhwWHZ2ejllTDJmNndSeHo1WklycjlkbzRRd2laK2Yzazc4ZmYzOXdnaEZPR3AzU042dGI5VWZGSHJIYy9hMnFicnZ2Ym42OFR0dnZ2WThQU2RvbDIvZTBXOVVJUm9PQ2g2dFdrblBqN2ExTjViZjd0RjNQancwcEErZlBIR0k2TGp0ZE5FbzFDRWFDZ1ZWN1hUaUVmZkxBdzU1cy9YZHhCUGJ5aHRPVy9mbkNWNjNQRkVxL2YyeCtzN2lPYytMRzkxMytzUDN5aHUrZHZLQy9aZUtvcW5DQmdOREFjR0FibEFOeUJWa3FRRUh4WkZ5cktzVWF2VnFvaUlDRGs2T2xveW04MVNjbkk3MHRQVHljcktvaytmUGx4NzdiV29aVm5sanloSXNpd0xSVkVrWHhEQmI0NTZuRTduZTFxdE5wUjBUWEh4cjdjMzRFNi9nbnN5VHI4OGFkdk8vY1JmMnBXdU9pNXEyYlhyUzNyMnZRYWpES0Jsd09BOEh0dTVHeWIySmJOM2Z3N00vVFBqNVJMNjV2Vmw1TWloK0lta0JnenN5NXk3YnVUQXlPdm9PMmdvUS9OT3pzbG02WDhYNVJWMy9XeDhqbVBHamcyWVhqcWRqaDNiQ2xEMHNHanVYN3pUcXFxSVBidDBLTUN1blhzWU9NRkxHbURLR2tCUDg2a05YdmVCYlh3bTkyWnRYbEtnelZpVEVhaGt5OVlEeEpvL1lNYU1ENzA2amR0QjRlNFNocWQzUGNrVjlSZ01hakFhTUJsaU1SanRPT3cyc081ankyNDdjc0hyek5qcU5SV2Q3bEwySExTUm5hMWp4Nm9uV2JqaVF5cXREbW9xaWtrZGRYUGdpajF6ZTZNSDBDV1JtbEJEVlEzZ3M4cXJxNnN3SllleWdSVHUvcEs4QVhkNnRUcGRNZ1B6MHMrN1Q5TVlhNktxN01JNU5HdHFhcmJRc3RJZ3hCU1ZKRWtKckJzYUVnME44cTJwMVdnMEdxOHAyc3djRlZKVHRxNENlTXJMeTllbnBxWStGQlR5Wk1WN0cvaFk3c2dyMTJWdzJyWEhTaU1yc1NPZ3BBQUFJQUJKUkVGVWR4WXpjc1JGbHVKeGhzWFpDYjNIc0c5M0xnWDVCYXhlK2plZVhMR2RmV3ZuSWdNVG5ueVgvcnUyVWJCbEN6Tkc5V1Azd285NFpNU0pDMFFxZDZ4ZzhMMS9iL0g3dU5tdk1XMUUxb1VQcGhoYmtnOVkwbm94WW9SLzdZWWJHVFU1OXBTUHpPdlY4enJ0RkVWcGV0RlBlcUtlQVVOdm9uZUM5NjhSSTI0a0pUM2w5QVpQOWpGRWVPRVRVRkMwWmdhUHZKRVUyWCs5bTBucnJLZDh5MEltTFBpQy9JM3YwVFhCd1BvbjcyUitSUk1VcWVVVCswV05KaE5XcTdXVlBzZ1hkS1JzVmlzbWsrR0N0YmQxNjhkZk5RTTExMG5NVUJHYXR4YmtXL01CbSt4UGFHc0N0d0JWZUNBNm1wYldhWitpS0p0OHNRdmUvL0JEL2wxbjVzV2JleEY1QnMvNzZBL2Y4SW1uTGNQVERCY1ZybGxpMjFKY1hCTHlsYzNPdm96ZDIvNkRWUUZ3c21YamRuSnllZ1ltbFNFaGxSRzNUbUR4TXc5VHNXOC9EcDhEMldxMWs1N2RuNG5UWnZIUStMN3MyWGZncEcyYnM0ZXpmdDE3ckd1MjNUVzQ2eW43cmRYcFVLcXJmSDA4ZlZuMnhCVG1MczAvcldPeit3Nms2c0JYSkdYMkpqYzNsOXpjWE5KOFFZWHMzSjRVYlBHbWt0UVVibUZYVlZOSFlzMUdTa3U4a2NFZDIzWUVucTA2dlMrOWxjOVlHWWdhS3RUVVdJRUVCdlJQNW1DRk05Qk9ka2JuVm9IMjlGU2FUQVptMkNtMXhnYXVsNW1laHRFZ1UxRmFTa0xYWG5STk1JQmlZKzI2Z3RPK2JFNTJML2J0Q2FXS3o4NitqTzFidG5sWGczT1VrYi85NFBuM2QrM1pRMDUyemdWNVA5eHU5K1lSSTBZY0N3STJGeTBUYzROeTE2U1FaTnhnMzVwR28wYXIxYUpXcTlWK1VQTkZSMlVoU1FyTnpWRzd2V0d0d1JBMW1JWWpQRjd3SFZaZEJBUG43dmUrQVBGcGZITHYxUURNWHZ3cTcxYzRxWE82dVhIT1MyVDJ1SnpYYnZScUJtOS92cDkrdlhwaGtpOHFYQ056K0FUeVhyNkp0SzV2a1RYMFB0WStOWm1VUVJPWnN2eDljbkt1SWtWbnBjclluNDNqdkdiWFp5dG1NL0daajhuc21rSng0VzRtUGZLUzEzVEJ6VVBEZTdCTFNTZko2S1N3eE0zeTlZTlBybTlvOVNRbG45M0xLNmNQWkdydlo4bkp1Z3lqSVpWbEJlL1E5VFF1dFdQVFcreE83OHdqNDA3Tk1HL01Hc0hpU1I4eHNHZDN1bWFtVTFWeWtLNmovc2FyTTBkeDF5Ti9aK1hnM3pGZzY0czQzWUxrSUZOMDNNUzdHVHErSDV1eU9tTXhSeURqVy90Qm5jU2k1ZjlnekxpcldOWTFFNldxakVGVG4yZm1tTjQ4TlA4VnhvNjhuWnpseVZpMERnNldDWlp0M1VyT1dWSGc2Wm4zNmt1TUhuTURhNS9xaXM1WlNhbXRIZms3VjVFMWREem1KNjRuYi9DbjZPeFZXQkxTVHZ1cTZZTkdZcGgyR3djZGorRmYreWRyMUJTR0xiMkduTHhyaVpWZEtPWW1tcCtYWjkvQnkvbkZGTytyUUZkeUU2c2Uwek5qNFhzTXl6S2UvWVMxSDJEakxpUExsNlZma1BmajBLR3lUMW94UVYwbk1FT0ZKTWxCMGRBbVRjMnZyV20xV3FSdTNiclIwTkJBUTBNRGpZME9xYkhSaWN2bGtoUkZrUlZGa1lVUWFrRDdmLy8zbVBIaGh4L2VCclQvSllOTVpXVWxUcWVMNU9RenF4VGJzMmN2blR0Zmd2WWMxNHJXVkpWamRXdEpzWVMrWFU2N2xmTEtha3dKU1pqMDJoYm5WTnRsVXBJdHFIOGxId20zdzBaNVJSV3hsaVFNT20zd0Rzcktxa2hJU1ViYjdGNXRWZVhZTUdJeHQySUJLRTdLUzh2Um1TM0VHa0lkdXRVVnBUalFZN0dZejRHQnAxQlJWZ3E2V0N6QmFUbUtrOUtTY295V1pFejZNMHZKV1Q3ckpuYW5QY3dUNDN1SHRGTlpYb2JPbEhSYXRPNC9SYll2bWNhVHBUbXNublArWFVaQ2lMS2JiaHI1NTNmZmZkZE9FMFdSRGJCSmttVEh5OFBtbENUSkxjdXlJc3V5b3RGb1JFU0Vsb2dJbllpTWpDUXlNcEtvcUNnTUJnTkdvNUhZMkRaSVBYcjB3RzYzMDlEUWdNUGhrQm9iRzNHNVhGSXpqallOb0d0c2REeWkwV2ltaG9FdExHRTVmNkpZaTFtNnFZVHhvd2IrVDlvdldQVXE2VVBHa1dJNC8xOU5xOVg2VWt5TTZRT2dnVkR1dFhwSmtob0FoeVJKTGttU3ZOeHJhclh3QWxzRU9wMFgyUFI2UFZGUlVVUkhSeE1URTBOY1hKelhGUFdib3lxVlNxaFVLc25qOFFoWmx2QjRSSENKbGZ2UW9VTnIwdExTcG9hblhsaCtQVkxEOG9YTHFHN0ZqMmpKN011b0FSZCt6VmJabU1iNFVXbi9zeWN5Y05UNEM5Ylc1czFiZGpYenJaM1F2eWJMa3ZDYm56NnNDakpCMVdpMUdpSWlJb2lNMVBtQlRVV1FyODBYSFpYeHhrWUQwVkVsUGYyUy9XNjNhN1VzeXlQREwwUllmaDFpNHRaSms4T1A0WDhnalkyTjYwYU1HRkZGcUYvTkJiZ2tTUXF3ZVJDb0RRMWw4UWpHTHI5dlRhZUxJREpTajZ6UmFBSUhCS2QrQkJmRyt3SUpIcnlWQ0crSGh5UXNZUW5MVDVXaW9xSlBXdEhXZ29NR250WW9pcHFuZUdnMEdqUWFMVnB0QkRxZERyMCtBR3lhUUxqVXIrS3BWTEpvenZZQmVNem0rQUloeENmaFlRbExXTUp5dHVMeGVIYjA3SG5aOXlmUjFscXdlYWhVVFdhb0Y2dlVxTldhRnRxYXdSQ0ZXcXZWb05GNGJWU1h5NHVBYnJjYmIwV0NncUlvQVhBVFFuZ0FkMzE5L2IvZGluSmxyVXVtWFJ0RDY1RTVqd0JWc3lKM2o0dnk0ellpb2d6RVJZWXB0bi9Pc3J0Z05Uc09WSUl1aVhIamg2TVBQNUt3bkVNNWRLanNQeWZSMXZ5TXVVcG9zYnNxeEFUMTQ1YmZ0NmJUZVFNSjBkSFJxTFZhTFJxTkZyWGEyVW9Rd2QxaW9SZkFrOUlsOCsxTEg1dzdNVEhDazFudWl1VHBjZGZUSnlFU0wyM1JPdDc5cm9wS3hjU1d2OTJDdnlUM3lLRnZHYjlzRzNHV2VJNVhIcVZ6cnp6K09hZ0xjbmlNVzVYeUhUQm5DeXlhOGI5cFg2dlRZNUFybWZyUUc0d0lBMXRZenFFb2lyS3ZYNysrZTFyWDFwcVcxc08vWUlza0NWbVdXZ2thK0UxUXY3WVdpY0VRaGRFWWd4d1JFWUZYYS9PYXBFM2dKdnUwTmptUXJPc0h0dVBsaDl6NUQ5ejA1dW9IYitlaGpBam01SC90NjdLWHR1aTllNjZoK1JyamIyejlsTzU1VjdQczk4TjRkOUsxZkxwNU8xODFYQ1FENmZ2WFdnVmxGYUg3N0RWUVhFcklTdWVLQXJaeTJMb0wzRzdPYVBWdkJlOVVLU2tHdXpPMEE3YnFsdTJmU0RMeWhqQjI5RkJPRlBGM082d1VGNWRnZDdic1hFMWxHU1dsNWJUWXBUZ3BLeW1tdk1vYWZyc3ZZcW1zck54WVZuWTRHTlNjQk5ZTERTbWhVa0sxdGVDZ2dkOEViZExXb3FLODJscWJOaWJraUFnZFdtMkV6d0hYbE1HclVxbUZ2eUloS0lqZ2F3ejM4dVhMVndMZnBjVEc0R2dNcFMyS2kyeVpRR2pRYWxINWw3T1hBTFVXZytyaUdNaitGcGoyRU9RTmd1R0RZSUd2T0czeERPalpINlpNZ0t6ZVVGVHQvZjJoTVRCdU5wUnNnU0ZEWVBBWThPMGkxd3k3ZlJ5RWUxWkF6N0ZON2VRdmdBRmpZSEF1akJrTDJTTzh2ODhZQ1VOR3dzZ3hNQ2diSmkvOGlXYnEybWZvM0xrWFU2YmNROWZPUFZpNW85UzN4OG1URTYraDc5QTdtRHI1OS9UTUhvNS9qNzFzQjMwekxtWDg1RDh4ZnVTMWpKbTVOUHlHWDRRaWhDaWVOZXZSTDA5aGhyWW9lUGVWVFluZzlBNHZzRVVRRWFIekpla2FpSW1KSVRZMkZuVmtwSTZHQnE4NjUzUnFmTDQyZGZNSWFiQko2Z0U4ZDk4OTBYcmI2Qkd2di96cGQ3TkhYenY4bERkMHgzWFg4TURybXhoZnZKZnFZelhjT2ZwYUxybFljbDNkRXRXeGdqMCtabWFIQTRyWHcyTmJvWEFYbU5Td2RpNDg5QlNzZlF5ZVhBa0gxOENJRlpDLzRzeWEycmtOZHU2R0RMTzNuY0NISlJOV3pZR2FIWkE2RVo2WkJHZVZ2NjVVTW0zUy8rT3h0ZDl3YTdhWmZhdG1NMkRhWTR6WXZoaHR6VzRXckxLeXBlcHpVbVZRbk02QXRycGp6VkswQS85RS9zSjd2UkRvZEliZjhvdFFqaDQ5K3Q2TEw3N1kySnEySmttUzN3ejEwRVQvTFVJam9jR2dwaVVpUWt0a3BDNmdyWmxNSnN6bWVPVElTRDA2blk0bVg1dUdaa203d2VrZklha2ZrMmIrMzcvZDZWY1VudzV0MFpiUHZxQlNaK0dlcTdLNTUvSjJ2Skcva3dBLzVhOWRaTUd0UVpxVlRnZmJ0b0FlbURjVFpzeUFqYnRoVCtGUGI2cm5VQytvK2R2eFM1NnZPc2VVQXJwcWIzcjMyVG4vQ2ltMFp6QWcyOXRJeHNCQnFBcy9wMVFCak9uMFQ2OWt6TERibWZ2TUluYVgxUVRBTTdOM2Z3NnNlWnp4azJld1pQazZiSW82L0paZmZOcmE5MDg4OGNRWHpVQXRXR05ya2VMUkhOUmErdFowdmtpb0lWQjFZTEVrSWtkRjZkSHBJdkg2MnJUNG82U2hxUjhxRVFScUN0NElxZnVWK2M4Yy8vdUFqa3RQSFFCb1pPV24zM0xidFZmU0o5WEM5ZjM2MHMxVndxYVMrb3NFMk1Cb2FPa0xTK2tKSTBaNHQzSFRZTlVUWithelU5d3Q5eGxQVVBzY1lNbzVuOUVhT1phbDIvY3lmL290eUJXN0dOejdjcmFXZVRVekx4WFRSNHpJNjh6V3BYOGpiL1JNbFBDN2ZyRnBhMnYvK2MrbkhNMU1VTCsyMXVvU2U4RVlGRnhoNE5YV1d2cld6R1l6YXJVYTJXQXdvTmRIaG1odFRVbTc2dGE0Mm56Z0pua2tTWEt2V2JuaVRTSEUvcFBma2dwRGhJb2ZxbXE5TDZTamxrUDFFZ2JkeGZ2VjdqOEFEaFJDMXh6SXpmVnVLVUYxOEhvaldDdERnd29BQ1VZbzlUSHliUHZzUEhmU1lNYnNMcWVrT3FnWFNabGs2ZmV4WlZjVkFQc0s4bkZuWGU3bEpIUGFzTHIxOUI0NGpCbnpGaklpM1VGUmlWYzNQREVWVTFndUVtM3RtOW16Wis5c0JkU2NRZjYxVmxJOFpFSkxwMEsxTmIwK3NwbTI1bVUrVVVkSEc2bXJxNk8rM283RDBVQmpZeU5PcHhhTnhvWEw1VUt0Vmd1MzJ5MTVQQjZoZU1OelFnZ1VFSW9RZUNaTXVMUDJoVHJMYXp1bVhEY1BUa3hiTlBuNks3bDcxWHQ4c1RPZW1xb3Frckw2TURSbzdZU0xUZEtHd3N5dGtKTUZtZW5lS09iUWgyRHVPQjkrNUhyNWtiT3l3SkFFR3pkQ0xEQmhJdHcxQ0JaMkJiTUJPSi9VZHVwVVpzOGF5cTA5dTZBM3BiRmkrNGRrR2l3OHRlQ3ZqQnJaaCtXWmFlelpWODZDNWU5NzJWMXJDdW1mZXp2bWpDemttaEpxRXNZd0w5ZkwvWHRpS3Fhd1hBenk0NDgvcm4zKytVV244cTJGSk9RRzBSS0pscUFXRVdEMWlJNDIwcVpORytMajQ5SDUvQy9TYTYrOVNtbHBLUlVWUnpoMnJJcWFtbHJxNnF6WWJQV255L3FodmU2NklmcDE2OWF0a2lTcDkwbnZ6dU9pdkxhZWlNaW8vMW1DN3MrTjNjTmhnNHBxc0ZoQWQ1cVhycTRFUlFkbTQvOXVvcm9kTnNvcXFraElUa0VmbktHdE9LbW9LTWV0TnBHY0VFcHhmVElxcHJEOGVrVlJsSjJabWQyZjJyOS92d012aTBlOWI3TUJkaCtMaC9OMFdEd01CaStRbVV3eHhNV1pzVmdTU1VsSjRaSkxMcUZIang3bzlkN1BwYnBObXpiVTFOUlFWMmZEYnErbm9jRkJZMk1FV3EwVGw4c2JJVldyVmNMdDlyTit5SGc4bmtDeUx1RFpzR0dqMDJxMXZob1RFM055WUZOcFNJbzFoVWM2U0hRR1NEMURyU3MyNFgvZmI3WE9RR3BySFplMVdKSlNXejFIcXplU21tb01EL3BGSnNYRnhlL3YzNy9memFram9RcE5xN3Y3dExYbXZyVUlINE9IVjFzekdyM2FXa0pDUWdEVUFHU3oyWXpKWkNJNjJvQmVIMFZrcEk2SWlBaWZyNjExZjF0UTFDS3crSUxKMU9ZOVJWSFdoNGN4TEdFSmkxOWNMdGVIbDF6U2VYOHpRRHVsYjYwMXY1cEdvdzNRRXVuMVVVUkhHM3pwSGVhQWJ5MEFiQWtKaWNUR3htSTB4bUF3Uk9GTi80aWdxU0pCN1VzQlVZa2dDdkdRRWl1OGl5NjRLaXNyWHcwUFpWakNFaGEvZlBubGw1c0lUY1lOQUp0UFczT2ZYRnZUTktzSGJTcDBOeHE5eWJnSkNZbEVSVVdGQWx0U1Vsdk1aak50MnBpSWpvNG1OUDBqSWtocjB6U1BrcmJRMnRxMlRkcnVjcm1XaEljekxHRUpTMzE5L2ZJcnJzZzkxQXpVR2sra3JmbVgxR3RlTnVXbkpEcFJla2RTVXR1V0hwSEl5RWdzRmd0eGNYSEV4TVRnVGYvd0p1MUdSR2g5S1NBQmN6UzR6RW8wcXlGMVM1TGsycnQzNzFMZzhLOXRrREl6dTRWcHdjTVNsdE1VSWNUaE5XdldiRzFOVTJ1bXJZWGtyYlVXQ2ZWWEdQaTUxcHFuZDBSR1JyWUVOb0NrcENUaTQrTnAwNllOUnFPUnFLZ285UHBJSWlMODRLWTViVi9iWlpkbGYyZTMyMThJRDIxWXduTHhTbVZsNWNxeFkyOC8za3hUTzZHMmRpTGZtdGNFMVJJUjRjMVpDdzRZeE1mSGs1U1UxR3I3M25YSXRWb3NGcTlKNmcwa1JLUFg2d09CQkswMklsaHpFNG9RT04wZTRmWW9RaEZOckI5K2RPN2FJM3Zwcy9tRm0wTTRITndPM3Zwb0I5TlhiT0x4L04wY2FSVGgwUTlMV0g2RjRuYTdQODdKeWZuOE5MUzFrS1gxL05VRnZsUVBYeVZVUkZEQUlMZ2UxSXpGMHZhRVZsUWdBYWw5KzJUOGdZU1lHQ01HZ3dGL0hXbXcxcWJSeURqZG9OWm9VS2xVSUFUQzF6ay91QjA2ZU1DNVlNTi9sd1FEMjdMMzEvTjZpWk14ZmJLSXN4NWl3cXJQd2lVMVlRbkxyMUFLQ3d2Zkx5czczTHk2b0JGb0RBWTFINkFwd1RXaFRWSFFKbTB0dEI3VUdBZ1l0RytmZk1JK2hGUU9KaVcxSlQ0K0hwT3BEZEhSWHBNME10SnJralpwYlRyTWJhS0ZJVEtDQ0sxR3FGU3k4R0pid0ZiMlNCS3VnMC9kOTdITDZmeVg5OHFONU84OXdsM1g1cEhUd2NMRUcvcmcrcWFJcnh2Q2t5QXNZZmsxaWRWcWZiVlhyNXdTSDNnRmcxcHd3WHR6dmpXZnRxWnFSVnZUaFZRWW1FeCtFN1R0U2ZzUkFteUppWWxZTEJiTTVqaE1waGlmU2VvRk41MnV5UnoxUlVtRldxMUdCTkdMTkdsdGtodHdiaXNvZUVVSThTVjRjQ3NDbGNyWG5LeENKV3dVVjd2Q015RXNZZm1WaUtJb1h6My8vS0xtQVlPQWIwMlNKQ2V0KzlaOEpxaEdOR2xyVFdWVDNweTFhRXltR014bWI4QWdNVEh4OUlFTm9GMjdkaVFrSlBoeTI0d1lERkdCSW5rL0E0Zy9rQUFLaXBCUWE5UUJJa3BKQ2pCZ3VzZGRON1RpK1BIakw0Q2VQcDFpV2JXOWtLTTJPeDk4L0NVL0NJbUdSbmQ0Tm9RbExMOFMrZmJiYjFmUG1ESEQxZ3FvK1RVMlA2Z0ZwM2kwV0hHcWlibkRYK1FlNVZ2aFBaYUVoQVRhdFR0MU9XUUxZSXVKaVNFcEtRbXpPZDZYMjlaa2tnYURteXhCbmNNamRIbzlHcFdxMWFSZEpNa1ZGMmZlNEhLNVhyejd4aUYwNXdpVFh0L0FwMG9pQTJKVjZIVmhUcTZ3aE9YWElEYWI3WTJ1WFMvOUpzZ0ViV3ltcmJXYWpOc1VNTkNJNXFBV1d1VHVKWkJNU2tvaUppYm1sUDFwRlZuYXQyOVBkWFUxVnF1Vit2cDZYeUY4STA2bkU2ZlRpYU9obmlPMlJvd21FMnFQazhaR0JVVlJFRUlJUlZFVUVCNGhrQ1NRa1NUVko1OTg4dkpWVjEzVmE5cE52OGtHY05lVmMvVzJhUDRVSDE2cEtpeGgrUldZb0x0ZmZmVzF6YTM0MVlKQnpZVTMxOVVqU1pMU1BCbTN5YThXV2pabE1FU0hGTHkzYjkvK3RQclVLckJwTkJxU2s1T3ByYTNGWnF2RGJyZmpjRGk4bEVhT0JyNCtWb2NxTWdwSnVHaHdLOEl0SkVtdFVna2hGRHdlOE5JYVNZb0FOd0xYMVZjUExOdno1YTVGWDNxaUZpZHBGZDc1K0hPeWNudlRNWXhyWVFuTEwxNisrZWFiMVE4ODhJRDFKQ1pvaTJSYzM2cFRMZEk3dkg2MWxsSFF4TVFFa3BPVDBXaE9EelJPeUtkcXNWaWFKZTVHKzJwSkk0bVBpOE9randDVkNrbWxRcEs5cUN2TEtpRkpDQ1JKU0pLdllsL0NKVW1TTS9PeTdFMmxKU1hQcmk4NlRNL2VmWGw2Y09md2pBaExXSDdoVWx0YnV5UWpvOXVCazJocmZtRHorOVo4QVlNQXFJVXc0bnFqb1A1YTBPaVFSTnptaGU1bnJMSDVKU1VsSllqU3lPNmpOR29rUFZueGNiYlpxSyszMDlEUUlCb2JHeVdQeDROYXJjYmo4UWlmQkJaWmxpVEptVmhUK3RLTTMvKytteXpMZzhKVElpeGgrV1dMMiszZTh1aWpzejl1Qm1vT21uTFdUaFFGRFRaQmhaZTFJNWc4VXU4elFVMCtFOVJDU2tyS0dmWHRwQXo0VVZGUkpDY25rNWlZNEV2Y2pjRmdDQzZVYndvbStHdTdWTDVBZ24rcFBvSXFFdTY2Nis3amh3NGRlZ0VvRDArTHNJVGxGeTAvZnZycHArODkrK3l6RGEyWW9JNW1KbWlnd2lBMFlLQVd3WnFhdjhEZFlJZ09MS1BuTjBHYnMzZjhKSTBOdklHRTJ0cmFnTllXOExVNXZkVGhicmNidDl1TngrTkJVWnFDQ0VJSWZPQW1DU0hjZ0NSSmtweWEydkZ6cTdWMlFYUjA5Tnp3M0FoTFdINlpjdmp3NFdWOSsvWXI4NEZYTUtBMU4wSGRRUlVHb21sUmx0QmdnYi9BUFNySzRFdnRhRU44dkRlMTQzUURCbWNFYkFBZE9uVHdSVWh0TkRRMDBOam93T2wwNG5JNWc0RE5qY2ZqRVI2UFJ3b0dPSi9XSnZsTVVwY2tTU3FqTWViZmpZMk9OSzFXZTFkNGlvUWxMTDhzc2Rsc2J5UW50OTlGYUdwSGN4UFVSV2paVkFzVHRJbGpMYmpBUFpTT3FFT0hEbWZWeDlOYWpDMDZPcHIyN2RzSDBSc0ZNKzc2cXhMOHhKU2FVNW1rVHFEeHd3L3pseWlLVWhDZUptRUp5eTlIM0c3M1I0c1dMU3FnOVFob1FHTTdtUW5xQnpXdE5xSlpkWUdCbUJoVGdJNm9mZnYyUkVkSG4xVS9UenREdG4zNzlsaXQza1ZlUXJVMnYwbnF3ZVB4NFBFb0p6SkpFVUpJUHRYVU9XellzUEx2dnk5K3ZrT0gxQTZTUktmd2xBbExXSDdlSW9RbzNyRmp4OW8vL2VtaHVsWk1VQWN0QXdhZUU1dWdYazFOcDR2MHNYYjRPZGE4QmU3SnljbG5aWUtla2NibWw0NGRPOUt1blRjRkpGS3ZCMDBrK3Fpb0lHTEtDTFFhRFpJc0MxbmxYMGsraEcwM0VFaVFKTW5ac1dQYXpwcWE0OC9SY3ZuTWkwYXNwWHRZdjIzUHVibk85bjBYcE0vYjFxK2d6UHB6ZjY2d2Z0dUZhczFPd2ZvdE9IOGhjNlc1ZkxacE5RZXJUL2tLdW91Ly91L3lmdjM2bHpYVDFsb3pRZjJKdUw3cUFxOEpxdEg0dGJWUXY1cS9aS3BObTFqaTQrTnAxeTZKamgwNy9xUjdPaU5nMCt2MWRHaHY1cTFQQ25uOTZ6SStLU2xuMDNlVk5LaTlOcklrUEpSVTEzSE03c1JxZHdpN1MwRldxWVVzUzBLU1VCVGhYWXRVQ09FV0FwY2tTWTJ4c1hIdk5UUTBQUFZMQWFJbkpvOWtXOW01STF5cUxNem5tWlZiZnZKMXlqOWJ4U01MMTE2UWUxcncwTy9aOFRPUGExY1d3ak1yVzNsT08rRGVlZWUycmQwcjUvRmt3VUcwdjVDNTBseGVubk0vMjRwdEp6M20yTEhxRjlONzlOMFRwS2s1Z2pkSmtocURRYTNKQkpXRVNxVVdYbERUaWhQVmdYcnoxY3kwYlp0RWh3NGRRbGFjT3UvQUJ0QzJYWHNtL200TTgzOC9nZ2R1R0VTLzlrYjIxemlKaW9yQ0VCM0RwUjNha1o2VVFMdUVOa2hDd1lXTUxLdUVJb1FBU2NpeXYxQmUrQmtBR25OemM1ZTRYSzdYZmdIK0JRcTNmVWhaalRkb0VpcmVDYXc0YkJRWGwrSU1tcy8ybWlxS2kwdXd1ME1udWFJb3BBNlp6TWI1azF1OWxzTldSVWxaMVpuMTBXNmxwTFNpQmRlZHcxWkRTWEV4Tm9mN0RPN0p1MzVvY1VrcGRtZkxGN1Ntc295SzZwWXZoSzJxdk5WK0swNDdKY1hGVkZudDUzV2NGQVZTaDhERytTMS90NVhEMWwzZ2Rudi9EdG52Z0pJU3NMZWllaWw0N1lxUzR1Yjc3VHo1eEJ0TW1qVDJselZYRkNkbEpTWFlXaG5YNXVOa3Q5di8zYU5IaitCOHRSWW1LQzFUTzN4ckdLaEVNTWRhODJDQm56aXlLVit0UFczYnR2M0pjK0FzcXRBanVLNXZUNzc2U3NadWJ5REZrc0NudGRVWURCRzRYRzRrV2NhR2dzZmpRYTFSQzZGU1Myb1pISTFPWkZrU0VpS1FBaUs4S1NCU1llSFhja0ZCd1l1REJnMUtVS2xVMS8wY1FhMXczVE5NZStaZENnL2EyWDNYZFN3eHFCazI5WjlNSFpZRndLdlRiMlIxVFVjcVA5c01laDNxekp2WnRtUUdUOXc3aUdXN1BhUWw2Tml6cjV6WnI3N04yTDdwZ0lOWjQ0YVRYL2dOdHF6NzJMTnNScUN0UlZOL3c0b0RjYWpkeDZrNldFaks2TWRaTzIvOEtmdFlYYmlHQVlNK1FFYzFGZm84Q3RZL1Q0SVdWczRaeTZ6VjM5TTUxY3pCd2lMR1AvRUdENDNLT2VVOXJWdndJRk9lMmtSR1ZtZktEeFF6ZCswWERFbjM2aVhMWm85bnNmVUkrM2J1WXVyTC8ySDZzRXh3VnpOci9NMnNMRkpJMGR1cE52Um0zZXAvWWRGQnhlNDFEQjcxSjFJeXM3QlZIaVI3L05NOE5YSGdlUm1yV2VNZ3Z4QnNXYkJuV2RQdkQ0MkJiVVZRVWdGRGhnQ3hzSElseEFJN1ZzTDRHWkNlQ1FlS1lPNXlHSlhqUFM5L0FjelpCcnFEWU5WQ2pRbUtmQXROT29yV1UyRFBZVW1hN2hjelY1U2FnNHdjL0JzcURGMlI3UTA0S3Azayt2WTFINmVldC84alA4MzF6WWVIRHg5dUxWZXROUk5VQ2E0RjlhOEpxdEZvUmRNcVU1R0JPdENZR0JPeHNYRWtKaWFTbk55ZVRwM09rYnRkQ09Xc3R1UEhxL2w0OHdmMHYyVTgxOTMvWis2Nzd6NUdqLzR0MTE1N0xWZGNjUVdkTDBsRE5zUVJiMmxMYkd3YlNWS3BKSlZXSzB1eXJKSmtXUU5TQkpJVUpVbVNTWktrUktERHZuMTdoeXVLNTFOdndjTDUyWTRjcVJDSERoMDY2L052NnhFbDN0cnZiUEg3SzMrOFhzVDNHaVYrckhjTElSVFIwR2dYUWlpaXRyWW1jTXozRzU0UUhhNmRHbkxlL3JkbWlXNjN6UTM1N2ZrSHJ4R1gzelpYZUlRaVhJY0xSTHU0SzhRUG5wUDNhLzliczRTbVhUOXhxRUVSUWpqRUgzL1RVZnpwOWM5YTlLRnUveW9SMytWbVVYK0tlNnI5YXBXSWEzZUYySC9NNGYydHNVWWNyL1BlMnkzZFZPS1BMMjRYUWloaTc3OW5pazQzekJCQ0tHTHpjNU5FajVzZkVZMUNFVUs0eGROM1h5bis4T0kyMy9PNVR0enhqN1dCNnpjMk9rNytyQnYzaVQ1dEUwVmlZdWgyOWYzelQydWM5citsaUc2M3RmejkyM2NVMGUyVzBOODhSeFhSS1ZFUm54ejIvdjNqeDRwbzMwOFJMdC8rRDU5VFJHUTdSZXc5NnYyN29hSHAzQzllbXlHNi8rNnhYOVJjZWZmeHNhTGZmZDduMkhoa2grZ1VxUkt2ZkY3ZFlwemNidGZPOTk1Yit3RHdXMkE0TUJqb0MyUURYWUVPa2lRbCt0N2hLRm1XSTFRcWxVYXRWcXNpSWlKa2c4RWd4Y2JHU20zYnRpVXRyU09abWQyNDRvb3J1UGJhYXhrOStyZmNkOTk5L08xdmYrT1ZWMTdtNDQrM2N2eDQ5Vm5qVWZQdHJIbURUTVlvdHV3dEpySmJINGJGZXlndksvTkZTTjAwTnRSenlPckNraGlIeHQySVEzaUVKTW1TSkt1RTEveVdGQ0Y1a0x4cXF3VElraVJKR1JuZHZpNHJPN1F3S1NrcFZwS2s5RjlhSUdEd3lGdXg2TDNXdlU3ci9ZSlhGRzVpOGpPdmNLQ3NHc1ZSUmFXY2Qxclg2cDJYaXd6SVNjbVluZFZZbllEdTVPZWs1VjVOc2c1QVMvK0JlU3pjdVJ2RzVtQXIzY21NZWY5aTk4RUtGTGVObW1valZ1QmtYb3hkT3dwSUhYUXpYV045bmlPdEVaTzJTZEh2bmVkVlo1SlNVckJWZlE3QTFxMmIwZHB6bURYallRQktTK3hVNkFxQlBMTDc5bVBHNUQ5eGI4Vm41UFh0ejZoaGd6anBtbC9hcm13di8vR0NqRnZKZGloWHc1cjVzTlpycFdIZDR5MlA4UmZ5OUJ3S0dXYnYvM1ZCNDFCWmZSU2pNZmtYTlZkMjdmeWMvaU9uZXg5elFnNTlNNHlCZlUzajlPbDNTVzJUM25wMCt2MUhtZ1VLZ2lPZ0ovQ3J5YUpwQlhkL3NLQXBBbW93R0h4cmdyWWhJY0ZiQjVxYW1vckpaRHBuWTNxV3dPWmh4WHNiMkJPZnd4UFhHUGorbXlLY1Bsb2poNzJPVDQ3VzBTNDVtV2pGUVgyOTF6OGdxMVJJc3BvSUxjTGpjZU5VRUVpU2dpOXgxdzl3eWNudFA2NnFPdnBjWEZ6Y1RDRCtsd1JzT3FPaG1iT3BrRkdqL3NwajZ6OWdXSFlLOWwxTHNVejQ4UFFHUmc0YUd2bk1IZENLMzRPcVZERmgrRzBNVy9RaDh3ZG5vcTdjZ2lYenJ6ODVEQzBIOTgvbnJGS0FyTnhyR1RIWTkwMGFjU1BHaEZRQXNrYk1ZRi9PY1BJM0ZiQjAzbjBzM2ZKSDhwKzU5OFFOT0E4eUl1KzNsRFRyYU5kaEQ3RGlzUW5uZk95TXlUQnlSTlBmSThkQVF2QitZK3ZubVkzUjJPeldYOVpja2VYVzNIVEI0MVMxN1BWL3YvSGc5UHUvSjdTdzNkR0tYeTFBOVIyMDJMSHdyd25hTWdKcThBVUx2UHhxYmR0NmszQ1RrNVBQNlhpZUJiQUozdi93US81ZFoyYnA3M3Boa0FXZWhnWWNEZ2NPV3czcmRod2pPUzJkUkJ4WXJiVjR6Rk5pQUFBZ0FFbEVRVlNCVXF1b3lBaFI1eFNTVHExRzhiZ0JTWkVsQ1FGNEN4UzgvalloaEdRMng2K3ZxVGx1aUltSitldXA5WlFMS3dham5xckthdWlhY09xRHE4c29WYWZRdDJjS01yQit6YnU0MForM3ZoWHYyRXlaWXpiSk9pZmJDcmFUTS9ZUDRLNmt0TnBJLzd4TTFNQ085ZXVwVkU1OVQ5bTVBeW1aOHcrS3FxZDR0VGEzbFJxSEFaUGh4UEdtQWYydjVxRnR4V1RQR3V2VnhoUTdWVFhleHF4V0s3SEpHWXlla0VGdWtwdThKNHRPZmpQYVZCYXZmWS9tdm0ydDRhZDkxZlZHc0ZaNnZkeit5WithQjRaU2tGT2h0NDlBb3FycTlDWmUxNTQ1bEQrekFTZTAwRUIvcm5PbGQwNHY1bTNiQ3JkbTRhemN5YllpS3dOOCs2eFdxNk5CaW5ubHdVZiszejZhMGpvY1FFTUlxTFZNN2ZCcmE4SDhhcUsxeWdML0tsTnQyMXBJU2VsQTU4N25udW5ueklHdDRRaVBGM3lIVlJmQndMbjdBVkJGVzNpcWR3cUZoVjl5U05HaVBuS01iK3gxdUJ2c3RORkhZdGJwaURYRlVIL2ttS2h2OUVqQ0k0UktyWlprL01TVUlmV2traEJDTnBuYXZHV3oxVVZGUlVVOThuTUN0Z21UL3NENENWZXgyR1JnekNNdjh0REluaWMrT0dVQVUvSWVwVy91TmFRWkZNd3A4WUVIWHJGakJhT20vd3Q3VlFrbFZUSjkrNzVQNXJBSFdUUmoxRm4zeldMMk1IYlExYWlwcHRJNGxJTFIyYUJWbUQ2aE04TnorOUF6V1krYzFCNkxmT3A3TW1hTjROVVpIekUwcHdjWldaMnBMQzNsc1pXZk1qajl4QWJrZ0lsekdQclpiOG5zZVNVWktTWU9IaWhtOG9MM3VYZVFnYlZQak9leDlVZkpTSTFsWDJFUmp5eDgrNVJUTXlIcHpML2lGVHRnMUhTd1YwRkpGZlR0QzVuRFlKSFAzNTZVQzRPQXJDd3dKTUhHalJCcmh1WHpZVnllTjNoZ0xRZHREdVF2T28wUFhjK2g1TGtmWld1WmswSEoybC9FWEJseTd5eGVIblE5dVFNL1FPMTBZYlEwcWFQTEh2M2RpL2MvczJGWE0xQnpCSUdidHhhMGxXQ0JmNkZqWHdSVXRCWUJqWWt4QmRZdGFOOCtoZlQwVGtpU2RNN2ZVMG1JYzVObmMrVElFZmJ1M2N0MzMzM0hvVU5sSERsU3diRmp4emgrdklhNnVqcnE2NzFGOVBYMURUaGRUc250TGFDWFBCNlBKSVNRZlpzYTBBQmFJWVFPaUxUYjYrK0pqSXo4dzdtNjRjcktTcHhPRjhuSjdTNFlHRmFWbGVEV203SEVHczU3VzI2N2xmSWFCOGxKQ1NHNVBEV1ZaZGd3a0p4d1pocVAyMkdqdkxJYXN5VVp2ZmIwc29Qc05aVlVXZDFZa3BMUUJuMDZIYllxeXF0c1dKSlNUdnRhRjFJVU41U1ZnZEVNcGpNWXFtMUxwaksvTkkrVmMwYi9ndWFLbS9MU2NreEI0M3I4K1BFWFltUGp0alF6UFJzQXUrOWZyOVltU1U3Sm0yUWZBRFpmWllFL1QwMDBBWnFCNkdodi9XZGNYQnlKaVJiYXQwK21VNmRPZE92VzdaU0xzcHl0cUdiUGZ2VGNtR2dHQTVJazBkam9MWTUzdWZ5RjhRcUs0dkdYV1BsRHNUNVFGVTIvQmR1NlhzME5nSysrK21yUHlKRWpVYXZWdmM5RlArdnI2L0Y0Rkl3bmNwcWNCOUViVFJnaXRSZWtMVmtUUVV4MEZNMi9nYm9vSThhb003ZnFaYldXbUpnWU5LclQvNnBxZEZIRXhFU2phb1pkYXEyZU5pYlRHVjNyUW9va1E0d0pkR2M0VkNsWnZXazhYRWJYSGwxUi9XTG1pa3gwMExqVzF0YStQR2pRdFp0Ly9QRkhWeXZBNWszQzlmblZKRWx5TlRNL0E2RG1Oei85Q3h6N0F3VnQyclR4clZuUU5tQitubXUvMmprSUhyUXVxYW1wT0J3T25FNHZyWkhiN1FwUUduazhpZy9rdkdEV0JHcENlSk1sRmNWWFY0b1F3dVYzdXExYjk3NzArT1B6bGp6eXlNUHFpSWlJZTdob3BZYmxDNWRSM1lxQ2JjbnN5NmdCUFFuTC8walVzWXdkTitJWE8xZnE2dXBlZStDQkJ6Wi84Y1VYemZQVW1rRE5Hd0gxYTJvZWZNd2QvZ2hvOHdSY2J3VFVuNnNXdXNKVVdscEhVbE5UeisrUW5Pc0xkdW5TeGNmWjVneWtmL2dMNVAyYW0yOFRRZ2lmMWtaQWxWTVU0V2NDa2Z3K3R6bHo1dFRFeDV1WDNIMzMzWEpFUk1UZEYrZmJZK0xXU1pQRElCS1djenBYNnVycVh2L3JYMmNWdlA3NnNvWWdUYTBoZVBPREdrR1ZCYklzdFJZQkRmalZ2SVNSaHFBYTBJUkFXa2VYTGwzTy83Zm1uS3Z6a2tTWExsMW9iR3owOGJXNS9GeHRBYzJ0S1pGT0JJR2JRQWloK0loQVFreFVTWko0NElFcHg3UmE3Wkk3N3JpRGl4ZmN3aEtXY3lkMWRYV3ZQL2JZWS9uUFB2dHNQYUdCZ29BL3pRZHFJZmxxWGhOVWJoRUI5Uy9FMHB3dzBwdXIxcGJVMUE1MDZkTGx2QVFMemp1d0FVUkdSdEs1YytjZ1dpT3YxdGJrYS9PYXBENnoxQTl1d3FlbCtTT2x3ZUFtU1JMU1BmZmNlN1N4c1hIeDNYZmZyZWgwdW52Q1V6TXNZVGxyVUh2dHIzK2RWWEFTVUd1UXBOQlZwb0tYemd1T2dEWnBhazBKdURFeHhvQmZ6WityMXJselp5SWpJeS9JL1oyejRFRnI0S2JUNlFMZzV2SDR3UzNBMWViWDJ2eWJEOGJGaVhSQkFiQmh3MGFYSkVsNyt2VEpkV3MwbWpNT0tQd3ZnZ2RoQ2N2UFNXcHJhMStlUEhseXdlTEZMOXBQcEtuUlNtVkJFNmpKd3IvQWNXZ0VOS3JGZWdWK245cWxsMTZLMld5K1lQZDRGakYzRDU4VzdtWE82bnordUxLQVY3NzhJY0JEMVZoZncvS1BQbVhHdnpmeGwzZTNVNnhFY2NrbGw5Q2hRd29KNWpnYUZJbkQ5WTNVQ0sxdmRYbDk4T3J5UXFQUm9GS3BoVCtEMlI5MW9ZbkRyUkZ3UFBiWVk3VTMzenpxQmJ2ZC92U0ZuaFFIOSt5azJuR3VydVprMzY3ZDJFNDc0NmFja1RtLzRjQlpFSDlaSzRvcE9nUDJoMjJ2UHNLOVQ2NzUyYitrSTNPZ3FKWG5zVzhYWi9CY1QwZmN6THRyTkZ0SzdEL3B1WjVLS2t1TEtLazhTN0k3OXdHR1pOOU0yVWtPT1g3OCtBdlhYRE1vUDhpbjFrSlRveVVOVVhCaHU0K0dLTlNuRmhtcDl5WGdlcXNLNHVQTldDeHQ2ZEFoaFVzdXVlUzhwWFdjTzJCVDZsaXpxNXd1cVIyNElhTWRtN2ZrTTJ0ckNRQS9GSmZ3ZGIzTTFkMDdreDByZU9DRlZSdzJ0Q1U5UFoxb25ZYjlEUkwxSHNFUlJZUFJhTVJnYUVaUzZRTTN0ZG9QYmw1eXltWUVsWTJBWThPR0RmVlJVWWFYYkRiYjQ3NkJ1U0F5ZSt6VkZKU2NLMTdNU2lZT3ZZa2krK2tEWVdsSk1jNnplR0UvVy9VNDB4ZXNPKzNqYlRWSHFhaXkvZXlCYmZ4VVNHaGxGazhjeWhrODE5TVlxUjFMV1ZHUlJ2OVUvVTk2cnFlU3RmUC93THpWaFdmOW9Td3BMajFSdVp6ajZOR2p6OFhHeG0wSmluNmVEcWg1SkVueStJTUZMYzNQVUxKSWYxV0JuNElvUFQzOUp6SGhYamdmbTJ6aThmSFhCdjVzWXovS2ZidC9nUDZwZE83ZWs4ZTcrL2Vrc212dmZyWitYODFEMloxd3VRWVNrOUNPOXpldXA2RGNnY2trK2N6U1FOb0hQcjlhd05mbWR1TXJKY1VUN0hQenBZUUFFQjF0WEhiOGVMWGRaREpONFR6V2xwYnVYTWZpTlo5U1dPSEUvc3lqN0RiTDVJNjRtMkU1M2pMcGZWdFhzMlQ1KzFqbE5veTVkeXFEc3J3NU9vcTlna1hQekdkSDBXRmlrenN5N3Q1cFpLY1kyWjIvakZWYnZxREVWc09pT1gvRm9wVVpPdTRQNUhVK2RRTHQ3dnlsekYrMW1ZU01xNWcrYlR3bU5iaXRaU3hlOURLN2k3NUgwY2N4ZXNJVUJtZW5nTE9jcCtZK3o4NGR1emhncldUbXpPL1FKZmRpNXIwakFpOUQvc3JGck5yNEJSamFNbXJDSkFiMTlQWGRXYzJTdVkrdzdlQXhoazM0STZQNitrcGYzRlpXTEp6UHBwM2ZrdEQ1Y3FaT214UW82TjYzYlRXTGxyNlBEUzBaQTI1aTJxMkRPUitwdVB1Mnd2Sk4zaG5jTytUWndLb3RVR0tEUlhQQW9vV2g0eURQMS9YdDYyRFpHbkFiWU9JMHlQRlh1VHZnbVFVd1pEQXNYZ0IyQTB5ZkJlbSs0WGgxOFFzTUgvdEMwNzJjNHJuYXF3NndZUDRpOXBUVWtqbm90MHdkTnlSUWNyVmozV0plWGYxZm5Gb2plY052NDY2aHZWR3E5akhuLzdkMzd1RlJsSGY3Lzh6c0ladk5ack1zSVFraGlURmdpQ0hFaUJnUkl5SWlJbEpFUktTSWlKUWlXcXJXb3JWS0tTOHZQenpVSXFVVXJWSThJWjRRRVJFcElxVVVFUkFSTVVhTU1jUVFZZ2doaEdXejJlek96dlA3WS9Zd3V6bUFlS0srUHRjMTE1NW5abWVldWVmK251N3Z3aGZZdGJXQ3VySy9NNnZtbjZRVlhzYU1jWU5Qd05KY0xGLzRDQnRMdjJMSTJJdWprYXloZ29VTEYxTldmYXdoUGpuOXFTY2VmV0EzMGJXZkxUSG1aN3VncG10d0hBVnFrVUJCQW9tSjBhQ21WUlgwK3Zaa2lMNXpZSXNabjlZM2tKdCtWdHNQL01lcE9LSXlLVFVKZ0x5OFBCUkZvVnRLTitKYldraE9SdWRyQ3kxaDhBcURHMEFnMENtNGlTNWRuS3NPSGFwcjd0YXQyMjNmbFNxSVBTT1A0Y050YkgveEVZcEtMbU5JdHBtMERNMVBWNzVoRVNQdWZJMEZpLzZYWkY4bE04WmN4ZEp0NzFPY1ltYnBmVGV5em5jRjgyYU9vNzV5RHcwTmJzaXlrOTZySDhNdEZ0WXNlWkhpSVZlUWI0T3M1Sk5Jb0ZXcVdQWnlPUS9lL2t0V3pMK0R5WE1zcko0M0hsOTlKWTJXYkNiZk5ncGYvVzV1RzMwWlMzZCt5c0FVTzRPR1hvSHMyazFsYlIrR0Q3OEMyUmFwWFh4eDlnM00yMlpud1p4YnNYcHFLTjFYSGdhMkxTOC94OGdsRHpFaGV4c1R4dDVNY2ZXN1pKa1ZIcHh5Qlp2TlZ6RDd6anNvWGZrb0l5WTNzdXZsMlZDM2xSSGovNGNGei82ZGJMdVBiWHMwd2N2T2dHM2Jxc2Zac1BkUXpNMnpLN2ZkTjRPVVRtWm5TallNSHdwVFI4UFlleUV0K04zMFhqRGNBbXVXUVBFUWdzYzFhRjR2ZzZsUHdNSkhnRm9ZUHd3MjdZRXNTeERZNXNHNjdUQjFNdEFJalM3QUFkREErdldWM0RldlVIZmxkSEpjUGRXTUhYd0YrVk1mNHZaUmFTeWIreHRtZWl3c21qNll4dDByR0QzekZaWXZld2lIMnNEdWFzMk1sYTBwREIxK0JkN3lEY2haRnpCOGVCSFc1Qk0zQ1Y0NTd4Y3MzSnZCb3Z0K3licEY5MUtobzJ0enB2Nk0rbk5uZlhIOTliYm5SNDY4SmxUN0dadW5GbHBhT3dLMVVGVkJaK2FuQm1wZFNVdExKVE16azE2OWVwS1hsL2VETWZsdkJHelYrei9oc1U4Q1BEbmo3Rmg3bFdmV2JDVHU3QUZjMlNNdS9HNmZQbjFJVDA4bm9ibVoxRlE2Q2lJRXZ5MEVoS09sSFlJYmFJQ1ltcHEyZnYvKy9hNnNyTXhiWkZrKy85cytVSTYwWHBTazlTTE5aaVMvL3lCSzhpS0hidW5DdnpCeDFxdU1LTWtEK2pOMTZGT3NXTHVMNGlrRGFXeG93SnFWUWs1dUFVV0ZSYm9MTTUrVWJEdDJzNFYrSlNYMFA5a0tHdG5LekxsektNNDJVamozdDZTTWVnN1h2UEhZZXcxaTVxUThkdTdaalZ0TklUL2R6YzdkdFF3Y2tVWC9raEthOXFTVGJNNmxwS1JFQjVMVkxGeThsUVY3dm1SWWxoa29SdmNwQlNOdlpOcW9JVUF4QTJmOW1iMjFrR1haeXNKMUNwc3I3eVhiRFAzdSt3TlA5UG9acFo3WjVMc2JhRktzcEdSazBTODNuWDc5VC94M0xBNG5hV2x0YmlNWVQwRHprck9nSkF0c3hyYUFsNUlOZGpQMEt5SHF1QzU2Qk81NkFnWUg5MnYwMDdCNks5dytOUGdGRDl5N0NJYWt4MnlzcVpKS1Z3YloraUpiMmRiaGNTMWIreXhsR2Rld2N2b29aR0R1dmJlU2Y4K0xMSm8rR0c5REk2ckZSbHBHTmdWWi9RZ2ZJbXN5SlNVbDdGdnRwS2xYVWZSNTZ0aGh3UElWRzVtNTZpQURDNndVejcySEphdi9FUEduSFdyOG9MWFYvY3JJa1RmdXAyM3RwNjVFaWxhSmprSE5ZREFJazhtSTJXelNnVnBzVVh1b1hDb3pYQzcxUTQ1VEJyWWpYMVZ4eXlzZk1mZW0wZVFtNkdlaFlNT21qYng2UEpubE54WkczYTBsU1NJN081dkU0eTR5TTlDWm9tcVVPUnBhajhiZ29EUG1CaElhZVJQaXpEUFAzUGJoaDd1Yit2YnRPOVZnTUF6L3ZnNWlkWFV0Wll0L3g2NW5RLy9Xd3RDaDJ2UHBjLy9PZmJQK2wzNjU5MlBKS0dMUnNxY1lrdmNOb2tOeUN1bEJlbUpKeThEYVZFOGowTFQxYVlaT2ZwVGhZNjRteFc2bXdhM2c5WjBneXVDdXBVWk5JeWVyL1JLZVpJY3pQRTNNWmdWRkFXOWREWTNlR3U0Y2QwM2tlMFhub0hyQjJHc2t6ODdhemF4SlYxQmU0Mlg0MVB0NWZNN2tUblhYYkk0VTB0Sml2aUhidjVNOHBPcGFXRG9MVnVtSWNULzloaHlRbTk2dVl4bEYvanJiK1JKWDZYYkdqUDQwL0Y1eDNrV29RUHJReVR3NHBvS3BJeStrMmlVeitkNUhtVC85VktkcUUzWDFGaktTTmIrZk1TME5aM0EvL1g3L3hvc24zcjdteGhtM0h0S1puM3BRQ3hlMVM3UlI2b2dCTlJNbVUzc05XRUt5M20xQjdmdklWZnZXZ2UzNGtZUDhZdmxXWm95L21rdlNvcDJwNzc3M0gvN3l1Y3pUTjErTXZaM0NPWVBSZ0NPckp6M1BGS2hxSUlhdGhZQXM1RzhMbTZRZGdWc0lEVVhJTkQzMzNINmZyRnIxNnArdXV1cXF3MmF6K2NadlBkb2l5Nmd4WXZsWldSa1VUZjhiOTQ1cWF3VTdjb3Bac3VJTlFHSDVySjh6YThGeXRqMXhaeVIySTZ0dHRQYzdEOTdVVTFPclVKUmp4RnRYZzhlWlFUTHd4TExIR0RQcktSNmMzQS93VWJubXo3RTczbWEvc2FXVElkZFJXZTJqVjliSjFTZWEwekp3Mm5KNWV1MWJZZk5QUDUxR3paakxxQmx6Y2RYdFpuRGg1V3llT3BsaG5aUUVWdTdad3RwdEIySldrMHJ4aUNIWXY0bHpUbTdiMHlBckhjWXNodkVGWHpPVTVzZ214MUpIVFFQMFN1R0V4elVyL1F4U0JxU3lmdVc4ZHJaaFk4cnNoVXladlpENjBsVVVEZnc5VTZZT3A1ZFJQNzlPTmpqbElEM0ZTMDJEQjlLc0tIVjFOS3JRNHZHODlOalNmN3g5eHgxL2NIVUNhbDZkV2FxUGZyWUJ0VWhoZTd4T3FjT3U2MVdRR2l4c3o2RlBuejZZVEtZZlBLajA5WUhOZjV3Wi8zZ1RTMFp2R2cvdTU3bURZSWgzTUtFb2kvM2xlN2oxcmMrNTRkTCtyUDlBaSt5Y2RjYVpERWhQUlBVMHNlS2phajZwYnVLSVQyVnZOeWYydERQSVVLTjliRHBRQ3owWElhdlQ3OWR5MmJSRVh3SVJiQXN6UWlHRUVHUEdYSHN3THk5dndmdnY3NnkzMld4MzhDMG1JdWZuOTJMNW9nVllSaGJRcTNBZytWbE9wdDc1SzRiZjlVdHl6UDlEcmxObTU2YjE1SXk2aDZINWRsWSsvaUJrRHlRM3pjeXVmVlgwNm4rVDNuQWlQMGZoOFFWUFVOOC9nL3dCUThnNWtaOU45Ykpneml4U2JoL0ZpdmwvWnRqRTMyRURzckt6ZVhIdDgrd3FraWxiOXdUcnloWDBLbGU1dVgzWXZlUWxYaHlRakNNdGgrRURDOENZeFowelNyaHJ5cTBzbVBNcnJONGE5alhhbURxdTQxNEVjbG9KZHc3MU1YbjZIR1pOSHdXTk5hemRYc1hjMmJmaks5L01vdlhWRENrcHdsTzlsUVp6RHRuT3p2L084Q216R1g0S3VwRzd0MEtqRjF3KzJMNEpHcXd3Y0hCRUZUZy9CeDVmQVBYOUlYOEE1Q1REN1ROaDZqU3d6ZGVDQ2x2V3crRGJvZDhKQ1hRYXc0YW1zRzE3T1lOSFJXdUh0WGRjODBkT0ltZnVwZHkxSUk4SlEvS3BMOTlEcVR1TmU2YU1vR3JyYWxhVit4amNMNWZhM2J1UXM3SkoxczNPdkY1bjgrQ0tmN0FxdzAxeVJoNkQrblhtTXJZeGNlSnc1cysrbjZ6N2ZzNmFSWThveHhYbHlVdHplLy9uVU5zZUJYcEE4MHFTMUNxRWFDZjVWaDhvTUlhWW1vaVBENW1mTmgxVDAwQXQxS3VnVDU4K1dDeW5oM3ppMTAvUVZmMGM5UmxJVFREaDlTdDQvUXF0c3BuaURDZkhtMXV3Mm15WVJDRDhXVklYSnpsSkZrU3JteTM3RDJOTDZzTFpUaXQrSVpHWG00dlRLRkFVQlZXTmxGdXBxZ2lib2pxeVJvaTlDZEhoM2dsSmtnUWdHaG9hMUFjZWVLRHN0dHR1cmJKYXJUMGxTWExDTjAvUUxSNXlGVXJkUGo2dHFDSytSeDl5MDVQbzJuTUFWeFk1V2ZQcXEyeCt2d3hyWmwrR1hud2VpWEV5bm9aS05xei9KeHMzN3lTclpESnpmajJhT0RsQ0VTNFpjU1VONVh2NGZIODFxYjM2azluMUJCTkRUbVhVc0RONC9wbVZPTS85T1EvZE01NDRHZkl2dUJSUnRZTlgzL2dYQ2YzR01YMTBFVDM3RkpPVnJHVjZKK1djeDRBc2lkMGZmVXFkeDh6RjUybU8zWUpMUjVOcnFlTzFWMS9uNDJvWEZ3KzlndXhVN2RnNE0zcFRrSk1hM3RjK3hSZVRIQzlUTW1vY2xyb1BXYlZxSFo4ZU9FYS9TNFp5VHE4ZUdDU0ZEN2Y5aXczci8wblpWeEovV1BBbzUvVkkvRTRtN3RzdncwY1YwUGRDY0IrRTZobzRkMUFFMkM0WkFRM2w4UGwrU08wRm1WMGg2MXdZMEIxV3ZRbzdQb0swUGpENGZMQVlJcmY1QVFNaHJwM3RaWGZ4TStmcFhVd2JlMG5VKyswZVYxTVMxNDY3aXMvZlhjL2F0elpSM3hySGtLSERPQ1BWam95WDdadmY1cTMxNy9CbFN6Y2Uvc3NEbkprVU9lZVo1NVp3VnR3eFBpd3J4MjEwY241K2RxZkg0ZXlMaG1FLzlBRXZyWHUzTW1mdzFZK3RYL25ZKzgzSGozZWswS0ZQNS9BRkFTMHErVFkyK2hscXZoSWZyNW1maVluMm9BU1JKaFNwQlFwNlVWQlFnTTFtNDNRWjM1b2UyNm1PWThlT1VWcGFTa1hGRnh3NGNJQzZ1anFPSEdtSTBYRnJDUmJXdCtMeitTUi9VTXROVlZWSlZkV1FucHNCTUtEcHVabUVFSEZvYzlSU1Z2WkpVVzV1N2hTRHdYRHBENkhIOXRQNE1Rd1BkNDYra2xFTDMySkl0dlcwMmpORlVmNjlmZnYyTlIwME0rNmdUNEh3QzBGQWx1V0FQdm0yL1R5MVdGMjFVRXFIRnYwc0tDZ2dLU25wdERvbXhoOTZCNUtTa3VqVHA0L085TlNibGxGRVRVL2ZKTkI2SjJpbWFkakpJVUordDZCWnFnSnFmbjZmM2M4Ly8zenRtREhYVkFFM244NlhUL211VGV5dGFtem5FenZEeGc3anAwS3dIMnBZV2JqNjM5LzdWbjBORmF6WnZLZmR6M0tMaDVMak5ENy8rT09QYjdyNzdudU9FNTNPRVd0KzZ0dmsrU1ZKRGtnU3FyNU1xcjJLZ2xDZVdxejVxUmVMUE4xQTdiUUFOZ0NIdzBHZlB2azZVSk4wajFJWTRDUkpDaTFDa2lSSjg3a3BRVUJUVVZVaDlQbHRJWjhiSUc2NDRZWmE0SytmZmJhdnltcE5tQTUwUHgwdm40eThJdXdaN1VRelpTTzJuOURsLzl3dzJqTVlWR0tqSGJ2cUs3Zkh0VHd4TVRzazQ2MVA1OUNib08zMS9nd0FBYTJ5UjFiYkwyalhmR29oOHpNVS9kU1lXZ2pVOHIvVnpsSS9PbUFENk5LbFN6RDNKUUptR29pRm1Kc1VmaDNMM0FCSlZTVVZWQ2tFYW5ybUJxaEI5aVo2OTg1YnZXblRwcXJ1M2ROdU1oZ01RMDYzRTJLMU9iSCtoR0EvamREOXpHd2hKU2JSVDFHVXpUdDI3SGlqcE9UaUdqcnZ6cTZ2SkdpdjhVcW9xWEdiaW9KSThtMUhnWUo4dW5UcGN0b2V0KzlNM2VOVVJueDhQSGE3UGF6ZkZnb2toTEk2T2dnYWRKWXdFN1p0UXdBSGlHZWVlZWF3MVdyZDBhOWZQOCtwS0lUOE5INGFQOVE0ZHV6WTB2dnV1Ly8xVzI2NTVZak85RHhSeldkVU1idE9laWdtbmNPaTY5SWVLejJrOTZuMU9hMUJEVTZENEVFSEo0OVBQaW5qaXkrK29LYm1BSFYxaHpoeTVBaE5UVTI0WEM2YW01dnhlRHp0QkJUOEtFb2dGRkNJRFNvWTBZSUtab0pCQlNEdXdJSHFpM3YwNkRGWmtxUnpmN3BzZmhxbjYxQlZkYzlubjMyMktqKy9UM21RcGNYNjAvUW1hSlRwaVNiakhXSnFJdExRMkVUSFBqVzkrUm5OMUU1SG45cTN4dGlhWEM0T3VmM1lMR1prUFdjS0tOUTJIc01qRE5qTTBSbTZyUzB0SEd4cUppNHVEcFBjTWRHeVdDdzRISTV3VDlMbzZnVEN2cmlZNUdhcEkvSVdTZ0hSbTZhaDE0OCsrdWpCZ29LQ25UazVPWDZqMGZpOWc1dXJ1cFIzUHE3bnJLeVVrLytSdDU1VmEzYlE4K3d6djNIemtOTnBWTzNkeXZwM3RsRFhZaUduUjlmdmZ3ZE84Ymh1WGZzaWNsb0I5cmp2WnJmY2J2ZnpUejY1OU9XUkkwY2VwUDE2VDMwcWgxZnF1T2VucnU3VEhHWnFRdkZodGptdzJ4SklUSXcwWHdsSkQ0VlVPZ29LQ2s2WUpyVjN5em9DWFh1U2FKWkFiZVRGSjU5aDYvdTdxUGZaT0N2eis5TmorL28rTnRYTnIvK3lrdDErTTZseEFXcjk4VHc2NlNvdVRJbW41dk9QdWU3RkhUZ2Rkanl1NDNUdjFaZS9YMWRNb2d4UHJWckZrckxqWkRyaU9IRFV5eTFqUmpDMVQ4Y1hjMkppSW4zNzlrV1daV1RaRUh5TUxKS2tmNHdFRkNSSnd1LzNpMkNGZ2hCQ29LcHFWQ0FocVBHbUNrMDZKSERkZGVOcWdML1YxQnpZbTU2ZWZwTWtTZDlxWjVUMVMyZFJrVDZlR1NQYXByelg3OTNJd2cxR1JwUVVuUHdLUFZYTWYzQXBnOGNNd2ZsZkJGeDcxaXhrVldNQmN5Y1BiZk5aM2JZbkdEVGxPYVpQL2hseWl1YzcyNGZhN1M4emQ3UEM0L2RPK0phT3E4cUtCWDlrVk1GNE1yN2xrTFdxcWg5OS92bm5xL0x5enY1TXg5SmlPN04zeE5JVVNaSUNRcWlxRUFqWmFGSU5CZ09SRXFsSW5scmRvYTh3ZGMwaU1URXhxcUE5VWlhbFZSUWtKQ1IwZmwrbzNzemtXUyt3WmN1SWtJY1FtODNHM2cxUHNiYkN3b2lCZWFjeHNNa21iaGs3bW9KTUxScXlhdDBiek4zNE1XOU5LTWJxVE9mVjM5NUV1dFdFNm5NemFjRnp2RlNleDlROE94ZGVjQkUzakU3RkxFUE52ZzhZdG5JcjEvUVpRMmYzNVlTRUJBb0xDOUZPaUl6QjBCN0lTVUZna3dtS1U2SkZUUDNCb0VLNElUTmhwTk1ZbXlwSlVpaW9vQUtCakl6TXpVODl0ZXlUY2VQR2piVmFyZFBhdlhzMjFWUHZVc25LU29zNmVDcmdkVFhRNEpiSlNvOWNGcXFpVUYzMkFhVytJU2lLZ2l3YmtlWHd4Q1Y3K0F6V2p6UzJ1VmpjamZYNHpFN3Nzb2M2dDB4R2lqMzhtV0x2eDg3dHk5dFVBQ2xLZENtT2JEUkd2cVA2cUttdXdaS2NUckxORXJzNWtGWHFxcXN3T3RKSnRuLzcyZU9xcWxCWDlRbTdhK3p0SEFlRm5kdmVvOS9ZVzdobjVuaGs0OGxOUzhYcm9ycTJrYlNNbUQ2bEtxaUttK3JhSnRLek04SzFxcXFxNHE2dFlNdHViM0FmdERsMHd1UHFkZEhnaGpTbm1acmFKdEl6MHNMZlVSU1ZSUnMvYlZPMHJ5cEtWQ1JULzM4Qm11cXFjY3YyTm4xZVEyb29CL2VYUC8yM2Y2elk4c0QvbStzbUVpRFFsMGZwemREMlRFOVZraVJWVlRYclJLZ2l1cG14Mll3c3k4UlpySmhraUUrdzRYQTR0TVZ1dzJLT0l5MDlnOXpjczRJVkJXWnREdFUya3A2UlJrTk5OYmEwTEt5NlUvWHN3Z2NZTXZsL0l0RjcyY0hJQ1JPeE5MN0wzcW9PN3RGTjlkUzVGTEt5MHFPdUo4WHJwcWEySGtkS09vN1krUm84U28yMTFmZ3N6cWdlcktyUFEzVnR3NmxFUmVNb3lJeHc3aXhuRXQ1RGZnQ2NYU013SlpzVHlMQWJhZkZwRjF0ZWo0aUNab3JUanF6NGFUMlJwazNRTEkyQW15RUc1Q0tzTGNMZ3BCREFTWklraWRERkhnUTRnUzVpMmc1N1UyNitlVXJnNXB1blBGbGUvdGtIT1RrNUV3d0d3eVdoZy9uMGZUOW56dXBLOHROa0t0enByRjczRXZuSlpsWS9jaU96Vmg3QWJqUWdlNm94RjkzQ3VtVXpNVmR2WWZpVS82Vm0zMjZhYkhkVHNjcEo5dUFiV1RwckV1Qmw5cVJSYk56N0dlN0NXeWxkSG14Vjd0NURidGJQS0NqSlkvdmVSZ2IwUzJQZjdyM01XLzB4WTRvY3JIeDRCbyt2MmNHMktpZlZOVzhUSnZjMVd4ZysvdjZnNHFhUDBwMjdXYlQ5S0pQNjJhZ3YyOENZOGIvQ25KRlBVMFVaUTJZK3hpUFROTmFrbEw2SVkveHpUTWs5eHRZYWdhZFJZY1d1SGZUN05xUDQzbkltamZvVlpkV2xWTG0zTVh6M0MxaHlMMmZ0a252QVZjcjRzYitodkx5VUduVVh3N2MvUTlIb08zaGt4c2dUc3I4eE0vNUdmbUVPZTB0cmVlVEZOeGszSUl1bTdVdkptZkFZUlNsV0xGYUZmZTUwTm14OGhWNzJKdTRaZnoxYjkxVlFWYWN5ZlBoNzREeUhsMTkrQkNkMGVGd25EK2hPVmZJQXFuZnZKRy9BaGJncVA2Sm8ydDlaZk5zUXlqY3M1YmFIbjJmdjl1MHMyZFBDMkhEMWs0dTd4djJNWGZVYXRGWHYyODNRV2ErdzdNNFJxSzVLcG8yOWp0MGVKdzVmUFJUOG5MWEw3ZzFXVE5SeGNXci8vNXd4ck9qTkY1YXZxK3FBcGVuTlVGOFEwSHg2bGhhNmFVdGF1RTNFbVF5aVZWRUo5ZjAwRytHcjJvT29CaFB5VjRlUVZMQW1KdEcxcTVORG4veUgxeXM5WkdlazhQd3p5N25sMFpjNTd6d0x5Kys5aHZtYm1yRzdQOFdZY1I0MjVTdnFrNjlrOTh0emdwZEhQUysrWE1ic2UwODJGdWZsaWFjeHZEZ0FBQ0FBU1VSQlZIdHY0cEYxVmVTbW1LbDBKYk5xL1N2a09ZMXNmZm8rSmovOE5nVzU2VlNYbFRMd3RyK3crTTdnZkdqYVJYYmVyWXdkbmNxR1hVZFFYSTNNVy9NUithV1BNUHpoTFJRNUJFMU50ZWc2UnAzQzRqdk9yUXYvd1pKUERyZjVySFovS1JmT2Y0VUQzdGpmQlhoNjVVb212L254MTlxV3FnYjQrT085dlBiYWF5eGE5QmZ1dSsvMy9QS1h2K1M2NjhZeWJOZ3dMcnBvSUVWRlJlVGw5U1k3TzV2dTNidVRuSndzSlNVbFNRa0pWaWt1TGs0Mm1Vd0dnOEZnbEdYWkpNdHluQ1JKVmttU0VpVko2aUpKVWdxUUFlUUFad05GdlhyMUd0RFllT1QvQ2FIV05IKzZTblR0ZnFIWTM2d0lJVlR4dDE5ZEtuNTIvN05DQ0ZXODlxY2JSTGNMSm92akFWVUlmNE80K3V5dTRxa2REVUlJVlFpaGlpZC9lNFc0NWJFdDRkZjY1ZE5YWm9zK044eVB2SGQ4dHppcng2WGlzRkRFemVjbGlYKzgzeWhlZStBRzhhdkhOa1crYzNpTDZOSGpNbkc0bmZVSm9ZcDNIdnUxT1BmcWU3VDlFVzV4OC9rOXhFTnZsZ29oVkJFNFZpck95enhiZkhCTSs2Ny80eFhDWU9naW5ucTNXdnU5M3lOYS9PMnZWd2hWdlAvOGJKR2FtaHF6ZEJkUC9ydTJ3OStFbHJmLytndHgxZStXdGZ2WkczKzZTVno3eHhVblhJY1FxaENCT25GcGp5N2krUS9xaFJDcStPU1YyYUxiaFZORnExREYwZmVlRUliNHM4U093MTRoaENyKy9NdUx4RTBQclEzLzl2UFg1b3MrMTg5dWY3M3RITmViTGtnVnIzenFFOC84N2lweDQ1OVdpeVB2TGhWOXJwdXIrNTFQWE44blFienllZnY3K3RXSEswWHYzaVhpNCtEK1BIWDNWZUxLM3k0VEFhRUtJVHppanN2T0VuOTVwMXFvYXFDbXJ1NmpCVEw4SEJnTGpBYXVBaTRIQmdFWEFFWEJ1WmtEWkVpU2xCS2N1NG1TSkZsbFdZNlRaZGxrTUJpTUpwUEpZSlFsR2NrZ0pka1RKQWtrWjJwM3NyT3pTWFBFWWJLbmN0RkZBN2w4OFBtWUpDaTVlaEwzM2ZkN0hucm9JVjU3N1RVKy9uZ3ZycktWZE90OUxjMUM1Ym5mWGMydkg5dk1sMjg4VE9aVmR5SUM1Wng3NWlVY0NsNmZnZjNyNk5MOU1nNjNjKzIrL2RkYnVPcTN5NkxlKytMTmg4bTg4QWFPK3JYWHIvKy82L25aL1NzUVF1WDRzU1lDb2ZVZTNVN1BydWZ5UmZCNzR1aE96akNaK01NTHU0THI4dExTcXZEcEszT0pQL01LRHJXcUNPSDZCbmxzcXArL3Zmb1dTcThMdUNVLzJxQnNidnlLVzEvK2dQdHZ1SWFNR0lmcWV6di93L01OZGw2WTh2WDBtaVJKb3FDZ0FLUFJpTkZvd0dBd2hobWNMT3NmbzN4eFliK2JKQ2toOWlaVVZRMHJodWpZVzZpL1FpREUzaW9xS2hTbnMrdXF0OTVhOTM3WFE5dEhPd2RjZWxOMlVDbDI2SkRMbVAvRWJtQWlBTVdEQm1HVEFkbko0SUU1N05wZHl1VGlRYWQwYUdXYkhSc3lkb2NkdTgyT3pXYkQ3VGs1bWU3cXJjOHlmVWs1NjdhOG9lMlBxNHpOZXp6SW01N2ozaTBhOC9RcDFaUld1T25YVDZQdzVweEJqQjhZbE9Bd1d1ak1FTzAvWVE1MUUrYjhzTTY2MnIzczllUXpPRmk5bmo5a0tNYkp2NlphaFdUQW5qK1Evc21hQVRwazBNVXNXN3NMR0hHS0c3TmlzeG5CYnNOaGMyS3plL0NlNUxud05aUXlidno5ekgveFh4UUU5MmZUeGkzNGNyTzU3OTdQQUNoM3F4eDVmL3VLRlYrMWJwazQ4Y2FqSjJCcG9ScFBueVJKb1RTT2dDN3FLZlQ1YVQ3Rkw0eHg4WmpqNGpFYlBLTFZEOWF1OGJnUCtlbmFvenQyZXhKMmV5S1o5dDBrZFUyaFI0OE1Fa1FqTHk1ZFRIV0RCMVZ4MDlSb0o5U0J3VzZ6WTNYWWNkbzhJTnV3NGlia0RmVTJOZUN4T3poWm9yOTE4Nyt4SXZQZ3JOOXJITGV5bmxMdkhtQThhbE1GOTk3MUozYVdWZUZWZmRTN0cyaHdRMDVvNVpaOEpvM3RGM3hoeGhMME5XVDN2NEFVTTREdFZJRXR3SXR2dk1WLzVETjU2c3I4S0d1eTFkM0FyYzl1NU5xcnIrS3FyT2hNMDQvM3ZzOGZ0cnY0eDlRUmREMUZaWk84dkR4Q3prK2owWWpCRUFLNmlKbXErZUhDdmpnUmZKU0NFVkdkYnpZSzRGUWR3SVhBTFFBb1YxNDVZait3SlBPeVg3NnJLTXExUnFQeGlwTnhLbi96SVVkczlaTlluYWQyTitPbi9KbkZxLzlGTDRjeHZCK3FPWmxoWTY0bUs3aXEwYU92SlNjM1V1OG9XMjJjckZkdDcrb0ZUSnJ6WEp2MzczMzhuNHdma01LUGI4amhoOGpaT0FsWklhV0oyOGZmUU1uc3B4aFRsQmExdmdGRHIyWmtnUTFGVWQ0KzY2eGVHNlpPSFhkZ2VRVFFPZ0kxdlk5TjBabWVZWDl4cUUrSUxCdUUwU0R3ZWtIMXVrVkRhek1JZ2IvRlMwS0NqVGl6ak1scW8wdVhMamlkRHF4R2lhNnBQZWg1WmxmbS9mSVBYTDlzTTlPSEZXQ3MzMHhhd1I5aS9tMzdjOUppdDJQMnVIQkIyOENMM043Vm9aSlZkREdqUjRkdS9sY3oxWkVCS053MzZXb3NrNTVud3hPRE1GTk5jZkpGMGRQZmFzUFNEbkxKc3ZFYkJBOFF2UG4yMjd4MFBKbG5mMzRlOGJxZFZqeE4zUEhVZWdZT0djYU52YVAvM3VmbEgvR2JUUWRaOG91Um5HSDlaaXI0UFh2MnhHdzJCd0hPaU1rVURYRHRNTGNnd0VsU1JIbzhVcUVRWW0yNndFSkF4OTdDaytqQU8wOStZREk5V1ZwVGMrQ2R0OS9aZUYyLy9sUENTcjA3dDJ6QnJVN0dwamF5ZVZzbG82WkdaS1J0Vmh1TkRmWGY3ZlhucTJmNnVCc1krZUFMRE12WEhYdDdBVVB5UFZTN25Jd2Jya251dUJzYU1OcE83UnprRFp2SzJ2N2oyc3hjWjhxSlEvbFdheUlORFYrM281T1BoVE9uWXgweWcya2pnbmZwOUFJS3JXVnMzdDNBaEg3SmxHM2FpRko0UGxreWVBQlgyVloyTmZnb1RqYXphY3QvNk4vdjk1RjlzTnR3MWRlZzhGMlczYWdzdmVkR2FncC96WklKQTZJK0dUSjBJSzkrWHJOcjB1Q1NOM3VmbGZ0cDZPWVpBMmp0Z0pya2x5UU4rSVFRQVFFQk9aeHdpeG9JcUFMSmdObG9Fa2FqRWVGckJ0a2t6c2hNMXdRaVpTOGZmL1lWUmxzaTZhbGQrZHp0b1Z1M2JqaXRYZzQyQlJpZWNTYjV1UWtjY1hkbDBNQUNqTUQyZGV1b1A4bjdzNXpkajBMZlBzb2FvU1FHMmRLYzNhbmNXQlVsRXo5bzhDWE1tZjhaZWYzdlFic0hLNXBzUGg2cXF6MU1MU25HTEVQVnBqWHNQWVdtWFYvLzNMWWM0b0ZOWCtDeXhERmt2cVlRYXU2V3c3dlRMMlhIaHgreXNlNDRIN3krbG4rOEhtUUhsdy9qL2dHWi9QMnQ5Nmh0bExsaDRUUEJGY1d6Yk9ZRStwNWkvOVRNekV3ZHVKblFrZzJOWVZNMW1zV0ZnVTRJSWFSZ1BhbVFwRUFvVnk0Y1dOQ3h0eERBUmJFM3dKK1JrZmt2MlJqLzNyOC9lWDZZRU9JNklDK0ZTb1lOdWd5anB3Wnp5ZStaTUNCeWRvZU52NFZGNDM1RjBlb0h5QnQyQ3kvT24wcmQ5aGNaTy9OdmVCcXFxR3FRS1NsNWs0S1JkL0Q0akU3MHQ3ejdHRGZzbDlSNlhkVFhWek95NUdMTUdSZXo4Y1g1MUc5NmtlVzc2aWljZXpNdno5Vk83YndWLzJaa3ZwVUhuLzRINDhiL2pEVUw4ckQ0NnFsMjkyRGpycFZrbk1KeE4xdnRaRmhQTGEraC84aEpPQjYvZ1lLaUYzQVdYY09XcDJlZEZMQnRYUGtjanJSUkVXQ1QwMWl3K0ErTUhYTWhLd3B5S0MyclpmR0tOekdqQVpzOXpjNjlJeS9GYWxVcGQyZXc3cEdJUW0zNmdORU01Um9LQzgvRGxuNEI2OWN2d2RuSmNlMXN6SjkyQmV2SzNPeXI5TEIzM0VVc3REcFlzT3BOaXUxN2VYRFJlc2lyb1YvUjM3VHJZT1pmK2VNTkYzMDI5QmV6MXZ5cTc2QVBlejhjVUhSUlRMMGloeStXb1VuZ0Y1b2FoeEtjaDJvRTFDUWh5d2hGRVVKSU1tYXpkajBjYjNZSmMwSnl1QXVjMWVyRVlUeUFxeldPNHVLTGFGajNUMTUrelVXODBZU3phendaUGZQSTdObUxtVk55R1RYZ1Fvb3lyTWpwbWFTZDdQMVB6bURjNkN6V2I5aER5ZmpvYkttQ1VWTVl1T3dhY3ZKZW9YREVyYXhaTUlPY0ViY3phOHZOOUM4OG40SmU2VlJWN21QRVBVOHlmOUlnYnJ0ekFsT0hYOEN5Z2pTODF1NzBPb1djcHRPeTh1RHJqS05IajFKZVhrNVYxWmZVMXRaU1gxOVBZK01SbXBxT0JXV1BRbFVLTFhpOXJYZzhIbncrSDBLb2t0YWhYaUVRQ0VqQi9ndWhhZ1VwV0xFZ0I4SGZDQmlEVlFzbXRNb0ZNeEIzMzMyL1R6emJVbkg1NnNBMTF5Mi9hMmhPZzFjbUkrVjB6QzVUcWF1cEJvdVR0T1FmaDBhSTRuVlRVOWRBU2tZVzFtQytSZFAycGVUTi9JRGFUWCtpcHM1RmVrd2F3UTh4aEJEN0R4OCt2R2JPbkRtN0hudnM4VmFkS2VscngvUU1QZnFERVU5RnQ2aDZYMXF3aW9CZzBtM1FlakdIR2hsanNVUzZzMnVxdDRrNEhFazRuVjFKU2VsS3ZObkMyZWVjUjJHZjNsRWxVazMxTmJpeHRVbEZPZEZ3bGEyaFpNWUdkbTVhZk5LdURhKzdpYnBHRjJscEdWaDBLVHZ1eG5vYVBESlpHY21uMU9YTStOOCt1YnQwNlVKaFlTRnhjWEhFeFpuRGR5dzlnOU16TnlIVVVJY3JJY3QrU1pabEZFVVJnVUFVZXdzVjE4c3g1bWtBVUlMbXFSL3d6NS8vZ0E5NHJmY2c4WTczenVGRGUzUkx1aGJvZWZvZEtabTBqT3dmbGZmTGFMR1JuZDIrWW9Cc3RwR1ZaZnVoQWEzeThPSERieno4OE1NZi9QblBDN3c2Z1BKM0FHaXhnUUZGSHh3SUFwc0lsVVVGNWJ2UlFFM0xUd3RXRTBTQm1zMm1xZDRtSllYNkUyZ2Qyck96cytuZHV6Zng4ZEZta3lNbGcxUEo5ckhuajJMaGpFWnFYU281SjZucmJyRTV5TGExM1pyTm1ZTHRHL0NELzNyR3BwdEVmUGJaWjFSVzd1Zmd3Um9PSFRwRVEwT2t2dFR0ZHVQeGVIQzVqdEhTNGtVSWdjL253K2Z6NGZmN0pVVnBsNzFKUWdnNUNIQ2htbE5Ea0wyWmd1ek5yRi91dm50bTR1OSs5N3RMblU3bjFaSWs5ZUduOGYyeXVLWWF0dXh6TVdSQS9nL0hqVlcxckw2K2Z2M3MyWC84OE1rbm4yenRCTkJpRjM4UTFOb0RORDJvaFZsYUVOUkVNRWNOdmVSUUJOVDAxUVNwOU9pUlFVN09tZlR1M2ZzSGI3cnlYWTBmRGJDRlJsVlZGWldWbGRUVTFGQlhWMGREZzZiRzYzSWQ0L2h4TjBlUEhzWGo4U0NFQ0JiUXQrTHorZkg3L1NGbDNpQnpDMGlxS3FSZzVEUmtvb1pDUWdhZGVkb3V3T1hrNUppM2J2M1B4YW1wcVZmSnNuemhUNUR6NHgrQlFHRDdnUU0xNzF4OGNVbHBUYzFCSlNZdzBCbW82UUV0N0VjTFZROEFRaC94Yk12U1RKak5jZWdWYjYxV2ZkMW5wSkZ4UmtZR09UazVaR2RuLzZqUGhmSEg5b2V5czdPSmo0L0hZb2tuTGk0T3N6a3VIR1F3R2swRUFnRmtXVVlJb1ROVFd6RVlES0U3WVlpOWlVQWdnQ1JKb2J5M2tFa3F4d1lYWXN4VEgyQ3VyS3cwcDZmM2VBZllVbDcrV1ZGMmR2WlFrOGswNnFmTC84YzNXbHRiMSs3YnQrL2RvcUp6OSt2QVRNL1NmTzJBbXI4RFFBdm9VampDWm1jc1N6TWFqVUdXcG9HYXhXTFJ5WGduWUxNbGtwU1VoTk9wbHgzS29tZlBIRkpUVTMvMDU4VDRZL3hUcWFtcFdLM1dJTUJac0ZnaUFCY0lLQmdNQmxSVkRVZFF2VjVqQ056dytYeENsdVgyZkc4aWFKckdSazhEQkp0aW9JWGlUWHFBQTh5NXViMTNBbnZlZVdmalM4WEZGd3l5MlJLdWdsTUtTdjQwVGgvWFI4M3g0OGYvK2E5L2JkNDlldlRvaGc0QXJUMVE4M2ZHMERveU8wTXNyWDNUVSs5UDA0SUVTVWtPbkU0bktTbmQ2TjY5TzFsWlo5Q3JWMDhTRXhQL1Q1eWZVelpGbTF3dWp2bGxlblN4UlJjQUJ4UnFqeDdIRUo5QWFrSjByOHFXRmcvMWJoL0pqaVFTVE5MM01ma29MeS9ueXkrMWlPbWhRL1VjT0ZETjBhTk5xR29BdDF1TG1MYTBSSnJGdExhMjR2Zjc4UG0waGpFNjN4dWg1akZxUUtBS0lRZmJtWVpNMUk1OGNIcFQxUVNZSjB5WVlQblRueDYrSUNVbFpZalJhT3hReFhmUDV0Vlk4b2FSbDNieXpVTnF5NkJDZ1VHRlA2NkpXckZyTTJwR01ibmhZNkdpS0ZGbDVoaURFL0ZFSmNpcXF1cUszNk0rb2I2bUdwL1owU1lpMk5SUVE2TWIwdExUL25Yb1lNMjd2L25OYno1OS9mWFgvU2NKYVA1MkFDM1FBVU5UUS9YT3dRQUIwU3d0MHJ5NHJUOHRvcVBtZEdwQmd2VDBkTTQ0NHd4eWMzTy9VMzlhOWQ2dHVKMkY1R2VjSGhIMzcwMjJhUG5xVlR5MnI1blVSRE8xamMxTXZ2cEtwaGQrdDIwSEpFbWlkKy9lSkNRa0JQTjU0dkg3L1JnTVJsUTFFSlhrRzVrOEJscGJqUmdNUHZ4K3Y5QytMMHVLRWtCUkZLSDRBdmhWRlVrU0t0cE5OYXdXRXN4M013UW5hNGpCR1lPQTVnc0IyNG9WSzFwWHJGanhMMkRyeG8xdlAzWCsrZWRma0ppWU9GU1NwQ2hkbC9WUFAwVHlsQUZmQzlqMmJZTVZqVDh1WUZOZDVVeVordjlZc2YzdDhIc3I1OTNBeEFmWGsreXdoYWZ5STJzK1lueS9Sb3B0NXpKdjMxR0d0OGVKUFdVVXBCVmdIL2N3MjVmT2pBQlh4VmJHamJ1SldtTUdkcVVldWZCbXRqNTlEM2pydVdQQzFaK3Qvc1MzT2NuUS9OSEhuNVlmMFlGU2U0RG03d0RRbEJNQW1tZy9PR0RBYURUcHBZYUlpek1URjJkcHg1K21LZDUyN1pwTWFtb3FHUms5MlAzNll0elhMYUwzZHh3a3NDazFqSm0rbG0xckg4UjhHc3laVTJCc3JaUWVhSW1TTFhxeUtaVzNKaFRUZU9RSTNuaDdsR3pSNE5FM01EWFBUa3Vyai9nNDdTOGYyYitYaTUvL2d2L011b2J2UzA2d3FhbUp5c3I5bEphV1VsdGJTeUFRNE9qUlJvNGQwNElLc2ZsdVFXWGVVTlFVUlZIdysvMVM4L0VBZmpWQW5Ea1NQZFVGR0NRaGtLRk5rTUVRWkhER0dCWVh0WHo4OGQ2OG5qMTdYaGdmSHo5RVZaUjBWY2RDVGdvQVZHMlJqVEdNSlVoaDNJM1E1SU9NdEs4SkxGNm9xb1dNYkFpbEdubWFvSzRSMHJLSWtxNEoxYjVVVjBGeUJsaDFzMXp4UW5VZFpHVzN2YU9xd2M5UzBxTi9BN0J4MFRTV05BNWgxWnp4T21EN09RdHJMbUhyNDlOajFsUkYvMDZBclhMdGc0eGRzZ3QzMldFMlYveWJkQ09BbTBuOWUyS2Y5aEtMcHcwR29MUzByUGJNTTgvWS9OSkQwejc4eGYrK1VCM3lxWjRFb09rWEpjalFBdTJabkFTRlQ0TTF6VEZtcHdHRHdSUnNXbXlpSTlNeklTR0JSSnNWQ1lrdUtlbjB6TTRJQmdreXljN0s0cEZwQTNGTWZwTzdSbVJIeTFnQjdvWmFHcnhtc2pPUzI4eVZ4cnBxRkdzeUtmYm9tNnFucVo2NkppOXA2Um5SVWxING1ENm9ENE1YdnMvNGZqOThnNWZ2VGJZb0JHcWhZMmMweUh5ZmdXYUh3OEU1NXhUUzJ1ckZaREtoS0g3aTR5M0V4Vm1DUVFiTkVkdmNiTUpvYk1Ga011TDFhaXpPNS9QaGIvVnpwTUVnVkZXUkJBcXRyWXFRNUFCbWs0cUVKSHgrRGR4Q1FRWlpEZ2NaQWtKZ0FDbFl4U05DekswTnlQWHRXN2dIK0FSNCtvSUxMdWg3NExNUHo3LzdoWXJCZHc3UFNEK1ovemh0T095cWdPd0pzSHBlNVAxN3g4QWVHVlEzVkpmQzBGbXcrTFlUcisvcG1iQ3FDZXAzQWxZd0ZzRFdwZkR3ZEZpK0IzSlNvTFFNNWp3TkUwdkF2UWN5eHNISVhHaHd3WjQ2MkxJTGN1MVF0eHNHajRhTVF1MmY3OXNNVzVzZ0c5aitNa3krRjNvVlFQayttTDhDeHZZUHd5RXJWcnpPNkVVUGZ5dnpZTTNxTnhnNjRWRzhTNjlsN2ZZR3BwVWs0OTIzbnRVVldleVpmRW10eCtQWlVsSHh4VWZubkhQT2ZqMjc2Z0RRMmdPMjBIdWhvRklnREdpeXJFcENxR3FvSXpnSUpFa1lUU1lNc2lTOExTM0k1Z1M2V09QQTN5d2FqcnJJek03R2F0RkF6V0tKSXk0dTFKSGRTa0tDalhqSnplc3Z2NEUxN1F6aTFHWlNpc2Z4NUp6QjJCcDJNMjc4UFpUdnFjRlllUk1iRmxrWk1QNXU1azBkQmtvanN5ZGZ5OHY3VkxLc0hocHR4YXhkOVRmU0xEQnpSQ2JiUEgweG1nM1VWKzVsOU96bmVIQ3lWcy81NHR3Ym1QVnlKWVc5a3FuWVY4OFRXM2N3SUl5SlprYU51b2dsTDY5bGZMK0pVY2ZjVmJhZUNmYzh5N3psS3loeW5MYkFwaHYrWnBidCtJSnhsN2NOOW4xVjlTbGJqamw1V1ZjenV2MkQ5MW4wL240cWo3UXliOExQdm5mMVY0UEJRTStlUFltTHMrRHp0V0sxSmdTN1hNY0NuSm1XRmkySzJ0cmFxb0diMGNjWjJVYU8xdm1GSytDblM2SVdQUTBFQXFMRkZ3Qkp4V3hTaGFxcWtxSWdDUkNTRkk2aUJnQ0RKS0dBWkFoT2ZHUFFURFcyQTNUR0hUdDI3QUwyL09iS3JLY3UyL3RSNzV5Y25DS3IxWHBoWjdseFN6ZkEyb1d3dEoxeVRGc0JySndMVGRzaGV4b3N2TzNrVHY3MlBiQjNPNlJad1J2c0NqajlZYmduNkVxcFdnK0Q1OExFRGNFN2VoM2NzeE1LSFhEUGNGaTVFZTRiQXcvZkMyTWZoSGtUb0dvRDlOb1l2TWsxd01UYjRkbmRNREFkNnJaQzhWMHdla3R3LzN3VjdDeTFjM3RCMnl1aWRNMWZHRnJ4cWphUjB5NWc5Zko1bldlOHEzV3NYbGZGN0huOThkUmV5dU5yMXpGMTRNU3k4Zy8zN2ZCMGNaVDFqRFBvbVptcVkxbWRBWnFpWTJlS0hzd2tDVFhZbEZob2lndVNrR1JKR01PUlRvbFdiNnRRaFlGNHM0bjRPQk9OVGNkRmdIaU9IV3NoTGFzblNiYjRzRDh0MGozS2lzMm1xZDBlK2JTVWhMNGplZml1Y2ZUb2tVNTZlanBaV1ZtUW04dkdqZU9aTmZac0hKT2ZaK2JJN1BCaDJQejRiTlo0TDJMdnJubVlVVms0N1JJZVhyNk5CVk1IYWlSZ3dEaldQVHdaVC9WR2V2Vy9tMm5qZDVCanFXUEo0czBzMjN1UVFXbUE0c01YWTB3VUZoYXg2OEdkaEJSdndyY21WeDI3ZG4yRTIvZmZFQlU5QmRtaXZubG44ei9wWjdCMTl3Y3NlbWNQbDAwZFRNSVBRRk5UVWxKd09ydVFtSmlJelpZUUZVSFZKdEZ4M0c0elpyT0hsaGFONFlWTTAyYXpEOGx2eEdMeGkyQmdRZks0RlF5bWdEQWF0UjROQVVVVklDUlpEa2RSSlEza2hCeThVT1RnaFdBSW1xbmhzcTEyZ001WVdIak9SMEVtOTlKYmI2M3JmdDU1NStVN0hJNGlrOGwwSVhCU25UVUdCdlgvSEZsZ2FRUTNuRlIyK2JBeEdxZ0JZWG1ZdXIwd1l5R1UxMmdtWkwxdWd0dHlOVkFEeU1xQ1VPL25YYnRoOXRQYTgreUJrQkdjZVZYYm9OWUlxeGZCR2tEMWdhc1Vhb0VzQUZjRGpVWUhqbmJjakRtRHJtUHhuS0RFdDlGMlF0OU80L2ExbEtaZGR1ejhyb0VkOVVYRmU5K1o5TmN2REE5TlBoTHlrWGJDenRvRE5iM0NSclR2REZTQnBHcVBRb1I3YnNpeU1NZ0k3WWFvQ0pDMDNwRUdJeGFMUlJpTlJ0S05jUEJ3QS9iVWJMcDN0ZXNDQkJxbzJXelJxUnpaQ2VmeitxS1ZQTHN5Z1dIRFJwQmJkR0toeHkxYi9vWFowNS9aOS80KzZEYndVR2ZaQzJqQU5tU1FabzVic3daU2JDOWxkNVZDVGw0eVF3WWxjOXU0YXhnMzhqSUdEeC9Gb01Lc3FQWGFuUTVjOVVmYWJNODVZREoxZFpOUGQxTVVUbFcyS0NIQnhsa0pOczY2c29RMzVxNWcyNUZMdUx6ckQ1UDViTFZhNmRPbkQzYTduY1RFUkJJU2JGaXRWcXpXZUpxYU5BYm5kc2RoTmpkak5wdndlazE0dmEwY054c3g0Q2MrUHV4N0U3TGtCMk5BTXBzMUJ1ZHIxUmljTEdzcElvR0FRSktGaEFnSDdLVGdYVjNXbUp6azEvbmlEREVncHdjNlkxQkM2UUN3OFp4ekNrM0xsajJWazVOelptK2J6VlpvTkJyN1EvdDlsY09LTGwrejhNNFNHK1J5dzlpeE1HOGRqT3dIbnQyUU5xV2Q3Y1JzU3phQ1Q0bjRJdlNlWFhzR2pCa2RlVDFtUElRRmtPd083SW9MbHhkaTZaalZrVTVlM2dsMTlOMktvbnpnY3JsS0Z6NytWT1dSRDdmWDJNM0wxUmhtRm9qeGczVUVhSG93MC85RzFmdlBnbzBpVlVsQ0lCQ3lMS01HQWtLV0RhaEtxeERJSk5vVE1adU1IR3RzRUFhVEJsNG1rd21QNXdpeUxPSHpLOWdTYmNUSHRNUUw5ZmwwT3AxMDY1WkNldnFGYkx2bUpqNzc5Rk5XUGZzZ2YzM3RBOHJXek84OEtnd1VEcmljMGNPQ2dndWpyOGFla24xQ3FKano4dnVNM3I2RkxaczJNSEhJK1R5NDdtTW1GRWVrcXR4Tkxtek8wNk9EMWZja1c2VHkxYkVXdWlkcC9LeXh2bzREaXBrdWxoKytuQ016TXhPSHd4RUVPRnNZNE9MamoyS3hhT0NtQlJaYU1KbGFPQlpud29DUGhBUmpxR0tCaERnakxzVXZMSFlEaWk4Z3VZV0N5UndRSmxrbEVBamc5NnRJa2lEWVR5YlU2Rmx2cHNyQkM4UWdTVkk0NktBRHVmYkF6dmpSUjN1TjU1MTNYaW13RDFoN3hobG5HRzRiOVh4V3ErR3NISjh2cWJmSlpDcVFKS25YdDNyQUdxSGFDQ1ZGMms2dlczMVM2bVFNR2dqcjE4Q0lHYkIzUGRRb0VmWm1xd1k1RzRxRFFZMkdCaDJHbVhNcHptMmt0TnhEWWVHSm84TkNpQXBWaUUrT0hxNnIyRnl4NzhzYmI1eDBxS2FtUm8xaFplMnhzNDVZV3Zpem9OS0xFck1PVlFpaFQ5VVFXZ3RjU2NneUJGU0V3V0JBOGZ1RndXUkNWVm94bU9LeHhzY0pneFJBVVNFK1RtdDdKN3hOZkhWTTBLKzRtT3E5SDFEanl1YjhOSWN1NFZZZjlkVHFQYnQyNlVKcWp4NmNmZTZGRE8vbklHM2tjM2cxbDZqR29DMFc2aHNhMEx5WjJoZzg2Rkx1MlZwSnY5a1ROWmFyZW1ob2l0eHFObTNaeE15UlUvQlViMk9ucTRBRjJVYkFoOHV0VWpSd0tFVURoOUpVK2svS3ltdEJCMnhsWmFVVTlXL0xHTjNsbTVneGZ4WDNMRnBNdnYxMEJiWlRraTFLNVMvUHZjUzdMUmE2eGN0OGVhU1pjU012bzMvQ2FRSHVKQ1ltVWxCUVFGSlNrZzdnRXJCYUcybHFpc2RpY1JFWDEweGNuSm5HT0RNbTRjVm1NOUhhcWtWTjB6Sjl1Q3RNMUIvMkkxUkZ5R1lGZTRJaUJaTjdoZGNiUURhcVFoYXFGRXIwMVFVYVFpQVhabkhCdkRnLzBibHhoaGlBYS9QOHl5Ky9OUHp1cnlXZkFSVnhDM2tITUR6eXlKOXNoNW91VDA5MDljaHFiYldkYVJLbVhpRDNSbE1vK2ZvakMyNGZDQ1VESU1jR3lWa25ONG51ZWhoR2o0SDhwWkRiSDdLQ2RxT2NEQ3NXd2FTQld2REFWUXZtL3JEeDhZaFRldXk0SzFpNWZpTVRDa2RGaCtlRitNenI5WDV4L1BqeEw2dXJxdy8rODU4YkR0MS8vLzB0Z0RxaFg3bzRBWmgxQkdxeHo4Tkw4UHhFSmRJRzJ3TUppS1JySUVsQ1FzSm9rSVJmMGRLS2ZLMWVUT1k0TENaVkhHbHljN2pCQzBMQ2FKQXd4OFZqTmNQZWZYWGs5UnRJYWxjN0dZTXY0dTJOTy9Iazl5YTdXM0pRbGNOSnQyN2R3cVZSbVptWmJIcmlMaTVlK0I4SzhyS28zTHVIMis3N0IzcjRIenZ0TjR5ZGRnTWJGOXNaUFBsL1dEQmpCSU9ueldYRXp1c29LTHFJL0N3SEZlV1Z6Rmo4SnRPSGFtUy9hZnZMREJyNkdrMlZwVXg2K0JseUxBQjFqQysrRkhkR1BuWWFxSFRuc21aa1lSUjVXYnZtMzR5ZE82L051ZmZXbC9QTU15OHg4Y0h2RDlpKzExclJaazh6Ujd3S1hSTVRTVERKUHdpSTFkZlg0L1A1eWNqbzBmNCtOamRUWFYwZFR1ZzljaVJVYStvS3l5QzF0R2krdDlaV2J4RGN0SHBUajl1SEloU0VxcVdIaElycVE5VUx3UnBVZ2pXb29VSjdRa0NuZTVTRGdDZnJscENNa2lHbUNmU0puaHRpZncvSXExYTltcHlYbDljdE9ibGJxczJXa0c0eW1ib2JESVlNU1pJeTJ4cDliVWRERFNoV1NQdWFFU0JGQVdvaGF5aVVsMGZzWmxXQm1ocXdKNE1qWWt4N2hSQUhXZy92T2podytCKy9XckgyNmErVXh2ckRaV1ZsUjY2L2Z2eFJJaHA2NGZTSkRzQ3NJNGJXNGZOUThibnU5L29ValhDcVJ1Z3gyQjB0cU5Zc2laQmN2VzZKbEVNWlpBUVMxZ1FibHJoUW5hYzVHUEVNQlFnU3d1M3d1blJ4aEZsYUtEaWdiNFhuODdpb3JXL1VPanBaVHo2THpOTlVUNE5MSVMwOUhYUHc3alJ6ZUNiWk05OW5ZcUdDWW5HU0hKWHVvZEpRVzRzYk0xbnBLZEdwSS92V01uRDZPclp2WG9MMU5DQXJQN29pK0c4S2JLRlJWMWNYTEtRL1JFUERZUm9iRzRNYWJ4R2xFSStuL1lvRnY5OGZ6bjNUVnk0RUFvb1VDS2hoZ0FzRTFDQ3dxYWhxR05UUU1icU9RQzRNVURHcUk1MHRjc3h6T2VaNWFCdlNvNDh1c1BYdDI5ZWVscFptVDBwS3NsdXRWcnZaYkxZYmpVYTd3V0N3eTdKc2t5VEpKa2xTZ2lSSjhVRWdEQWtBR0hUZXRSQXcrR3EzNHB2NUxONXplNHVXYmErSjV2UUp3cjN3bDZvN0VBZ2NWeFRGMWRyYTZ2SjRQTWVibXBwY1gzMzExZkc5ZXo5MjMzMzMzUjRkZUlrWUlCT2RiKy8wNGdBQUM4eEpSRUZVZ0prZXlEcGlhbEZMSjBBV0JXWjZJQU9FTEV0QzY1SW1ZVERJT2tDVE1SaU1zWlVEUkJKdDIxWVFhTW0ybWlKSFlxSTl6TktTazdzRnU3RnJPV3JmNVFnQjI0eWhYMjg3KzdhdHBjRlJURW4rNlNFUC94T3dkWmJONHZkejRNQ0JzSUNsSm9OMGxHUEhYTzJLV0VhcmhmaUNBS2UwQTNBUkZxZDF1bGRENVZyRU1Mak9RSzVkc05PVmQ4bWRnSnFoSFdDTFhmVGI2V3lobmNmWTU5Rk8ycmJQOVkrZExiRkFGcnQweE5MYVBBOUp2N2NIWWljQ3M5RHptSjRhVWV5c0xhQ0ZRQzFTdU42UkdHUlNraDJIb3d2SnlWMXh5RzcrODJFbERtY1hESWJvL3ZUOWg0MW5RTzYzMjExOTM4N05XSHNOSk10cC9xKyt6bjhDdHBNWXg0NGQ0K0RCZzlUVjFYSDRjSWk5UlhUZW1wczlPdk0wVXJVUXFUbU5CcmhBSUJCbHBxcXFHZ1Z5UXFpU3FvcXdxVXE0NGJPUWhFQVBkRkk3SUJRRFVNS2dWVU8weTlJNkF6ZXBBNENUMndHMXpnQ3VNM0NMQlRUYUFiSE9HSnJhQVZ1TGVxMmwya2lkZ2xqUVo2YnJOeHYybTRYQUxHaHFTa2hTTkpqcFFFMkVGR1AwZ0dZMFJoaGFxSHFnYlY2YVRWZm5HZkdsOWVqUmc2U2tKSDRhMzNsVTlQL2VTRXBLSWlrcGlhNWR1MUpiK3hYMTlZZUNPbTlIZ3lWWng0TUY5YzNoZ25xdlYxK1NwV2R2SVJNMUVLVWVvZ2xjQmdnRVZGUlZGVUdRRTZxcVNxRitNMXEvQnFKWVhQQUNqbVYwT2dDU1pFbUtCVHdoQndHeU0wRHJETnkrRG5QN09zRDJkY3pPZGdFdUNFaWRBaGpSemJMRG9LcjNtWVZlQndFdGlwbHBRQ2FIMmo2S0VGT0wxSFlhd3dyT0VaWVdxUjZ3UktWd2hGaGFFbDI2ZENFNU9abVVsRlRTMDd2L241QVgrZ25ZZnVCUld2b0p1Ymxua1pxYXlvRUROZFRWZmNYaHc0YzVjdVJJbEpCbHlEelZLNGJvYTA0MTM1c0djb0ZBR09BSUJBSjZpU1JKeCtCRWhNbUowS09JTVZYUlIxY2piRnhJN1lOU0ZOaEZmYWNkYzFjNkFiQjF4TnBpVFZMUkNiaDFCbkJxZTY5MW9OUVpzNHY5VGRTMjlLOWpURTFrV2RZRkEvU0FaaUNrdWhFTGFBWkRoS0hwaTliYlU3YlZ6TTZJRUdUWHJsMkRMSzA3bVprL0tWcjlCR3cvd01qTXpDQTFOWVhhMnRxd1NtOWI4N1E1R0Z3SUFad3Z4di9XaHIyRkFneEJrRk03QkRrZHdCSE41cVJZb0l0NjNzNW5iWlpnSGwwbnpFeEwwdm91Zld4QjFuV3lUSzZqQmIxcEdmT2E5bGhaaUpucC9HZnRnRm5JN0RSMnd0TDBmalJ6VUJNd1hpY0NHVzEyaHRSdDA5UFRNWnZOUDExZ1B3eXdCZGl4ZHgvL3JQaUtZNHBNd1ZrOXVlSGNNekFEcmMxTnZMcnJNL2JXSGNOZ3NUR3l1SkFMdThja3dpdk5QUFh2anptejk5a016dmp2OVIyWXpXYXlzN05KVFUxdFk1N3FvNmZSL2pjOWcrczRlcW9vQ29xL2xaWldDWXRaaWdJNVhiQ2hQWkFqMGlZVktmWlJWVlVrV1E0SjJNUXlPenBoWXJyWFVralc2MlRCckNQR0Z2V2VDTm5aSjJaeWRBSmdrZDhMSVZSVllERElVVXhNNXk5RG42SVJDMmFod0lDK0NiZWVvWFVXN1l6NDBTeHQvR2loYUdlczJSbmJVS1c5VWJZYnNvcWczWmF3N2lvbVRIbVl4U3VXNE5SZDFiWGxlNUJUOGtsemZEdUE2U2xkeGVDNXU5ajU4dnh2dko0aGMzZXgvUlRXY3pMLzZSVDAySTZ6ZW5jdFJZWFpwSnBWbHIyOWtjK09YOGFEZzdMNXNyS0tqNXRsTHUyYmkvdklRWDc5OTVVc3ZtTWlBN3BFTnZQVzVxMHNlZTlMcnJMMStLOEd0dENJajQrblo4OGMwdEpTcWF1cm83NitQbWllNnYxdklZQnJhU09MMUZIMHRMbmhDSWNiQStSa3BlalRRNFRPRDZjSE9ZUlFoUlp3VUFrR0hzSkFGN3pPSlNFRWtpd2pSY0NPazJGZE1jQjNJakE3MlhLU05xYXBpUHc0Q3FSQzdLb2p0cWNIeFBEejRQOHpHQXpoOTJNQ0FFUWVZOEZNMWpYZDFnT2FJZGlZdTZOb1o3U3NVRWlGUXdPMGlCK3RhOWV1cEtTa2tKYVdGcFdQZHFJeGJRUXNySUQrN1JUTnJWc3lCOHVBOFZHZ0JyRGt2cC9qbVB4V1ZCSDhON3FocHhWdys2UnZudEtoZWwxVVZSOCtwZCtlekgvNitzQW1PM2hnOHVYaGwxMDhoN2wxejVjd0tKdmN2a1U4MERmMFNUYTdQL21VTGZzYkdkQkZPeEN1dXYwOFYydmp1ak90ZUg1azFEY2hJWUdlUFh2U3ZYdjNjUFQwU08xblBQL0NlL1F0S2NIZWNoelhvVW8yZlZKTG43NjVKTFMyQkFNTXNRek95NEV2dnFEcFdETkNFUnc1Y2dSVk1wR1M0b1JBZ0lEaTVmRGhZMWl0Um5ITTVVSkZ4cDdrUUJaK3llVnlvd1MwV0lJcHppSk1SZ2toQkFHL0QxOGdJQUJKbGcxSWhNQk9SVkZVTFNDaHFxQ3hscE1GclRZQXBrWFlwVENsQzZia0k3Y3ZjaWpDM3dtQnJQYjlZRjRZWVlBSzdtMlExV21BSklRcWhOQitMMGt5UnFNaEJIQUVGRDhDQ1VuV29wUWhVQXY0VzFFeG9yUzJFaEJndGRteHhwbkNRTlpPMmdadGZXbnRNelN0NzBBUTBJeng3UG5FU3U0Wk5uWnNTNlJiVGhJM1QzU1EzazN6b3gydFNPTnZ6MWh4eVRCK09nd3RCRHl3Y0JHTXZ4UFNMT0NyaDBlZWhSbDNRZVVtV0xrWnF0encrRnhJTThPSVNUQXdONFFTalN4KzRsL2N0V1ZwK09BMmxXOWp3Yk52c2JtMEhzdnlQOU8wM1VIZTRHdVpPRlJyWmx5NWN5MWJtNUpKcWQzQ2k1cytJWGZJejdsdjhuQXFkMjNnNlpmZm9ycXVrZlRjODVseCszVFM3UnBNckh2NlliWlZITWVhZFg3VWlhell2b2J0alhhOGV6YXd0ZUlJSTZmOGxyRWx1U2R4MWZoWXZXUWVhM1orU2IrUk4zSGIyQkprb0w1OE8wdWZYVVY1OVNHY0diMlpkdnVkNUtWWlQvaWZWRTg5eXhZdlptdnBBYjV4K3YrbjlRM2twcmVUUytNL1RzVVJsVDZwUVZhbStuaG83VTZtWDNrK2NUL09qbCtBVmx5Zms1UERPZWVjUS82NWd6akgwY0NMRzh2SXlrcGp4L28xbURQeXlVeExwVnUzRkpLVHUrSjBPbkU0dW9UTHVleDJPNms5TWtoMUppS1pFMGhMU3lNMXBTc0pWbzBCeE1jWmNMdVBjK1JvTTNhSEU3dk5ndEVjUjV4UkZySXBUdGlUa29RdHdTeDhMYzFnREdhMFd6UTVKczAyTXdtVHlTU01ScU13R2lRUkJBaGhNQnFFMXNSQlVnMEdneXJMY250TElMaUVHdmRHTDVyMm5DSkprcVo0b2RWVmhsL0hMQUZKa2dLeUpBVmtXUTRteVdycmxtVXB2QjJCVUlXR3VtcHd1NnJCWUZBbHRJNU5KcE5SU0toQ0NhakNhRFFLazhra1RDYXpNRWlJZ0NwMGlyTnhpSUJDYTJ1cnNDUWtDcHRaRm03WGNSRVhyL20vSW83OTRIR09qOGRxdFhDOHNaNURodzVSVjFkSGJXMHRCdzhlNUtzamJ1eDJPMGxKU1RnY1hZSitzcTUwNjVaQ2Ftb3E2Y25kZVc5TEJtVU5aM0Q5OVRrMDdzeGxXMTArNTV4ekRrcEZEdGZlYWFWa0xFd2FDWGVOZ1ozMWdCV3lmRERwSGswc2ROWVVjS1dCWFliMFhqQjhPRGpOVUR4RWU1Nmx1K1I4NVp2WUtmZG5RSHFFcDFpU3N4ZzIvQXF5VTJ6MDZuY3h3NGRmUWI5ZUVWbS95cDF2Y3QrMFg3Q3F3c0w0aWRkalZWd0FWRldVMDJ2QWxkeCsxeDFrdWQ5ajJKUjVZY0dDdkg2REtja0s4TWl5TjJLQTdRMW1UTHNidFdBb0U0Wm1NbjNzelZTZmhFUlIwKzVWYkhEMVl2cVVhMWs5K3pvV2I2Z0VvS2F5QW1kK0NYZmVkUWNsS1ljWU51SVczQ2Y2VDZxTEdTTXVabDJObldtMzMvSE5nZ2ZWK3ovaHNVOENQRG5qN0ZpaXlUTnJOaEozOWdDdTdLR1ZKTzdjOFI1Tm1VVU02bWJtdy84RHprdUx4VUoyZGpaM0xYNkJUeSsvbU1jZi80REd6SkhNdnU0UzNDNTlpb2luVFltVzFacUlUYmlvOVBqSnlNaUk5c0VadFJtVGNWWnZFZzFDWjZaYU1NZjdhUFkwbzBqeHlIS0xVREVRRjJkR21NM0VXVlFhV3IyUzBSeEhuQ0Zvc2lxQ0ZxOWZ4TnNTa0lXZ3RhVVpSWURSYUNSaXdZcVFPUm9tV2tFaUZrVytoTkRpcHFvL0FMS01qQ29GQW1Bd0dKR2xqazFRaldSSitIMCtKSU1Sb3h4NUQwQUVBZ1FrQ1lzbExzcWtOSnROQkJTRmdDb3dHbVI4QVVGY25CbEprcEVzRnBRV0Y2NVdTVmdzY1dGenMvVzRoQ2t1aVdTbkExbEs0SGhsTFhKY1BQRkdmYldBUGpBZzAycExKSTVvYzlTYzJBV25zMHVVRDAzZlNNVk9FaWFqZzkvKzBVbS8xRzUwUDU3S3F6VkdMQlpZdWhBbXpvSVJKZHIvbnpvVVZxeUY0aWt3Wmhac0hnRmp4a0JUQ213TXlwcWxaR3VMM1F6OVN0cWFvclhsVlZoeU1xTmtYU3pPREVwS01saWZZc1dSWDB4SlNWdXp6WmgzQlkvUHV4MFpHQjU4YjhqNEdkUlc3R1Z2ZVEwWmhlZFM5K3hiTkFMSlFFNWhNU20rTXVSbGJVM0lncEUzTW0zVUVLQ1lnYlArek41YVRTbTUwNUUraVBuM2pzY0J6SnB4RGZlOHVJcmJoODJrMy9DSlpGZnZZMDlaSmVaZTUyQ3BmSUFLTnhSMThwOWN1MWV6dkRhUG1zMHpzUVAvSDNpeGdKbVFPNXd1QUFBQUFFbEZUa1N1UW1DQyJdLFsxLCJkZXRhaWxzLWNvbnRhaW5lciJdLFsxLCJkZXRhaWxzIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZy9leHBlcmltZW50YWwvZW5hYmxlX2R1bXBfZGVidWdfaW5mbyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9kZWJ1Z2dpbmciLCJ0YXJnZXQiLCJibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxUKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksZygpLGgoMywiZGl2IiksVCg0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLGcoKSxoKDUsImRpdiIpKDYsIm9sIikoNywibGkiKSxUKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxoKDksImRpdiIsMikoMTAsInNwYW4iKSxUKDExLCJ0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oIiksZygpLGgoMTIsInNwYW4iLDMpLFQoMTMsImxvZ2RpciIpLGcoKSxUKDE0LCIsICIpLGgoMTUsInNwYW4iLDMpLFQoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSxnKCksVCgxNywiLCAiKSxoKDE4LCJzcGFuIiwzKSxUKDE5LCJjaXJjdWxhcl9idWZmZXJfc2l6ZT0tMSIpLGcoKSxoKDIwLCJzcGFuIiksVCgyMSwiKSIpLGcoKSgpKCksaCgyMiwibGkiKSxUKDIzLCJSZS1ydW4gdGhlIHByb2dyYW0uIiksZygpKCkoKSxoKDI0LCJkaXYiLDQpKDI1LCJkaXYiLDUpKDI2LCJkaXYiLDYpLFAoMjcsImltZyIsNyksZygpLGgoMjgsImRpdiIsOCksVCgyOSwiQXV0by1hbGVydHMgZm9yIHByb2JsZW1zIGZvdW5kIiksZygpKCksaCgzMCwiZGl2Iiw1KSgzMSwiZGl2Iiw2KSxQKDMyLCJpbWciLDkpLGcoKSxoKDMzLCJkaXYiLDgpLFQoMzQsIiBJbnRlZ3JhdGVkIGRlYnVnZ2luZyB0byB0cmFjZSBwcm9ibGVtcyB0byB0aGVpciBjYXVzZXMgIiksZygpKCksaCgzNSwiZGl2Iiw1KSgzNiwiZGl2Iiw2KSxQKDM3LCJpbWciLDEwKSxnKCksaCgzOCwiZGl2Iiw4KSxUKDM5LCJMaW5rIGxvZyB0byBjb2RlIiksZygpKCkoKSxoKDQwLCJkaXYiLDExKSg0MSwiZGl2IiwxMiksVCg0MiwiIFRoZSBsb2cgZGlyZWN0b3J5IG11c3QgY29udGFpbiBUZW5zb3JGbG93IERlYnVnZ2VyIChWMikgZGF0YS4gdGYuZGVidWdnaW5nLmV4cGVyaW1lbnRhbC5lbmFibGVfZHVtcF9kZWJ1Z19pbmZvKCkgd2lsbCBjb2xsZWN0IHRlbnNvciBkYXRhLCBncmFwaCBzdHJ1Y3R1cmVzLCB0aGUgYXNzb2NpYXRlZCBzdGFjayB0cmFjZXMsIGFuZCBzb3VyY2UgY29kZSB0byB0aGUgc3BlY2lmaWNlZCBkaXJlY3RvcnkgbG9nZGlyIGFzIHRoZSBpbnN0cnVtZW50ZWQgVGVuc29yRmxvdyBwcm9ncmFtIGV4ZWN1dGVzLiAiKSxnKCksaCg0MywiZGl2IiwxMikoNDQsImRpdiIpLFQoNDUsIiBTZWUgIiksaCg0NiwiYSIsMTMpLFQoNDcsIiBkb2N1bWVudGF0aW9uICIpLGcoKSxUKDQ4LCIgb2YgdGhlIFB5dGhvbiBBUEkgb2YgRGVidWdnZXIgVjIuICIpLGcoKSxoKDQ5LCJkaXYiKSxUKDUwLCIgU2VlICIpLGgoNTEsImEiLDE0KSxUKDUyLCIgaGVyZSAiKSxnKCksVCg1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSxnKCkoKSgpKCkpfSxzdHlsZXM6WyIuYXJnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGNvbG9yOiBsaWdodGJsdWU7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbWFyZ2luOiAycHg7XG59XG5cbi5jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG87XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogNTBweDtcbn1cblxuLmRldGFpbHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLmV4aGliaXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLmRlc2NyaXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLnNjcmVlbnNob3RbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMjAwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxMzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn0iXX0pLG59KSgpLGhYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbbVhdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLF9YPXtnZXRXaW5kb3c6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93fX07ZnVuY3Rpb24gZ1gobil7bGV0IHQ9X1guZ2V0V2luZG93KCkucmVxdWlyZTtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3QobixlKX0pfXZhciB4Tl9sb2FkTW9uYWNvPWFzeW5jIGZ1bmN0aW9uKCl7bGV0IG49X1guZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgZ1goWyJ2cy9lZGl0b3IvZWRpdG9yLm1haW4iXSksYXdhaXQgZ1goWyJ2cy9weXRob24vcHl0aG9uLmNvbnRyaWJ1dGlvbiJdKX19O2Z1bmN0aW9uIEpFKG4pe3JldHVybiBuPyJ2cy1kYXJrIjoidnMifXZhciBPZj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcgSWUsdGhpcy5vblJlc2l6ZSQ9bmV3IEllO2xldCBpPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMub25SZXNpemUkLm5leHQoKX0pO2kub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUoZS5uYXRpdmVFbGVtZW50KX0pfW5nT25Jbml0KCl7dGhpcy5vblJlc2l6ZSQucGlwZShpYSgxKSx3cih0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJkZXRlY3RSZXNpemUiLCIiXV0saW5wdXRzOntyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NczoicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMifSxvdXRwdXRzOntvblJlc2l6ZToib25SZXNpemUifX0pLG59KSgpLE13ZT1bImNvZGVWaWV3ZXJDb250YWluZXIiXSx4WD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6SkUodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoSkUodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShNd2UsNyxNZSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbR3RdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpLEkoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSxnKCkpLDImZSYmXygicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltPZl0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQ1g9KCgpPT57Y2xhc3MgbntuZ09uSW5pdCgpe3RoaXMubW9uYWNvJD0kcih4Tl9sb2FkTW9uYWNvKCkpLnBpcGUoTigoKT0+d2luZG93Lm1vbmFjbykpfWNvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInNvdXJjZS1jb2RlIl1dLGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxkZWNsczoyLHZhcnM6Nixjb25zdHM6W1szLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJtb25hY28iLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwic291cmNlLWNvZGUtY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmXygibGluZXMiLGkubGluZXMpKCJmb2N1c2VkTGluZW5vIixpLmZvY3VzZWRMaW5lbm8pKCJtb25hY28iLFcoMSw0LGkubW9uYWNvJCkpKCJ1c2VEYXJrTW9kZSIsaS51c2VEYXJrTW9kZSl9LGRlcGVuZGVuY2llczpbeFgsY3RdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIEV3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiICIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIFR3ZShuLHQpezEmbiYmKGgoMCwiZGl2Iiw3KSxUKDEsIiBObyBmaWxlIHNlbGVjdGVkLiBDbGljayBhIGxpbmUgbnVtYmVyIGluIHRoZSBTdGFjayBUcmFjZSBzZWN0aW9uIHRvIHNob3cgdGhlIHNvdXJjZSBjb2RlLiAiKSxnKCkpfWZ1bmN0aW9uIER3ZShuLHQpe2lmKDEmbiYmUCgwLCJzb3VyY2UtY29kZSIsOCksMiZuKXtsZXQgZT13KCk7XygibGluZXMiLGUuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLGUudXNlRGFya01vZGUpfX12YXIgTVg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLFQoMywiU291cmNlIENvZGUiKSxnKCksUyg0LEV3ZSwyLDEsImRpdiIsMyksUyg1LFR3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsV3QpLGcoKSxTKDcsRHdlLDEsMywic291cmNlLWNvZGUiLDUpLGcoKSksMiZlKXtsZXQgcj1pdCg2KTt2KDQpLF8oIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx2KDMpLF8oIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltGZSxDWF0sc3R5bGVzOlsnLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MjRweDtwYWRkaW5nLWJvdHRvbTo2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vcm1hbDtvdmVyZmxvdy13cmFwOmFueXdoZXJlO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjAgMjBweH0ubm8tZmlsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzY2NjtwYWRkaW5nOjAgMjBweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNvdXJjZS1maWxlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjEwMCV9LnRpdGxlLXRhZ1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTAwJTtwYWRkaW5nLWxlZnQ6NnB4O3ZlcnRpY2FsLWFsaWduOnRvcH1zb3VyY2UtY29kZVtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7d2lkdGg6MTAwJX0nXX0pLG59KSgpLHdYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JD10aGlzLnN0b3JlLnNlbGVjdChYRSksdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWMkPXRoaXMuc3RvcmUuc2VsZWN0KFFFKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChSbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJl8oImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsVygxLDMsaS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkKSkoImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsVygyLDUsaS5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixXKDMsNyxpLnVzZURhcmtNb2RlJCkpfSxkZXBlbmRlbmNpZXM6W01YLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxSd2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBQd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDEzKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksSGUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBPd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE0KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksSGUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIGt3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiksVCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLFMoMixQd2UsMiwxLCJzcGFuIiwxMSksUygzLE93ZSwyLDEsInNwYW4iLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLF8oIm5nSWYiLG51bGwhPT1lLm9wVHlwZSksdigxKSxfKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBGd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDMpO3YoMSksSGUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gTndlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLEhlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBMd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIpLFQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLFMoMixGd2UsMiwxLCJzcGFuIiwxNSksUygzLE53ZSwyLDEsInNwYW4iLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDIpLF8oIm5nSWYiLG51bGwhPT1lLm9wTmFtZSksdigxKSxfKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBCd2Uobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE3KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO3YoMSksSGUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gVndlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxTKDMsa3dlLDQsMiwiZGl2Iiw5KSxTKDQsTHdlLDQsMiwiZGl2Iiw5KSxnKCkoKSxoKDUsImRpdiIpLFMoNixCd2UsMiwxLCJzcGFuIiwxMCksZygpKCkpLDImbil7bGV0IGU9dygpO3YoMiksXygibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHYoMiksXygibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEh3ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxOCksVCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSxnKCkpfWZ1bmN0aW9uIHp3ZShuLHQpezEmbiYmKGgoMCwiZGl2IiwyOCksVCgxLCIgXHUyOTEzICIpLGcoKSl9dmFyIFV3ZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiBqd2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxUKDIpLGcoKSxoKDMsImRpdiIsMjQpLFMoNCx6d2UsMiwwLCJkaXYiLDI1KSxoKDUsImRpdiIsMjYpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMikub25Tb3VyY2VMaW5lQ2xpY2tlZC5lbWl0KG8pKX0pLFQoNiksZygpLGgoNywiZGl2IiwyNyksVCg4KSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLHFyKDYsVXdlLGUuYmVsb25nc1RvRm9jdXNlZEZpbGU/ImZvY3VzZWQtZmlsZSI6IiIsZS5mb2N1c2VkPyJmb2N1c2VkLXN0YWNrLWZyYW1lIjoiIikpLHYoMSksV2koInRpdGxlIixlLmZpbGVfcGF0aCksdigxKSxIZSgiICIsZS5jb25jaXNlX2ZpbGVfcGF0aCwiICIpLHYoMiksXygibmdJZiIsaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSYmZS5mb2N1c2VkKSx2KDIpLEhlKCIgTGluZSAiLGUubGluZW5vLCIgIiksdigyKSxIZSgiICIsZS5mdW5jdGlvbl9uYW1lLCIgIil9fWZ1bmN0aW9uIEd3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSwyMCksUygyLGp3ZSw5LDksImRpdiIsMjEpLGcoKSksMiZuKXtsZXQgZT13KCk7digyKSxfKCJuZ0Zvck9mIixlLnN0YWNrRnJhbWVzRm9yRGlzcGxheSl9fWZ1bmN0aW9uIFd3ZShuLHQpe312YXIgU1g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5PW51bGwsdGhpcy5vblNvdXJjZUxpbmVDbGlja2VkPW5ldyBGLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT1Mb31uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47bGV0IGU9dGhpcy5zdGFja0ZyYW1lQXJyYXkubmF0aXZlRWxlbWVudCxpPWUucXVlcnlTZWxlY3RvcigiLmZvY3VzZWQtc3RhY2stZnJhbWUiKTtpZihudWxsIT09aSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlLGkpO2xldCByPWUucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PXImJnRoaXMuc2Nyb2xsVG9FbGVtZW50KGUscil9c2Nyb2xsVG9FbGVtZW50KGUsaSl7ZS5zY3JvbGxUb3A9aS5vZmZzZXRUb3B9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInN0YWNrLXRyYWNlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFJ3ZSw1KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLnN0YWNrRnJhbWVBcnJheT1yLmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxUKDMsIiBTdGFjayBUcmFjZSAiKSxnKCksUyg0LFZ3ZSw3LDQsImRpdiIsMyksUyg1LEh3ZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsV3QpLGcoKSxTKDcsR3dlLDMsMSwiZGl2Iiw1KSxTKDgsV3dlLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixXdCksZygpKSwyJmUpe2xldCByPWl0KDYpLG89aXQoOSk7dig0KSxfKCJuZ0lmIixudWxsIT09aS5jb2RlTG9jYXRpb25UeXBlKSgibmdJZkVsc2UiLHIpLHYoMyksXygibmdJZiIsbnVsbCE9PWkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLG8pfX0sZGVwZW5kZW5jaWVzOlt5bixubixGZSxzcixTcl0sc3R5bGVzOlsnLmZvY3VzZWQtZmlsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uZm9jdXNlZC1zdGFjay1mcmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTEsMCwuMyl9Lm5vLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YW55d2hlcmV9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc3RhY2stZnJhbWUtYXJyYXlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpfS5zdGFjay1mcmFtZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhMGEwYTB9LnN0YWNrLWZyYW1lLWZpbGUtcGF0aFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjE4MHB4O3dpZHRoOjE4MHB4fS5zdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGFjay1mcmFtZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmctbGVmdDoxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6MjAwcHg7d29yZC13cmFwOmFueXdoZXJlfS5zdGFjay1mcmFtZS1saW5lbm9bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDo4MHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3dpZHRoOjgwcHh9LnN0YWNrLXRyYWNlLWF1eC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE1cHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDttYXgtaGVpZ2h0OjM2MHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO3BhZGRpbmctbGVmdDo4cHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnN0YWNrLXRyYWNlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjNweH0uc3RhY2stdHJhY2UtaG9zdC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5zdGFjay10cmFjZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uc3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7cGFkZGluZy1yaWdodDozcHh9J119KSxufSkoKSxFWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNvZGVMb2NhdGlvblR5cGUkPXRoaXMuc3RvcmUucGlwZSh1bihxKGh5LGk9Pm51bGw9PT1pP251bGw6aS5jb2RlTG9jYXRpb25UeXBlKSkpLHRoaXMub3BUeXBlJD10aGlzLnN0b3JlLnBpcGUodW4ocShoeSxpPT5udWxsPT09aT9udWxsOmkub3BUeXBlKSkpLHRoaXMub3BOYW1lJD10aGlzLnN0b3JlLnBpcGUodW4ocShoeSxpPT5udWxsPT09aXx8aS5jb2RlTG9jYXRpb25UeXBlIT09TG8uR1JBUEhfT1BfQ1JFQVRJT04/bnVsbDppLm9wTmFtZSkpKSx0aGlzLmV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4ocShoeSxpPT5udWxsPT09aXx8aS5jb2RlTG9jYXRpb25UeXBlIT09TG8uRVhFQ1VUSU9OP251bGw6aS5leGVjdXRpb25JbmRleCkpKSx0aGlzLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJD10aGlzLnN0b3JlLnBpcGUodW4oclgpKSx0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQ9dGhpcy5zdG9yZS5waXBlKHVuKHEoblgsUUUsKGkscik9PntpZihudWxsPT09aSlyZXR1cm4gbnVsbDtsZXQgbz1bXTtmb3IobGV0IHMgb2YgaSl7bGV0e2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6ZH09cyx1PWwuc3BsaXQoIi8iKSxmPW51bGwhPT1yJiZhPT09ci5ob3N0X25hbWUmJmw9PT1yLmZpbGVfcGF0aDtvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGNvbmNpc2VfZmlsZV9wYXRoOnVbdS5sZW5ndGgtMV0sbGluZW5vOmMsZnVuY3Rpb25fbmFtZTpkLGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmYsZm9jdXNlZDpmJiZjPT09ci5saW5lbm99KX1yZXR1cm4gb30pKSl9b25Tb3VyY2VMaW5lQ2xpY2tlZChlKXtsZXR7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTpzfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2goT2coe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c319KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLEkoIm9uU291cmNlTGluZUNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU291cmNlTGluZUNsaWNrZWQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxnKCkpLDImZSYmXygiY29kZUxvY2F0aW9uVHlwZSIsVygxLDYsaS5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFcoMiw4LGkub3BUeXBlJCkpKCJvcE5hbWUiLFcoMywxMCxpLm9wTmFtZSQpKSgiZXhlY3V0aW9uSW5kZXgiLFcoNCwxMixpLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsVyg1LDE0LGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVyg2LDE2LGkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JCkpfSxkZXBlbmRlbmNpZXM6W1NYLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxYd2U9ZnVuY3Rpb24obix0KXtyZXR1cm57dGVuc29yRGVidWdNb2RlOm4sYXJyYXk6dH19O2Z1bmN0aW9uIFF3ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMikoMSwiZGl2IiwxMyksVCgyKSxnKCksaCgzLCJkaXYiLDE0KSxQKDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTUpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoMyk7digyKSxIZSgiT3V0cHV0IHNsb3QgIixpLCI6IiksdigyKSxfKCJkZWJ1Z1RlbnNvclZhbHVlIixyLnBhcnNlRGVidWdUZW5zb3JWYWx1ZShxcigyLFh3ZSxyLnRlbnNvckRlYnVnTW9kZSxlKSkpfX1mdW5jdGlvbiBad2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTApLFMoMSxRd2UsNSw1LCJkaXYiLDExKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLF8oIm5nRm9yT2YiLGUuZGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBLd2Uobix0KXtpZigxJm4mJihoKDAsImRpdiIpKDEsImRpdiIpKDIsImRpdiIsMykoMywic3BhbiIsNCksVCg0LCIgT3A6ICIpLGcoKSxoKDUsInNwYW4iLDUpLFQoNiksZygpKCksaCg3LCJkaXYiLDMpKDgsInNwYW4iLDQpLFQoOSwiICMgb2YgaW5wdXQgdGVuc29yczogIiksZygpLGgoMTAsInNwYW4iLDYpLFQoMTEpLGcoKSgpLGgoMTIsImRpdiIsMykoMTMsInNwYW4iLDQpLFQoMTQsIiAjIG9mIG91dHB1dCB0ZW5zb3JzOiAiKSxnKCksaCgxNSwic3BhbiIsNyksVCgxNiksZygpLGgoMTcsInNwYW4iLDgpLFQoMTgpLGcoKSgpLFMoMTksWndlLDIsMSwiZGl2Iiw5KSxnKCkoKSksMiZuKXtsZXQgZT13KCk7dig2KSxIZSgiICIsZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vcF90eXBlLCIgIiksdig1KSxIZSgiICIsbnVsbD09ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5pbnB1dF90ZW5zb3JfaWRzPzA6ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5pbnB1dF90ZW5zb3JfaWRzLmxlbmd0aCwiICIpLHYoNSksSGUoIiAiLG51bGw9PWUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHM/MDplLmZvY3VzZWRFeGVjdXRpb25EYXRhLm91dHB1dF90ZW5zb3JfaWRzLmxlbmd0aCwiICIpLHYoMiksSGUoIiAoZGVidWcgbW9kZTogIixlLlRlbnNvckRlYnVnTW9kZVtlLnRlbnNvckRlYnVnTW9kZV0sIikgIiksdigxKSxfKCJuZ0lmIixlLmhhc0RlYnVnVGVuc29yVmFsdWVzKX19ZnVuY3Rpb24gSndlKG4sdCl7fXZhciBUWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZW5zb3JEZWJ1Z01vZGU9U28uVU5TUEVDSUZJRUQsdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcz0hMSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzPW51bGwsdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcz1udWxsLHRoaXMuVGVuc29yRGVidWdNb2RlPVNvLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPVpFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIix0ZW5zb3JEZWJ1Z01vZGU6InRlbnNvckRlYnVnTW9kZSIsaGFzRGVidWdUZW5zb3JWYWx1ZXM6Imhhc0RlYnVnVGVuc29yVmFsdWVzIixkZWJ1Z1RlbnNvclZhbHVlczoiZGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yRHR5cGVzOiJkZWJ1Z1RlbnNvckR0eXBlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsImZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsb2FkaW5nX3NlY3Rpb24iLCIiXSxbMSwiZXhlY3V0aW9uLWRhdGEtZmllbGQiXSxbMSwiZXhlY3V0aW9uLWRhdGEta2V5Il0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwib3AtdHlwZSJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsImlucHV0LXRlbnNvcnMiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvdXRwdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSJdLFsiY2xhc3MiLCJvdXRwdXQtc2xvdHMiLDQsIm5nSWYiXSxbMSwib3V0cHV0LXNsb3RzIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90LWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm91dHB1dC1zbG90LWNvbnRhaW5lciJdLFsxLCJvdXRwdXQtc2xvdC1udW1iZXIiXSxbMSwib3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IikoMiwic3BhbiIpLFQoMyksZygpKCksUyg0LEt3ZSwyMCw1LCJkaXYiLDEpLFMoNSxKd2UsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLFd0KSxnKCkpLDImZSl7bGV0IHI9aXQoNik7digzKSxIZSgiIFB5dGhvbiBFeGVjdXRpb24gIyIsaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgsIiAiKSx2KDEpLF8oIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25EYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltubixGZSxLRV0sc3R5bGVzOlsnLmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7dGV4dC1hbGlnbjpsZWZ0fS5kZWJ1Zy10ZW5zb3ItdmFsdWVzLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmV4ZWN1dGlvbi1kYXRhLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmV4ZWN1dGlvbi1kYXRhLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjEyMHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MTIwcHh9LmV4ZWN1dGlvbi1kYXRhLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmNjODA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEycHg7aGVpZ2h0OjEyMHB4O3BhZGRpbmc6NXB4O3dpZHRoOjM2MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ub3V0cHV0LXNsb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NjBweDtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvfS5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLXRvcDo1cHg7cGFkZGluZzoycHggMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Lm91dHB1dC1zbG90LW51bWJlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZX0ub3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjozcHggMCAzcHggMzBweH0ub3V0cHV0LXRlbnNvcnNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6NXB4fSddfSksbn0pKCksRFg9IlVua25vd24gZHR5cGUiLElYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGEkPXRoaXMuc3RvcmUucGlwZSh1bihQZikpLHRoaXMudGVuc29yRGVidWdNb2RlJD10aGlzLnN0b3JlLnBpcGUodW4ocShQZixpPT5udWxsPT09aT9Tby5VTlNQRUNJRklFRDppLnRlbnNvcl9kZWJ1Z19tb2RlKSkpLHRoaXMuaGFzRGVidWdUZW5zb3JWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZSh1bihxKFBmLGk9PntpZihudWxsPT09aXx8bnVsbD09PWkuZGVidWdfdGVuc29yX3ZhbHVlcylyZXR1cm4hMTtmb3IobGV0IHIgb2YgaS5kZWJ1Z190ZW5zb3JfdmFsdWVzKWlmKG51bGwhPT1yJiZyLmxlbmd0aD4wKXJldHVybiEwO3JldHVybiExfSkpKSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUodW4ocShQZixpPT5udWxsPT09aT9udWxsOmkuZGVidWdfdGVuc29yX3ZhbHVlcykpKSx0aGlzLmRlYnVnVGVuc29yRHR5cGVzJD10aGlzLnN0b3JlLnBpcGUodW4ocShQZixpPT57aWYobnVsbD09PWl8fG51bGw9PT1pLmRlYnVnX3RlbnNvcl92YWx1ZXN8fGkudGVuc29yX2RlYnVnX21vZGUhPT1Tby5GVUxMX0hFQUxUSCYmaS50ZW5zb3JfZGVidWdfbW9kZSE9PVNvLlNIQVBFKXJldHVybiBudWxsO2xldCByPVtdO2ZvcihsZXQgbyBvZiBpLmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbD09PW8pci5wdXNoKERYKTtlbHNle2xldCBzPVN0cmluZyhpLnRlbnNvcl9kZWJ1Z19tb2RlPT09U28uRlVMTF9IRUFMVEg/b1syXTpvWzFdKTtyLnB1c2goZ3lbc118fERYKX1yZXR1cm4gcn0pKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4In0sZGVjbHM6Nix2YXJzOjE2LGNvbnN0czpbWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EYXRhIiwidGVuc29yRGVidWdNb2RlIiwiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yRHR5cGVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIikpLDImZSYmXygiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCkoImZvY3VzZWRFeGVjdXRpb25EYXRhIixXKDEsNixpLmZvY3VzZWRFeGVjdXRpb25EYXRhJCkpKCJ0ZW5zb3JEZWJ1Z01vZGUiLFcoMiw4LGkudGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVygzLDEwLGkuaGFzRGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yVmFsdWVzIixXKDQsMTIsaS5kZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JEdHlwZXMiLFcoNSwxNCxpLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkZXBlbmRlbmNpZXM6W1RYLGN0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx0U2U9WyJzbGlkZXJXcmFwcGVyIl0sZWw9cW8oe3Bhc3NpdmU6ITF9KSxzU2U9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9PkRkKSxtdWx0aTohMH0sYVNlPWt1KHpzKHNvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSwiYWNjZW50IikpLERkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBhU2V7Z2V0IGludmVydCgpe3JldHVybiB0aGlzLl9pbnZlcnR9c2V0IGludmVydChlKXt0aGlzLl9pbnZlcnQ9UnQoZSl9Z2V0IG1heCgpe3JldHVybiB0aGlzLl9tYXh9c2V0IG1heChlKXt0aGlzLl9tYXg9X2koZSx0aGlzLl9tYXgpLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXt0aGlzLl9taW49X2koZSx0aGlzLl9taW4pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcH1zZXQgc3RlcChlKXt0aGlzLl9zdGVwPV9pKGUsdGhpcy5fc3RlcCksdGhpcy5fc3RlcCUxIT0wJiYodGhpcy5fcm91bmRUb0RlY2ltYWw9dGhpcy5fc3RlcC50b1N0cmluZygpLnNwbGl0KCIuIikucG9wKCkubGVuZ3RoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgdGh1bWJMYWJlbCgpe3JldHVybiB0aGlzLl90aHVtYkxhYmVsfXNldCB0aHVtYkxhYmVsKGUpe3RoaXMuX3RodW1iTGFiZWw9UnQoZSl9Z2V0IHRpY2tJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90aWNrSW50ZXJ2YWx9c2V0IHRpY2tJbnRlcnZhbChlKXt0aGlzLl90aWNrSW50ZXJ2YWw9ImF1dG8iPT09ZT8iYXV0byI6Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGU/X2koZSx0aGlzLl90aWNrSW50ZXJ2YWwpOjB9Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLl92YWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5fbWluKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7aWYoZSE9PXRoaXMuX3ZhbHVlKXtsZXQgaT1faShlLDApO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZpIT09dGhpcy5taW4mJmkhPT10aGlzLm1heCYmKGk9cGFyc2VGbG9hdChpLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9aSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVJ0KGUpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKGUpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoZSl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtsZXQgaT10aGlzLnZlcnRpY2FsP2AxLCAkezEtdGhpcy5wZXJjZW50fSwgMWA6MS10aGlzLnBlcmNlbnQrIiwgMSwgMSI7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iLSI6IiJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7aX0pYH19X2dldFRyYWNrRmlsbFN0eWxlcygpe2xldCBlPXRoaXMucGVyY2VudCxyPXRoaXMudmVydGljYWw/YDEsICR7ZX0sIDFgOmAke2V9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtyfSlgLGRpc3BsYXk6MD09PWU/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCBlPTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGE9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke2V9JWA6YCR7ZX0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHtlLzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2xldCBjLGw9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2M9dGhpcy52ZXJ0aWNhbD9sPyJCb3R0b20iOiJUb3AiOmw/IlJpZ2h0IjoiTGVmdCIsYVtgcGFkZGluZyR7Y31gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gYX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlKT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybiJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlfV9nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgRix0aGlzLmlucHV0PW5ldyBGLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9wb2ludGVyRG93bj1kPT57dGhpcy5kaXNhYmxlZHx8dGhpcy5faXNTbGlkaW5nfHwhX3koZCkmJjAhPT1kLmJ1dHRvbnx8dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX3RvdWNoSWQ9X3koZCk/ZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4udG91Y2hlcy5sZW5ndGg7ZSsrKXtsZXQgaT1uLnRvdWNoZXNbZV0udGFyZ2V0O2lmKHQ9PT1pfHx0LmNvbnRhaW5zKGkpKXJldHVybiBuLnRvdWNoZXNbZV0uaWRlbnRpZmllcn19KGQsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTp2b2lkIDA7bGV0IHU9UlgoZCx0aGlzLl90b3VjaElkKTtpZih1KXtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2lzU2xpZGluZz0icG9pbnRlciIsdGhpcy5fbGFzdFBvaW50ZXJFdmVudD1kLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl9vbk1vdXNlZW50ZXIoKSx0aGlzLl9iaW5kR2xvYmFsRXZlbnRzKGQpLHRoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoKSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbih1KSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD1wLGQuY2FuY2VsYWJsZSYmZC5wcmV2ZW50RGVmYXVsdCgpLHAhPXRoaXMudmFsdWUmJnRoaXMuX2VtaXRJbnB1dEV2ZW50KCl9fSl9LHRoaXMuX3BvaW50ZXJNb3ZlPWQ9PntpZigicG9pbnRlciI9PT10aGlzLl9pc1NsaWRpbmcpe2xldCB1PVJYKGQsdGhpcy5fdG91Y2hJZCk7aWYodSl7ZC5jYW5jZWxhYmxlJiZkLnByZXZlbnREZWZhdWx0KCk7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9sYXN0UG9pbnRlckV2ZW50PWQsdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24odSkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19fSx0aGlzLl9wb2ludGVyVXA9ZD0+eyJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyYmKCFfeShkKXx8Im51bWJlciIhPXR5cGVvZiB0aGlzLl90b3VjaElkfHxNTihkLmNoYW5nZWRUb3VjaGVzLHRoaXMuX3RvdWNoSWQpKSYmKGQuY2FuY2VsYWJsZSYmZC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX3RvdWNoSWQ9dm9pZCAwLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0IT10aGlzLnZhbHVlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9dGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsKX0sdGhpcy5fd2luZG93Qmx1cj0oKT0+e3RoaXMuX2xhc3RQb2ludGVyRXZlbnQmJnRoaXMuX3BvaW50ZXJVcCh0aGlzLl9sYXN0UG9pbnRlckV2ZW50KX0sdGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLGEucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgZD1lLm5hdGl2ZUVsZW1lbnQ7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGVsKSxkLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGVsKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57dGhpcy5faXNBY3RpdmU9ISFlJiYia2V5Ym9hcmQiIT09ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sZWwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sZWwpLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLl9yZW1vdmVHbG9iYWxFdmVudHMoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X29uTW91c2VlbnRlcigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCkpfV9vbkZvY3VzKCl7dGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpfV9vbkJsdXIoKXt0aGlzLm9uVG91Y2hlZCgpfV9vbktleWRvd24oZSl7aWYodGhpcy5kaXNhYmxlZHx8dnIoZSl8fHRoaXMuX2lzU2xpZGluZyYmImtleWJvYXJkIiE9PXRoaXMuX2lzU2xpZGluZylyZXR1cm47bGV0IGk9dGhpcy52YWx1ZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIDM4OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWkhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIixlLnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudCxyPV95KGUpLHM9cj8idG91Y2hlbmQiOiJtb3VzZXVwIjtpLmFkZEV2ZW50TGlzdGVuZXIocj8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxlbCksaS5hZGRFdmVudExpc3RlbmVyKHMsdGhpcy5fcG9pbnRlclVwLGVsKSxyJiZpLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsZWwpO2xldCBhPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBhPCJ1IiYmYSYmYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1fcmVtb3ZlR2xvYmFsRXZlbnRzKCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLGVsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCxlbCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLGVsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAsZWwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxlbCk7bGV0IGk9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGk8InUiJiZpJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQoZSl7bGV0IGk9dGhpcy5fY2xhbXAodGhpcy52YWx1ZXx8MCx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy52YWx1ZT10aGlzLl9jbGFtcChpK3RoaXMuc3RlcCplLHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBzPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD9lLnk6ZS54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKHM9MS1zKSwwPT09cyl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PXMpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2xldCBhPXRoaXMuX2NhbGN1bGF0ZVZhbHVlKHMpLGw9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKSp0aGlzLnN0ZXArdGhpcy5taW47dGhpcy52YWx1ZT10aGlzLl9jbGFtcChsLHRoaXMubWluLHRoaXMubWF4KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X2VtaXRJbnB1dEV2ZW50KCl7dGhpcy5pbnB1dC5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl7aWYoIXRoaXMudGlja0ludGVydmFsfHwhdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU7aWYoImF1dG8iPT10aGlzLnRpY2tJbnRlcnZhbCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoO2U9TWF0aC5jZWlsKDMwLyhpKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pKSkqdGhpcy5zdGVwL2l9ZWxzZSBlPXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9QVgoZSk/ZTowfV9jcmVhdGVDaGFuZ2VFdmVudChlPXRoaXMudmFsdWUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkudmFsdWU9ZSxpfV9jYWxjdWxhdGVQZXJjZW50YWdlKGUpe2xldCBpPSgoZXx8MCktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik7cmV0dXJuIEFYKGkpP2k6MH1fY2FsY3VsYXRlVmFsdWUoZSl7cmV0dXJuIHRoaXMubWluK2UqKHRoaXMubWF4LXRoaXMubWluKX1fY2xhbXAoZSxpPTAscj0xKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihlLHIpKX1fZ2V0U2xpZGVyRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9zbGlkZXJXcmFwcGVyP3RoaXMuX3NsaWRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpudWxsfV9mb2N1c0hvc3RFbGVtZW50KGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fYmx1ckhvc3RFbGVtZW50KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKFhyKSxDKCR0KSxDKFhpLDgpLHlvKCJ0YWJpbmRleCIpLEMoYXQpLEMoTHQpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZSh0U2UsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fc2xpZGVyV3JhcHBlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJzbGlkZXIiLDEsIm1hdC1zbGlkZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MjksaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Gb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbktleWRvd24obyl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uS2V5dXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbk1vdXNlZW50ZXIoKX0pKCJzZWxlY3RzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIG8ucHJldmVudERlZmF1bHQoKX0pLDImZSYmKGpvKCJ0YWJJbmRleCIsaS50YWJJbmRleCksQmUoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJhcmlhLXZhbHVlbWF4IixpLm1heCkoImFyaWEtdmFsdWVtaW4iLGkubWluKSgiYXJpYS12YWx1ZW5vdyIsaS52YWx1ZSkoImFyaWEtdmFsdWV0ZXh0IixudWxsPT1pLnZhbHVlVGV4dD9pLmRpc3BsYXlWYWx1ZTppLnZhbHVlVGV4dCkoImFyaWEtb3JpZW50YXRpb24iLGkudmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpLG50KCJtYXQtc2xpZGVyLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LXNsaWRlci1oYXMtdGlja3MiLGkudGlja0ludGVydmFsKSgibWF0LXNsaWRlci1ob3Jpem9udGFsIiwhaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCIsaS5fc2hvdWxkSW52ZXJ0QXhpcygpKSgibWF0LXNsaWRlci1pbnZlcnQtbW91c2UtY29vcmRzIixpLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpKSgibWF0LXNsaWRlci1zbGlkaW5nIixpLl9pc1NsaWRpbmcpKCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmciLGkudGh1bWJMYWJlbCkoIm1hdC1zbGlkZXItdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtc2xpZGVyLW1pbi12YWx1ZSIsaS5faXNNaW5WYWx1ZSgpKSgibWF0LXNsaWRlci1oaWRlLWxhc3QtdGljayIsaS5kaXNhYmxlZHx8aS5faXNNaW5WYWx1ZSgpJiZpLl9nZXRUaHVtYkdhcCgpJiZpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4IixpbnZlcnQ6ImludmVydCIsbWF4OiJtYXgiLG1pbjoibWluIixzdGVwOiJzdGVwIix0aHVtYkxhYmVsOiJ0aHVtYkxhYmVsIix0aWNrSW50ZXJ2YWw6InRpY2tJbnRlcnZhbCIsdmFsdWU6InZhbHVlIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0Iix2ZXJ0aWNhbDoidmVydGljYWwifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5wdXQ6ImlucHV0Iix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNsaWRlciJdLGZlYXR1cmVzOltRdChbc1NlXSksS2VdLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpKDIsImRpdiIsMiksUCgzLCJkaXYiLDMpKDQsImRpdiIsNCksZygpLGgoNSwiZGl2Iiw1KSxQKDYsImRpdiIsNiksZygpLGgoNywiZGl2Iiw3KSxQKDgsImRpdiIsOCkoOSwiZGl2Iiw5KSxoKDEwLCJkaXYiLDEwKSgxMSwic3BhbiIsMTEpLFQoMTIpLGcoKSgpKCkoKSksMiZlJiYodigzKSxfKCJuZ1N0eWxlIixpLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSksdigxKSxfKCJuZ1N0eWxlIixpLl9nZXRUcmFja0ZpbGxTdHlsZXMoKSksdigxKSxfKCJuZ1N0eWxlIixpLl9nZXRUaWNrc0NvbnRhaW5lclN0eWxlcygpKSx2KDEpLF8oIm5nU3R5bGUiLGkuX2dldFRpY2tzU3R5bGVzKCkpLHYoMSksXygibmdTdHlsZSIsaS5fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSksdig1KSxidChpLmRpc3BsYXlWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3B1XSxzdHlsZXM6WycubWF0LXNsaWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7b3V0bGluZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOmFjdGl2ZSwubWF0LXNsaWRlci5tYXQtc2xpZGVyLXNsaWRpbmc6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKXtjdXJzb3I6Z3JhYmJpbmd9Lm1hdC1zbGlkZXItd3JhcHBlcnstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3Q7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdGlja3N7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDAuNyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLXJhZGl1cyA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt6LWluZGV4OjE7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3RyYW5zaXRpb24tZHVyYXRpb246MG1zfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci13aWR0aDowO2JvcmRlci1zdHlsZTpzb2xpZDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye29wYWNpdHk6MX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrc3tvcGFjaXR5OjF9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6ZmxleH0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1ie3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvcmRlci1yYWRpdXM6NTAlIDUwJSAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstbW91c2UtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay10b3VjaC1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZSgxKX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjB9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjRweDt0cmFuc2Zvcm06c2NhbGUoMC41KX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6NDhweDttaW4td2lkdGg6MTI4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVye2hlaWdodDoycHg7dG9wOjIzcHg7bGVmdDo4cHg7cmlnaHQ6OHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7aGVpZ2h0OjJweDtib3JkZXItbGVmdC13aWR0aDoycHg7cmlnaHQ6MDt0b3A6MH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgwKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMSl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjA7b3V0bGluZTpzb2xpZCAycHg7dG9wOjFweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt3aWR0aDoxMDAlO2hlaWdodDowO3RvcDo1MCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RvcDotMTVweDtyaWdodDotMTVweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3JpZ2h0Oi0xNHB4O3RvcDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZXItdmVydGljYWx7d2lkdGg6NDhweDttaW4taGVpZ2h0OjEyOHB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7d2lkdGg6MnB4O3RvcDo4cHg7Ym90dG9tOjhweDtsZWZ0OjIzcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7d2lkdGg6MnB4O2JvcmRlci10b3Atd2lkdGg6MnB4O2JvdHRvbTowO2xlZnQ6MH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjJweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDApfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMSl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDowO291dGxpbmU6c29saWQgMnB4O2xlZnQ6MXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7Ym90dG9tOi0xNXB4O2xlZnQ6LTE1cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDowO2xlZnQ6NTAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym90dG9tOi0xNHB4O2xlZnQ6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2xlZnQ6MDtyaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEFYKG4pe3JldHVybiFpc05hTihuKSYmaXNGaW5pdGUobil9ZnVuY3Rpb24gX3kobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIFJYKG4sdCl7bGV0IGU7cmV0dXJuIGU9X3kobik/Im51bWJlciI9PXR5cGVvZiB0P01OKG4udG91Y2hlcyx0KXx8TU4obi5jaGFuZ2VkVG91Y2hlcyx0KTpuLnRvdWNoZXNbMF18fG4uY2hhbmdlZFRvdWNoZXNbMF06bixlP3t4OmUuY2xpZW50WCx5OmUuY2xpZW50WX06dm9pZCAwfWZ1bmN0aW9uIE1OKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXS5pZGVudGlmaWVyPT09dClyZXR1cm4gbltlXX12YXIgcXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGZuLGZuXX0pLG59KSgpO2Z1bmN0aW9uIGNTZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zbGlkZXIiLDExKSxJKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQoci52YWx1ZSkpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJtaW4iLDApKCJtYXgiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQpKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gZFNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uTmF2aWdhdGVMZWZ0LmVtaXQoKSl9KSxUKDIsIiA8ICIpLGcoKSxoKDMsImRpdiIsOCksVCg0KSxnKCksaCg1LCJidXR0b24iLDkpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uTmF2aWdhdGVSaWdodC5lbWl0KCkpfSksVCg2LCIgPiAiKSxnKCksUyg3LGNTZSwxLDMsIm1hdC1zbGlkZXIiLDEwKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7dig0KSxqTSgiICIsZS5zY3JvbGxCZWdpbkluZGV4LCIgfiAiLGUuc2Nyb2xsQmVnaW5JbmRleCtlLmRpc3BsYXlDb3VudC0xLCIgb2YgIixlLm51bUV4ZWN1dGlvbnMsIiAiKSx2KDMpLF8oIm5nSWYiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ+MCl9fXZhciB1U2U9ZnVuY3Rpb24obix0LGUpe3JldHVybltuLHQsZV19O2Z1bmN0aW9uIHBTZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTQpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuaW5kZXg7cmV0dXJuIFEodygyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxoKDEsImRpdiIsMTUpLFQoMiksZygpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj13KDIpO3YoMSksV2koInRpdGxlIixlLm9wX3R5cGUpLF8oIm5nQ2xhc3MiLGdiKDMsdVNlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx2KDEpLEhlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gZlNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEyKSxTKDEscFNlLDMsNywiZGl2IiwxMyksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBtU2Uobix0KXtpZigxJm4mJihPdCgwKSxQKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNiksa3QoKSksMiZuKXtsZXQgZT13KCk7digxKSxfKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyIFBYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2ZVJ1bklkPW51bGwsdGhpcy5sb2FkaW5nTnVtRXhlY3V0aW9ucz0hMSx0aGlzLm51bUV4ZWN1dGlvbnM9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXg9MCx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PTAsdGhpcy5wYWdlU2l6ZT0wLHRoaXMuZGlzcGxheUNvdW50PTAsdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cz1bXSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcz1bXSx0aGlzLmZvY3VzZWRFeGVjdXRpb25JbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD1udWxsLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRhdGE9bnVsbCx0aGlzLm9uTmF2aWdhdGVMZWZ0PW5ldyBGLHRoaXMub25OYXZpZ2F0ZVJpZ2h0PW5ldyBGLHRoaXMub25FeGVjdXRpb25EaWdlc3RDbGlja2VkPW5ldyBGLHRoaXMub25TbGlkZXJDaGFuZ2U9bmV3IEZ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRpbWVsaW5lLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCIsbG9hZGluZ051bUV4ZWN1dGlvbnM6ImxvYWRpbmdOdW1FeGVjdXRpb25zIixudW1FeGVjdXRpb25zOiJudW1FeGVjdXRpb25zIixzY3JvbGxCZWdpbkluZGV4OiJzY3JvbGxCZWdpbkluZGV4IixzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdDoic2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQiLHBhZ2VTaXplOiJwYWdlU2l6ZSIsZGlzcGxheUNvdW50OiJkaXNwbGF5Q291bnQiLGRpc3BsYXlFeGVjdXRpb25EaWdlc3RzOiJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzOiJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLGZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4OiJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEifSxvdXRwdXRzOntvbk5hdmlnYXRlTGVmdDoib25OYXZpZ2F0ZUxlZnQiLG9uTmF2aWdhdGVSaWdodDoib25OYXZpZ2F0ZVJpZ2h0IixvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ6Im9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsb25TbGlkZXJDaGFuZ2U6Im9uU2xpZGVyQ2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwidGltZWxpbmUtdGl0bGUiXSxbMSwiZXhlY3V0aW9uLWNvdW50Il0sWzEsInRvcC1sZXZlbC1leGVjdXRpb25zIl0sWyJjbGFzcyIsIm5hdmlnYXRpb24tc2VjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGVjdXRpb24tdGltZWxpbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJuYXZpZ2F0aW9uLXNlY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLWxlZnQiLDMsImNsaWNrIl0sWzEsIm5hdmlnYXRpb24tcG9zaXRpb24taW5mbyJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tcmlnaHQiLDMsImNsaWNrIl0sWyJjbGFzcyIsInRpbWVsaW5lLXNsaWRlciIsInN0ZXAiLCIxIiwzLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIl0sWyJzdGVwIiwiMSIsMSwidGltZWxpbmUtc2xpZGVyIiwzLCJtaW4iLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImV4ZWN1dGlvbi10aW1lbGluZSJdLFszLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsaWNrIl0sWzEsImV4ZWN1dGlvbi1kaWdlc3QiLDMsIm5nQ2xhc3MiLCJ0aXRsZSJdLFszLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIpKDEsImRpdiIsMCksVCgyLCIgUHl0aG9uIEV4ZWN1dGlvbiBUaW1lbGluZSAiKSxoKDMsInNwYW4iLDEpLFQoNCksZygpKCksaCg1LCJkaXYiLDIpLFMoNixkU2UsOCw0LCJkaXYiLDMpLFMoNyxmU2UsMiwxLCJkaXYiLDQpLFMoOCxtU2UsMiwxLCJuZy1jb250YWluZXIiLDUpLGcoKSgpKSwyJmUmJih2KDQpLEhlKCIgKCIsaS5udW1FeGVjdXRpb25zLCIpICIpLHYoMiksXygibmdJZiIsaS5udW1FeGVjdXRpb25zKSx2KDEpLF8oIm5nSWYiLGkubnVtRXhlY3V0aW9ucyksdigxKSxfKCJuZ0lmIixudWxsIT09aS5hY3RpdmVSdW5JZCYmbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KSl9LGRlcGVuZGVuY2llczpbeW4sbm4sRmUsSVgsSmksRGRdLHN0eWxlczpbIi5leGVjdXRpb24tZGlnZXN0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIGNvbG9yOiAjNDI1MDY2O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgaGVpZ2h0OiAxNXB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEycHg7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LmZ1bmMtZ3JhcGgtZXhlY3V0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjN2RiZjU7XG4gIGNvbG9yOiAjNGU1NjY0O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNGIzO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuSW5mTmFuQWxlcnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgY29sb3I6ICNmZmY7XG59XG5cblxuLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdOmhvdmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5leGVjdXRpb24tdGltZWxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi50aW1lbGluZS1zbGlkZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxlZnQ6IDM0MHB4OyBcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogNDBweDtcbn1cblxuICAudGltZWxpbmUtc2xpZGVyIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICByaWdodDogLTQwcHg7XG4gIHdpZHRoOiA4MHB4O1xufVxuXG5cbi5uYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5uYXZpZ2F0aW9uLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICBsaW5lLWhlaWdodDogNDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGdTZT1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdLE9YPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZSh1bihRbykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZSh1bihxKFdFLGk9Pmkuc3RhdGU9PVRlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4oZnkpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUodW4ocShHdSxMZywoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZSh1bihOZykpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUodW4oTGcpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUodW4ocShHWSxpPT5pLm1hcChyPT5mdW5jdGlvbihuLHQ9MSl7aWYoIW4pcmV0dXJue29wX3R5cGU6IihOL0EpIixzaG9ydF9vcF90eXBlOiIuLiIsaXNfZ3JhcGg6ITF9O2xldCBlPWdTZS5maWx0ZXIoaT0+bi5vcF90eXBlLnN0YXJ0c1dpdGgoaSkpO2lmKGUubGVuZ3RoKXtsZXQgaT1uLm9wX3R5cGUuc2xpY2UoZVswXS5sZW5ndGgpO3JldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOmkuc2xpY2UoMCx0KSxpc19ncmFwaDohMH19cmV0dXJue29wX3R5cGU6bi5vcF90eXBlLHNob3J0X29wX3R5cGU6bi5vcF90eXBlLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITF9fShyKSkpKSksdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkPXRoaXMuc3RvcmUucGlwZSh1bigkWSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodW4oaE4pKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZSh1bihlWCkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKHVuKEd1KSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVnKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goVGcoKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSWcoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRGcoe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLEkoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSxnKCkpLDImZSYmXygiYWN0aXZlUnVuSWQiLFcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsVygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLFcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixXKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLFcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLFcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixXKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixXKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOltQWCxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdlNlKG4sdCl7MSZuJiZQKDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIil9ZnVuY3Rpb24geVNlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDMpLFAoMSwidGYtZGVidWdnZXItdjItYWxlcnRzIiksaCgyLCJkaXYiLDQpLFAoMywidGYtZGVidWdnZXItdjItdGltZWxpbmUiKSg0LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCIpLGcoKSxQKDUsInRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnMiKSxnKCksaCg2LCJkaXYiLDUpLFAoNywidGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzIikoOCwidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiKSxnKCkpfXZhciBrWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWdnZXItY29tcG9uZW50Il1dLGlucHV0czp7cnVuczoicnVucyIscnVuSWRzOiJydW5JZHMiLGFjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImRlYnVnZ2VyLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbMSwidG9wLXNlY3Rpb24iXSxbMSwidG9wLWNlbnRlci1zZWN0aW9uIl0sWzEsImJvdHRvbS1zZWN0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJkaXYiLDApLFMoMSx2U2UsMSwwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIsMSksUygyLHlTZSw5LDAsIm5nLXRlbXBsYXRlIixudWxsLDIsV3QpLGcoKSksMiZlKXtsZXQgcj1pdCgzKTt2KDEpLF8oIm5nSWYiLDA9PT1pLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2FYLEZlLGRYLGZYLGhYLHdYLEVYLE9YXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEZYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucnVucyQ9dGhpcy5zdG9yZS5waXBlKHVuKEFmKSksdGhpcy5ydW5zSWRzJD10aGlzLnN0b3JlLnBpcGUodW4ocShBZixpPT5PYmplY3Qua2V5cyhpKSkpKSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUodW4oUW8pKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQ0UoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1FKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjIiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicnVucyIsInJ1bklkcyIsImFjdGl2ZVJ1bklkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJkZWJ1Z2dlci1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJl8oInJ1bnMiLFcoMSwzLGkucnVucyQpKSgicnVuSWRzIixXKDIsNSxpLnJ1bnNJZHMkKSkoImFjdGl2ZVJ1bklkIixXKDMsNyxpLmFjdGl2ZVJ1bklkJCkpfSxkZXBlbmRlbmNpZXM6W2tYLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLG59KSgpLHRUPSJkZWJ1Z2dlci12MiI7ZnVuY3Rpb24gd04obix0LGUsaSxyKXtpZihlPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFnZVNpemU6ICR7ZX1gKTtpZih0PmkpdGhyb3cgbmV3IEVycm9yKGBlbmQgaW5kZXggKCR7dH0pIGV4Y2VlZHMgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICgke2l9KWApO2lmKHQtbj5lKXRocm93IG5ldyBFcnJvcigiYmVnaW4tZW5kIHNwYW4gZXhjZWVkcyBwYWdlIHNpemUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIik7bGV0IG89W10scz1NYXRoLmZsb29yKG4vZSk7KCEocyBpbiByKXx8cltzXTxlJiZzKmUrcltzXTxpKSYmby5wdXNoKHMpO2xldCBhPU1hdGguZmxvb3IoKHQtMSkvZSk7cmV0dXJuIGEhPT1zJiYoIShhIGluIHIpfHxhKmUrclthXTx0JiZ0PGkpJiZvLnB1c2goYSksb312YXIgQlg9KCgpPT57Y2xhc3MgbntvbkRlYnVnZ2VyRGF0YVBvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGVpKENFKSxKbihlPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4ucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgaSxvLHI9ITEscz0hMSxhPSExLGw9KCk9PmEmJnMmJihlLmNvbXBsZXRlKCksITApLGQ9KCk9PnthPSExLGk9dC5zdWJzY3JpYmUoVnQoZSx2b2lkIDAsKCk9PnthPSEwLCFsKCkmJihvfHwobz1uZXcgSWUsbihvKS5zdWJzY3JpYmUoVnQoZSwoKT0+e2k/ZCgpOnI9ITB9LCgpPT57cz0hMCxsKCl9KSkpLG8pLm5leHQoKX0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxyPSExLGQoKSl9O2QoKX0pfShpPT5pLnBpcGUoQnQodCksa20oKFsscl0pPT5uYShyKSkpKSxvdChlKSxOKCgpPT57fSkpfShIdChlKSx0aGlzLnN0b3JlLnNlbGVjdChWWSkucGlwZShOKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKGVpKE1FKSkpKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChheSgpKSksTigoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdG4odGhpcy5hY3Rpb25zJC5waXBlKGVpKEZzLGNzKSksdGhpcy5hY3Rpb25zJC5waXBlKGVpKHdjKSkucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChsTikpLGtlKChbLGVdKT0+ZS5zdGF0ZT09PVRlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1UZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFdvKSksa2UoKFssZV0pPT5lPT09dFQpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGF5KCkpKSxOKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChsTikpLGtlKChbLHtzdGF0ZTppfV0pPT5pIT09VGUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2god0UoKSkpLGhuKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShOdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChTRSh7cnVuczppfSkpfSksTigoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEFmKSx0aGlzLnN0b3JlLnNlbGVjdChXRSkpLGtlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKERFKCkpKSxobigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChJRSh7bnVtRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksTigoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEFmKSx0aGlzLnN0b3JlLnNlbGVjdChXWSkpLGtlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKE9FKCkpKSxobigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKHIsMCwwKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGtFKHtudW1HcmFwaEV4ZWN1dGlvbnM6YS5udW1fZGlnZXN0c30pKX0pLE4oKCk9Pnt9KSl9KSl9Y3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoQWYpLHRoaXMuc3RvcmUuc2VsZWN0KGNOKSksa2UoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09VGUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gobHkoKSkpLGhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hBbGVydHMociwwLDApLnBpcGUoTnQoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRUUoe251bUFsZXJ0czphLm51bV9hbGVydHMsYWxlcnRzQnJlYWtkb3duOmEuYWxlcnRzX2JyZWFrZG93bn0pKX0pLE4oKCk9Pnt9KSl9KSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoR3UpLHRoaXMuc3RvcmUuc2VsZWN0KHB5KSksa2UoKFssaSxyXSk9Pmk+MCYmMD09PU9iamVjdC5rZXlzKHIucGFnZUxvYWRlZFNpemVzKS5sZW5ndGgpLE4oKCk9Pnt9KSl9Y3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KEd1KSx0aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zdG9yZS5zZWxlY3QoTmcpKSxrZSgoWywsaV0pPT5udWxsIT09aSksTigoWyxpLHIsb10pPT4oe2JlZ2luOjAsZW5kOk1hdGgubWluKGksbykscnVuSWQ6cn0pKSl9b25FeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGVpKEVnLFRnLERnKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zdG9yZS5zZWxlY3QoZnkpLHRoaXMuc3RvcmUuc2VsZWN0KEd1KSx0aGlzLnN0b3JlLnNlbGVjdChMZyksdGhpcy5zdG9yZS5zZWxlY3QoTmcpKSxrZSgoW2VdKT0+bnVsbCE9PWUpLE4oKFssZSxpLHIsbyxzXSk9Pih7cnVuSWQ6ZSxiZWdpbjppLGVuZDpNYXRoLm1pbihyLGkrbykscGFnZVNpemU6c30pKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChweSkpLE4oKFtlLGldKT0+KHtwcm9wczplLGxvYWRlZDppLG1pc3NpbmdQYWdlczp3TihlLmJlZ2luLGUuZW5kLGUucGFnZVNpemUsaS5udW1FeGVjdXRpb25zLGkucGFnZUxvYWRlZFNpemVzKX0pKSxrZSgoe21pc3NpbmdQYWdlczplfSk9PmUubGVuZ3RoPjApLE4oKHtwcm9wczplLGxvYWRlZDppLG1pc3NpbmdQYWdlczpyfSk9PntsZXR7cnVuSWQ6byxwYWdlU2l6ZTpzfT1lO3JldHVybntiZWdpbjpyWzBdKnMsZW5kOk1hdGgubWluKGkubnVtRXhlY3V0aW9ucywocltyLmxlbmd0aC0xXSsxKSpzKSxydW5JZDpvfX0pKX1jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIoZSl7cmV0dXJuIGUucGlwZShCdCh0aGlzLnN0b3JlLnNlbGVjdChweSkpLGtlKChbe2JlZ2luOmksZW5kOnJ9LG9dKT0+cj5pJiYhZnVuY3Rpb24obix0LGUpe2lmKHQ+PWUpdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBiZWdpbiB0byBiZSBsZXNzIHRoYW4gZW5kLCBidXQgZ290IGJlZ2luPSR7dH0sIGVuZD0ke2V9YCk7cmV0dXJuLTEhPT1uLmZpbmRJbmRleChpPT5pLmJlZ2luPj10JiZpLmVuZDw9ZSl9KG8ubG9hZGluZ1JhbmdlcyxpLHIpKSxOdCgoW3tiZWdpbjppLGVuZDpyfV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBRSh7YmVnaW46aSxlbmQ6cn0pKX0pLGhuKChbe3J1bklkOmksYmVnaW46cixlbmQ6b31dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhpLHIsbykucGlwZShOdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChSRShzKSl9KSxOKCgpPT57fSkpKSl9b25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShlaShJZyksQnQodGhpcy5zdG9yZS5zZWxlY3QoUW8pLHRoaXMuc3RvcmUuc2VsZWN0KGdOKSx0aGlzLnN0b3JlLnNlbGVjdChmeSkpLE4oKFtlLGkscixvXSk9Pih7YWN0aXZlUnVuSWQ6aSxsb2FkZWRFeGVjdXRpb25EYXRhOnIsZm9jdXNJbmRleDpvK2UuZGlzcGxheUluZGV4fSkpKX1jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIoZSl7cmV0dXJuIGUucGlwZShrZSgoe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6b30pPT5udWxsIT09aSYmbnVsbCE9PW8mJnZvaWQgMD09PXJbb10pLGhuKCh7YWN0aXZlUnVuSWQ6aSxmb2N1c0luZGV4OnJ9KT0+e2xldCBvPXIscz1vKzE7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRhdGEoaSxvLHMpLnBpcGUoTnQoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goUEUoYSkpfSksTihhPT4oe2V4ZWN1dGlvbkRhdGE6YSxiZWdpbjpvLGVuZDpzfSkpKX0pLE4oKHtleGVjdXRpb25EYXRhOml9KT0+aS5leGVjdXRpb25zWzBdKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChRbyksdGhpcy5zdG9yZS5zZWxlY3QoX04pKSxrZSgoW2kscixvXSk9PntpZihudWxsPT09cilyZXR1cm4hMTtmb3IobGV0IHMgb2YgaS5zdGFja19mcmFtZV9pZHMpaWYodm9pZCAwPT09b1tzXSlyZXR1cm4hMDtyZXR1cm4hMX0pLGhuKChbaSxyXSk9PntsZXQgbz1pLnN0YWNrX2ZyYW1lX2lkcztyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMocixvKS5waXBlKE50KHM9PntsZXQgYT17fTtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoOysrbClhW29bbF1dPXMuc3RhY2tfZnJhbWVzW2xdO3RoaXMuc3RvcmUuZGlzcGF0Y2goY3koe3N0YWNrRnJhbWVzOmF9KSl9KSxOKCgpPT57fSkpfSkpfW9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGVpKEFnKSx3cigxMDApLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChteSksdGhpcy5zdG9yZS5zZWxlY3QocVkpKSxrZSgoWyxlLGldKT0+bnVsbCE9PWUmJmk+MCksTigoWyxlLGkscl0pPT4oe3J1bklkOmUsbnVtR3JhcGhFeGVjdXRpb25zOmksc2Nyb2xsQmVnaW5JbmRleDpyfSkpLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFhZKSx0aGlzLnN0b3JlLnNlbGVjdChZWSksdGhpcy5zdG9yZS5zZWxlY3QoUVkpLHRoaXMuc3RvcmUuc2VsZWN0KFpZKSksTigoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxzLGEsbF0pPT57bGV0IGM9d04ocixNYXRoLm1pbihyK3MsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKGQ9Pi0xPT09YS5pbmRleE9mKGQpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKGtlKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksTnQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEZFKHtwYWdlSW5kZXg6cn0pKX0pfSksaG4oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOnN9KT0+e2xldCBhPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8scyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLGEsbCkucGlwZShOdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChORShjKSl9KSxOKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoZWkoUGcsUmcpLEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdCh0WCkpLGtlKChbZSxpLHJdKT0+e2xldHtncmFwaF9pZDpvLG9wX25hbWU6c309ZTtyZXR1cm4hKG51bGw9PT1pfHx2b2lkIDAhPT1yW29dJiZyW29dLmhhcyhzKSYmKHJbb10uZ2V0KHMpPT09VGUuTE9BRElOR3x8cltvXS5nZXQocyk9PT1UZS5MT0FERUQpKX0pLE50KChbe2dyYXBoX2lkOmUsb3BfbmFtZTppfV0pPT50aGlzLnN0b3JlLmRpc3BhdGNoKExFKHtncmFwaF9pZDplLG9wX25hbWU6aX0pKSksaG4oKFtlLGldKT0+e2xldHtncmFwaF9pZDpyLG9wX25hbWU6b309ZTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoR3JhcGhPcEluZm8oaSxyLG8pLnBpcGUoTnQocz0+dGhpcy5zdG9yZS5kaXNwYXRjaChCRSh7Z3JhcGhPcEluZm9SZXNwb25zZTpzfSkpKSxOKHM9Pih7cnVuSWQ6aSxzdGFja0ZyYW1lSWRzOnMuc3RhY2tfZnJhbWVfaWRzfSkpKX0pKX1sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoX04pKSxOKChbe3J1bklkOmksc3RhY2tGcmFtZUlkczpyfSxvXSk9Pih7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyLmZpbHRlcihhPT52b2lkIDA9PT1vW2FdKX0pKSxrZSgoe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6cn0pPT5udWxsIT09aSYmci5sZW5ndGg+MCksaG4oKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU3RhY2tGcmFtZXMoaSxyKS5waXBlKE50KG89PntsZXQgcz17fTtmb3IobGV0IGE9MDthPHIubGVuZ3RoOysrYSlzW3JbYV1dPW8uc3RhY2tfZnJhbWVzW2FdO3RoaXMuc3RvcmUuZGlzcGF0Y2goY3koe3N0YWNrRnJhbWVzOnN9KSl9KSxOKCgpPT57fSkpKSl9b25BbGVydFR5cGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShlaShTZyksQnQodGhpcy5zdG9yZS5zZWxlY3QoUW8pLHRoaXMuc3RvcmUuc2VsZWN0KEdFKSx0aGlzLnN0b3JlLnNlbGVjdCh6WSksdGhpcy5zdG9yZS5zZWxlY3QoVVkpLHRoaXMuc3RvcmUuc2VsZWN0KGNOKSksa2UoKFssZSxpLHIsbyxzXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmcy5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx5KCkpKSxobigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksTnQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRFKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QoTmcpLHRoaXMuc3RvcmUuc2VsZWN0KExnKSx0aGlzLnN0b3JlLnNlbGVjdChHdSksdGhpcy5zdG9yZS5zZWxlY3QocHkpLHRoaXMuc3RvcmUuc2VsZWN0KFFvKSksTigoW2kscixvLHMsYSxsXSk9PntsZXQgZD1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsdT13TihNYXRoLm1heCgwLGQtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbihkK01hdGguZmxvb3Ioby8yKSxzKSxyLHMsYS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09dS5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46dVswXSpyLGVuZDpNYXRoLm1pbihhLm51bUV4ZWN1dGlvbnMsKHVbdS5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChpWCkpLGtlKChbLGkscl0pPT5udWxsIT09aSYmci5zdGF0ZSE9PVRlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFZFKCkpKSxobigoWyxpXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGVMaXN0KGkpLnBpcGUoTnQocj0+e2xldCBvPVtdO3IuZm9yRWFjaCgoW3MsYV0pPT57by5wdXNoKHtob3N0X25hbWU6cyxmaWxlX3BhdGg6YX0pfSksdGhpcy5zdG9yZS5kaXNwYXRjaChIRSh7c291cmNlRmlsZXM6b30pKX0pLE4oKCk9Pnt9KSkpKX1vblNvdXJjZUZpbGVGb2N1c2VkKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShlaShPZyksQnQodGhpcy5zdG9yZS5zZWxlY3QoUW8pLHRoaXMuc3RvcmUuc2VsZWN0KGJOKSx0aGlzLnN0b3JlLnNlbGVjdChYRSkpLE4oKFtlLGkscixvXSk9Pih7cnVuSWQ6aSxzdGFja0ZyYW1lOmUuc3RhY2tGcmFtZSxmaWxlSW5kZXg6cixmaWxlQ29udGVudDpvfSkpLGtlKCh7cnVuSWQ6ZSxmaWxlQ29udGVudDppfSk9Pm51bGwhPT1lJiZudWxsIT09aSYmaS5sb2FkU3RhdGU9PT1UZS5OT1RfTE9BREVEKSxOdCgoe3N0YWNrRnJhbWU6ZX0pPT50aGlzLnN0b3JlLmRpc3BhdGNoKHpFKHtob3N0X25hbWU6ZS5ob3N0X25hbWUsZmlsZV9wYXRoOmUuZmlsZV9wYXRofSkpKSxobigoe2ZpbGVJbmRleDplLHJ1bklkOml9KT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZShpLGUpLnBpcGUoTnQocj0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goVUUocikpfSksTigoKT0+e30pKSkpfWNvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMubG9hZERhdGEkPWFyKCgpPT57bGV0IG89dGhpcy5sb2FkRGVidWdnZXJSdW5zKHRuKHRoaXMub25EZWJ1Z2dlckRhdGFQb2xsKCksdGhpcy5vbkNvcmVSZWxvYWQoKSkpLnBpcGUoQ3MoKSkscz10aGlzLmxvYWRTb3VyY2VGaWxlTGlzdChvKSxhPXRoaXMuY3JlYXRlTnVtRXhlY3V0aW9uTG9hZGVyKG8pLGw9dGhpcy5jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIobyksYz10aGlzLm9uQWxlcnRUeXBlRm9jdXNlZCgpLGQ9dGhpcy5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhjKSx1PXRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRldGVjdG9yKGEpLnBpcGUoQ3MoKSkscD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcih0bih0aGlzLm9uRXhlY3V0aW9uU2Nyb2xsKCksdGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KHUpLGQpKSxmPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKHRuKHRoaXMub25FeGVjdXRpb25EaWdlc3RGb2N1c2VkKCksdS5waXBlKEJ0KHRoaXMuc3RvcmUuc2VsZWN0KFFvKSx0aGlzLnN0b3JlLnNlbGVjdChnTikpLE4oKFsseCxSXSk9Pih7YWN0aXZlUnVuSWQ6eCxsb2FkZWRFeGVjdXRpb25EYXRhOlIsZm9jdXNJbmRleDowfSkpKSkpO3JldHVybiB0bihsLHAsZix0aGlzLmNyZWF0ZU51bUdyYXBoRXhlY3V0aW9uTG9hZGVyKG8pLHMsdGhpcy5vblNvdXJjZUZpbGVGb2N1c2VkKCksdGhpcy5sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyh0aGlzLm9uR3JhcGhFeGVjdXRpb25TY3JvbGwoKSksdGhpcy5sb2FkR3JhcGhPcFN0YWNrRnJhbWVzKHRoaXMubG9hZEdyYXBoT3BJbmZvKCkpKS5waXBlKE4oKCk9Pih7fSkpKX0se2Rpc3BhdGNoOiExfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGsoeG8pLGsoQWUpLGsoeEUpKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxWWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGVdfSksbn0pKCksSFg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlXX0pLG59KSgpLG5UPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZV19KSxufSkoKSx6WD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsblQsTWRdfSksbn0pKCksVVg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFl1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxpVD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsWXVdfSksbn0pKCksalg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGlUXX0pLG59KSgpLEdYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxpVF19KSxufSkoKSxXWD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsblRdfSksbn0pKCkscVg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLFdYLGNpLHF1XX0pLG59KSgpLFlYPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltWWCxQZSxHYSx6WCxIWCxVWCxqWCxHWCxPWSxxWCxUci5mb3JGZWF0dXJlKGR5LEJZKSx0by5mb3JGZWF0dXJlKFtCWF0pLEJjLmZvclBsdWdpbih0VCxGWCldfSksbn0pKCksclQ9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgQ2xvc2VkIiksb1Q9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgVG9nZ2xlZCIpLHNUPV9lKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgdG9nZ2xlZCIpLGFUPV9lKCJbTWV0cmljc10gVXNlciByZXF1ZXN0ZWQgdG8gb3BlbiB0aGUgc2xpZGUgb3V0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxsVD1fZSgiW01ldHJpY3NdIFVzZXIgY2hhbmdlZCB0aGUgdGFiIGluIHRoZSB0YWJsZSBlZGl0b3IiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjVD1fZSgiW01ldHJpY3NdIFNsaWRlIG91dCBzZXR0aW5ncyBtZW51IGNsb3NlZCIpLGRUPV9lKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgUmVxdWVzdGVkIiksdVQ9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIEZhaWxlZCIpLGZUPV9lKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIFN0YXRlIFVwZGF0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxCZz1fZSgiW01ldHJpY3NdIE1ldHJpY3MgQ2FyZCBGdWxsIFNpemUgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1UPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBDaGFuZ2UgVG9vbHRpcCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGhUPShfZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpLF9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpKSxnVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgWCBBeGlzIFR5cGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgQ2FyZCBXaWR0aCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFJlc2V0IENhcmQgV2lkdGgiKSx2VD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgU2NhbGFyIFNtb290aGluZyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHlUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFBhcnRpdGlvbiBOb24gTW9ub3RvbmljIFggVG9nZ2xlZCIpLHhUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBJbWFnZSBCcmlnaHRuZXNzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ1Q9X2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIENvbnRyYXN0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVQ9X2UoIltNZXRyaWNzXSBJbWFnZSBCcmlnaHRuZXNzIFNldHRpbmcgUmVzZXQiKSx3VD1fZSgiW01ldHJpY3NdIEltYWdlIENvbnRyYXN0IFNldHRpbmcgUmVzZXQiKSxTVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBUb2dnbGUgSW1hZ2UgU2hvdyBBY3R1YWwgU2l6ZSIpLEVUPV9lKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBIaXN0b2dyYW0gTW9kZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRUPV9lKCJbTWV0cmljc10gTXVsdGlwbGUgVGltZSBTZXJpZXMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRFQ9X2UoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXF1ZXN0IEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElUPV9lKCJbTWV0cmljc10gRmV0Y2ggVGltZSBTZXJpZXMgUmVzcG9uc2UgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVmc9X2UoIltNZXRyaWNzXSBDYXJkIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEFUPV9lKCJbTWV0cmljc10gQ2FyZCBTdGVwIFNsaWRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUlQ9X2UoIltNZXRyaWNzXSBUYWcgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxQVD1fZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIEdyb3VwIEV4cGFuc2lvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSGc9X2UoIltNZXRyaWNzXSBDYXJkIFBpbiBTdGF0ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksT1Q9X2UoIltNZXRyaWNzXSBUb2dnbGUgVmlzaWJsZSBQbHVnaW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrVD1fZSgiW01ldHJpY3NdIFRvZ2dsZSBTaG93IEFsbCBQbHVnaW5zIiksa2Y9X2UoIltNZXRyaWNzXSBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYnk9X2UoIltNZXRyaWNzXSBDYXJkIFVzZXIgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZUPV9lKCJbTWV0cmljc10gTGlua2VkIFRpbWUgRW5hYmxlIFRvZ2dsZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFhYPV9lKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHpnPV9lKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVZz1fZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51IG9yIGRlbGV0ZSBidXR0b24gY2xpY2tlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLElkPV9lKCJbTWV0cmljc10gVGltZSBTZWxlY3RvciBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTlQ9X2UoIltNZXRyaWNzXSBSYW5nZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFFYPV9lKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIik7ZnVuY3Rpb24gdnkobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIHFzPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KHFzfHwocXM9e30pKSxxcykpKCksWXM9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShZc3x8KFlzPXt9KSksWXMpKSgpLGZzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0oZnN8fChmcz17fSkpLGZzKSkoKTtmdW5jdGlvbiBMVChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9Pnl5KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUVTZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gRVNlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiB5eShuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYoRmYobltlXSkmJkZmKHRbaV0pKXtsZXQgcj1lLG89aTtlPVpYKG4sZSsxKSxpPVpYKHQsaSsxKTtsZXQgcz1OdW1iZXIobi5zbGljZShyLGUpKSxhPU51bWJlcih0LnNsaWNlKG8saSkpO2lmKHM8YSlyZXR1cm4tMTtpZihzPmEpcmV0dXJuIDF9ZWxzZXtpZihTTihuW2VdKSl7aWYoIVNOKHRbaV0pKXJldHVybi0xfWVsc2V7aWYoU04odFtpXSkpcmV0dXJuIDE7aWYobltlXTx0W2ldKXJldHVybi0xO2lmKG5bZV0+dFtpXSlyZXR1cm4gMX1lKyssaSsrfX19ZnVuY3Rpb24gWlgobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighRmYobltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIUZmKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIUZmKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhRmYobltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gRmYobil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gU04obil7cmV0dXJuIi8iPT09bnx8RmYobil9ZnVuY3Rpb24gRU4obix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9Z2QoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIERTZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPUVOKG8sbixlKTtpZihudWxsPT09cyljb250aW51ZTtsZXQgYT10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPUVOKG8sbixpKTsobnVsbCE9PWEmJmE+c3x8bnVsbD09PWF8fG51bGwhPT1hJiZhPT09bCkmJihyW29dPXtpbmRleDpzLGlzQ2xvc2VzdDohMX0pfXJldHVybiByfWZ1bmN0aW9uIEtYKG4pe2xldCB0PXZ5KG4ucnVuVG9Mb2FkU3RhdGUsZT0+ZT09PVRlLkxPQURJTkc/VGUuTE9BRElORzpUZS5OT1RfTE9BREVEKTtyZXR1cm57Li4ubixydW5Ub0xvYWRTdGF0ZTp0fX1mdW5jdGlvbiBKWChuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTplUSxyZWR1Y2VyczpJU2V9PXVmKHt0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6VGUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZFRvUGlubmVkQ29weTpuZXcgTWFwLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpuZXcgTWFwLHBpbm5lZENhcmRUb09yaWdpbmFsOm5ldyBNYXAsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6W10sY2FyZE1ldGFkYXRhTWFwOnt9LGNhcmRTdGF0ZU1hcDp7fSxjYXJkU3RlcEluZGV4Ont9LHRhZ0ZpbHRlcjoiIix0YWdHcm91cEV4cGFuZGVkOm5ldyBNYXAsbGlua2VkVGltZVNlbGVjdGlvbjpudWxsLGxpbmtlZFRpbWVFbmFibGVkOiExLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ITAscmFuZ2VTZWxlY3Rpb25FbmFibGVkOiExLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOmh0LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlNNT09USEVELG5hbWU6InNtb290aGVkIixkaXNwbGF5TmFtZToiU21vb3RoZWQiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlZBTFVFLG5hbWU6InZhbHVlIixkaXNwbGF5TmFtZToiVmFsdWUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlNURVAsbmFtZToic3RlcCIsZGlzcGxheU5hbWU6IlN0ZXAiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlJFTEFUSVZFX1RJTUUsbmFtZToicmVsYXRpdmUiLGRpc3BsYXlOYW1lOiJSZWxhdGl2ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpbe3R5cGU6aHQuUlVOLG5hbWU6InJ1biIsZGlzcGxheU5hbWU6IlJ1biIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuTUlOX1ZBTFVFLG5hbWU6Im1pbiIsZGlzcGxheU5hbWU6Ik1pbiIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuTUFYX1ZBTFVFLG5hbWU6Im1heCIsZGlzcGxheU5hbWU6Ik1heCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuU1RBUlRfVkFMVUUsbmFtZToic3RhcnQiLGRpc3BsYXlOYW1lOiJTdGFydCBWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuRU5EX1ZBTFVFLG5hbWU6ImVuZCIsZGlzcGxheU5hbWU6IkVuZCBWYWx1ZSIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuVkFMVUVfQ0hBTkdFLG5hbWU6InZhbHVlQ2hhbmdlIixkaXNwbGF5TmFtZToiVmFsdWUiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlBFUkNFTlRBR0VfQ0hBTkdFLG5hbWU6InBlcmNlbnRhZ2VDaGFuZ2UiLGRpc3BsYXlOYW1lOiIlIixlbmFibGVkOiEwLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpodC5TVEFSVF9TVEVQLG5hbWU6InN0YXJ0U3RlcCIsZGlzcGxheU5hbWU6IlN0YXJ0IFN0ZXAiLGVuYWJsZWQ6ITAscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LkVORF9TVEVQLG5hbWU6ImVuZFN0ZXAiLGRpc3BsYXlOYW1lOiJFbmQgU3RlcCIsZW5hYmxlZDohMCxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH0se3R5cGU6aHQuU1RFUF9BVF9NQVgsbmFtZToic3RlcEF0TWF4IixkaXNwbGF5TmFtZToiU3RlcCBBdCBNYXgiLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITB9LHt0eXBlOmh0LlNURVBfQVRfTUlOLG5hbWU6InN0ZXBBdE1pbiIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWluIixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpodC5NRUFOLG5hbWU6Im1lYW4iLGRpc3BsYXlOYW1lOiJNZWFuIixlbmFibGVkOiExLHJlbW92YWJsZTohMCxzb3J0YWJsZTohMCxtb3ZhYmxlOiEwfSx7dHlwZTpodC5SQVdfQ0hBTkdFLG5hbWU6InJhd0NoYW5nZSIsZGlzcGxheU5hbWU6IlJhdyIsZW5hYmxlZDohMSxyZW1vdmFibGU6ITAsc29ydGFibGU6ITAsbW92YWJsZTohMH1dLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldCxzdGVwTWluTWF4OnttaW46MS8wLG1heDotMS8wfX0se2lzU2V0dGluZ3NQYW5lT3BlbjohMCxpc1NsaWRlb3V0TWVudU9wZW46ITEsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjpyby5TSU5HTEUsdGltZVNlcmllc0RhdGE6e3NjYWxhcnM6e30saGlzdG9ncmFtczp7fSxpbWFnZXM6e319LHNldHRpbmdzOlhTLHNldHRpbmdPdmVycmlkZXM6e30sdmlzaWJsZUNhcmRNYXA6bmV3IE1hcCxwcmV2aW91c0NhcmRJbnRlcmFjdGlvbnM6e3RhZ0ZpbHRlcnM6W10scGluczpbXSxjbGlja3M6W119LG5ld0NhcmRJbnRlcmFjdGlvbnM6e3RhZ0ZpbHRlcnM6W10scGluczpbXSxjbGlja3M6W119fSwobix0LGUpPT5Gbyh0LGUpP246ey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOlRlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRNZXRhZGF0YU1hcDp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSksVE49ZVEsQVNlPWJyKGVRLHllKEVoLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PXduLkVYUEVSSU1FTlQmJnQhPT13bi5DT01QQVJFX0VYUEVSSU1FTlQpcmV0dXJuIG47bGV0IGk9bmV3IFNldDtmb3IobGV0IGQgb2Ygbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5rZXlzKCkpe2xldHtwbHVnaW46dSx0YWc6cCxydW5JZDpmLHNhbXBsZTptfT1uLmNhcmRNZXRhZGF0YU1hcFtkXTtpLmFkZChKWCh1LHAsZixtKSl9bGV0IHI9ZSxvPVtdO2ZvcihsZXQgZCBvZlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnIubWV0cmljcy5waW5uZWRDYXJkc10pe2xldCB1PUpYKGQucGx1Z2luLGQudGFnLGQucnVuSWQsZC5zYW1wbGUpO2kuaGFzKHUpfHwoaS5hZGQodSksby5wdXNoKGQpKX1sZXQgcz1IRihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxhPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKGEpJiZudWxsIT09YSl7bGV0IGQ9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihhLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6ZH19bGV0IGM9ey4uLm4sLi4ucyxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSx5ZShJbCwobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMob28pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQscz10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLGE9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOnMsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczphLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLHllKGNzLEZzLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09VGUuTE9BRElORz9UZS5MT0FESU5HOlRlLk5PVF9MT0FERUQsZT12eShuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT52eShpLG89PnVhKHIpP3Z5KG8scz0+S1gocykpOktYKG8pKSk7cmV0dXJuey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6dH0sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShkVCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6VGUuTE9BRElOR319KSkseWUocFQsbj0+KHsuLi5uLHRhZ01ldGFkYXRhTG9hZFN0YXRlOnsuLi5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLHN0YXRlOlRlLkZBSUxFRH19KSkseWUodVQsKG4se3RhZ01ldGFkYXRhOnR9KT0+e2xldCBlPXtzY2FsYXJzOiRYKHQsem4uU0NBTEFSUyksaGlzdG9ncmFtczokWCh0LHpuLkhJU1RPR1JBTVMpLGltYWdlczp0W3puLklNQUdFU119LGk9e30scj1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2YgT2JqZWN0LmtleXMobikpe2xldCByLGk9ZTtpZih1YShpKSl7aWYoIXBhKGkpKXRocm93IG5ldyBFcnJvcigiTXVsdGktcnVuLCBzYW1wbGVkIHBsdWdpbiBzdXBwb3J0IG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTt7bGV0IG89bltpXS50YWdSdW5TYW1wbGVkSW5mbztmb3IobGV0IHMgb2YgT2JqZWN0LmtleXMobykpZm9yKGxldCBhIG9mIE9iamVjdC5rZXlzKG9bc10pKXtsZXR7bWF4U2FtcGxlc1BlclN0ZXA6bH09b1tzXVthXTtmb3IobGV0IGM9MDtjPGw7YysrKXQucHVzaCh7cGx1Z2luOmksdGFnOnMscnVuSWQ6YSxzYW1wbGU6YyxudW1TYW1wbGU6bH0pfX19ZWxzZSBpZihwYShpKSl7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpZm9yKGxldCBzIG9mIHJbb10pdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDpzfSl9ZWxzZXtyPW5baV0udGFnVG9SdW5zO2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhyKSl0LnB1c2goe3BsdWdpbjppLHRhZzpvLHJ1bklkOm51bGx9KX19cmV0dXJuIHR9KGUpLG89W107Zm9yKGxldCBmIG9mIHIpe2xldCBtPVZGKGYpO2lbbV09ZixvLnB1c2gobSl9bGV0IHM9bi50YWdHcm91cEV4cGFuZGVkO2lmKDA9PT1uLnRhZ0dyb3VwRXhwYW5kZWQuc2l6ZSl7bGV0IG09TFQoby5tYXAoYj0+KHsuLi5pW2JdLGNhcmRJZDpifSkpLmZpbHRlcihCb29sZWFuKSk7cz1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7Zm9yKGxldCBiIG9mIG0uc2xpY2UoMCwyKSlzLnNldChiLmdyb3VwTmFtZSwhMCl9bGV0e25leHRDYXJkVG9QaW5uZWRDb3B5OmEsbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOmwscGlubmVkQ2FyZE1ldGFkYXRhTWFwOmN9PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcCxvPXt9O3JldHVybiBuLmZvckVhY2goKHMsYSk9PnstMSE9PWUuaW5kZXhPZihhKSYmKGkuc2V0KGEscyksci5zZXQocyxhKSxvW3NdPXRbYV0pfSkse25leHRDYXJkVG9QaW5uZWRDb3B5OmksbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOnIscGlubmVkQ2FyZE1ldGFkYXRhTWFwOm99fShuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxpLG8pLGQ9ey4uLmksLi4uY30sdT1mdW5jdGlvbihuLHQpe2xldCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxyXSk9Pnt0W2ldJiYoZVtpXT1yKX0pLGV9KG4uY2FyZFN0ZXBJbmRleCxkKSxwPUhGKG4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsbyxkLGEsbi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsbCx1LG4uY2FyZFN0YXRlTWFwKTtyZXR1cm57Li4ubiwuLi5wLHRhZ0dyb3VwRXhwYW5kZWQ6cyx0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6VGUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSx0YWdNZXRhZGF0YTplLGNhcmRMaXN0Om99fSkseWUoZlQsKG4se2NhcmRJZDp0LHNldHRpbmdzOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGlbdF09ey4uLmlbdF0sLi4uZX0sey4uLm4sY2FyZFN0YXRlTWFwOml9fSkseWUoQmcsKG4se2NhcmRJZDp0fSk9PntsZXQgZT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlW3RdPXsuLi5lW3RdLGZ1bGxXaWR0aDohZVt0XT8uZnVsbFdpZHRoLHRhYmxlRXhwYW5kZWQ6IWVbdF0/LmZ1bGxXaWR0aH0sey4uLm4sY2FyZFN0YXRlTWFwOmV9fSkseWUoUlQsKG4se3RhZ0ZpbHRlcjp0fSk9Pih7Li4ubix0YWdGaWx0ZXI6dH0pKSx5ZShtVCwobix7c29ydDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsdG9vbHRpcFNvcnQ6dH19KSkseWUoaFQsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmlnbm9yZU91dGxpZXJzPz9uLnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaWdub3JlT3V0bGllcnM6dH19fSkseWUoZ1QsKG4se3hBeGlzVHlwZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMseEF4aXNUeXBlOnR9fSkpLHllKHZULChuLHtzbW9vdGhpbmc6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclNtb290aGluZzp0fX0pKSx5ZSh5VCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWD8/bi5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDp0fX19KSx5ZSh4VCwobix7YnJpZ2h0bmVzc0luTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dH19KSkseWUoQ1QsKG4se2NvbnRyYXN0SW5NaWxsaTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VDb250cmFzdEluTWlsbGk6dH19KSkseWUoTVQsbj0+e2xldHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSx5ZSh3VCxuPT57bGV0e2ltYWdlQ29udHJhc3RJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSx5ZShTVCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuaW1hZ2VTaG93QWN0dWFsU2l6ZT8/bi5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VTaG93QWN0dWFsU2l6ZTp0fX19KSx5ZShFVCwobix7aGlzdG9ncmFtTW9kZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaGlzdG9ncmFtTW9kZTp0fX0pKSx5ZShfVCwobix7Y2FyZE1pbldpZHRoOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6dH19KSkseWUoYlQsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6bnVsbH19KSkseWUoUVgsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxoaWRlRW1wdHlDYXJkczohbi5zZXR0aW5nT3ZlcnJpZGVzLmhpZGVFbXB0eUNhcmRzfX0pKSx5ZShUVCwobix7cmVxdWVzdHM6dH0pPT57aWYoIXQubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfTtmb3IobGV0IGkgb2YgdCl7bGV0e3BsdWdpbjpyLHRhZzpvLHNhbXBsZTpzfT1pO2Vbcl09UVMoZSxyLG8scyk7bGV0IGE9Z2QoZSxyLG8scyksbD1QRihpKT9baS5ydW5JZF06cWgobi50YWdNZXRhZGF0YSxyLG8scyk7YS5ydW5Ub0xvYWRTdGF0ZT1aUyhUZS5MT0FESU5HLGwsYS5ydW5Ub0xvYWRTdGF0ZSl9cmV0dXJuey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShEVCwobix7cmVxdWVzdDp0fSk9PntsZXQgZT17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvfT10O2VbaV09UVMoZSxpLHIsbyk7bGV0IHM9Z2QoZSxpLHIsbyksYT1QRih0KT9bdC5ydW5JZF06cWgobi50YWdNZXRhZGF0YSxpLHIsbyk7cmV0dXJuIHMucnVuVG9Mb2FkU3RhdGU9WlMoVGUuRkFJTEVELGEscy5ydW5Ub0xvYWRTdGF0ZSksey4uLm4sdGltZVNlcmllc0RhdGE6ZX19KSx5ZShJVCwobix7cmVzcG9uc2U6dH0pPT57bGV0IGU9ey4uLm4uc3RlcE1pbk1heH0saT17Li4ubi5jYXJkU3RhdGVNYXB9LHI9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46byx0YWc6cyxydW5JZDphLHNhbXBsZTpsfT10O3Jbb109UVMocixvLHMsbCk7bGV0IGM9Z2QocixvLHMsbCk7aWYoVVModCkpe2xldCB1PWE/W2FdOnFoKG4udGFnTWV0YWRhdGEsbyxzLGwpO2MucnVuVG9Mb2FkU3RhdGU9WlMoVGUuRkFJTEVELHUsYy5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtsZXQgdT10LnJ1blRvU2VyaWVzO2MucnVuVG9TZXJpZXM9ey4uLmMucnVuVG9TZXJpZXN9LGMucnVuVG9Mb2FkU3RhdGU9ey4uLmMucnVuVG9Mb2FkU3RhdGV9O2ZvcihsZXQgcCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkocCkpe2MucnVuVG9TZXJpZXNbcF09dVtwXSxjLnJ1blRvTG9hZFN0YXRlW3BdPVRlLkxPQURFRDtmb3IobGV0IGYgb2YgdVtwXSllLm1pbj1NYXRoLm1pbihlLm1pbixmLnN0ZXApLGUubWF4PU1hdGgubWF4KGUubWF4LGYuc3RlcCl9fWlmKHQucnVuVG9TZXJpZXMmJnQucGx1Z2luPT09em4uU0NBTEFSUyl7bGV0IHU9VkYoe3BsdWdpbjpvLHRhZzpzLHJ1bklkOm51bGx9KSxwPWZ1bmN0aW9uKG4pe2xldCB0PTEvMCxlPS0xLzA7cmV0dXJuIE9iamVjdC52YWx1ZXMobikuZmxhdCgpLmZvckVhY2goaT0+e3Q9TWF0aC5taW4odCxpLnN0ZXApLGU9TWF0aC5tYXgoZSxpLnN0ZXApfSkse21pblN0ZXA6dCxtYXhTdGVwOmV9fShjLnJ1blRvU2VyaWVzKTtpW3VdPXsuLi5pW3VdLGRhdGFNaW5NYXg6cH07bGV0IGY9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh1KTtmJiYoaVtmXT17Li4uaVtmXSxkYXRhTWluTWF4OnB9KX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTpyLGNhcmRTdGVwSW5kZXg6RFNlKG4uY2FyZE1ldGFkYXRhTWFwLG4uY2FyZFN0ZXBJbmRleCxyLG4udGltZVNlcmllc0RhdGEpLHN0ZXBNaW5NYXg6ZSxjYXJkU3RhdGVNYXA6aX19KSx5ZShBVCwobix7Y2FyZElkOnQsc3RlcEluZGV4OmV9KT0+e2xldCBpPUVOKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkscj1lO3JldHVybiBudWxsPT09aT9yPW51bGw6ZT5pJiYocj1pKSx7Li4ubixjYXJkU3RlcEluZGV4OnsuLi5uLmNhcmRTdGVwSW5kZXgsW3RdOntpbmRleDpyLGlzQ2xvc2VzdDohMX19fX0pLHllKFBULChuLHt0YWdHcm91cDp0fSk9PntsZXQgZT1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7cmV0dXJuIGUuc2V0KHQsIWUuZ2V0KHQpKSx7Li4ubix0YWdHcm91cEV4cGFuZGVkOmV9fSkseWUoVmcsKG4se2VudGVyZWRDYXJkczp0LGV4aXRlZENhcmRzOmV9KT0+e2lmKCF0Lmxlbmd0aCYmIWUubGVuZ3RoKXJldHVybiBuO2xldCBpPW5ldyBNYXAobi52aXNpYmxlQ2FyZE1hcCk7cmV0dXJuIHQuZm9yRWFjaCgoe2VsZW1lbnRJZDpyLGNhcmRJZDpvfSk9PntsZXQgcz1pLmdldChyKT8/bnVsbDtpZihudWxsIT09cyYmcyE9PW8pdGhyb3cgbmV3IEVycm9yKCJBIERPTSBlbGVtZW50IGNhbm5vdCBiZSByZXVzZWQgZm9yIG1vcmUgdGhhbiAxIHVuaXF1ZSBjYXJkIG1ldGFkYXRhIik7aS5zZXQocixvKX0pLGUuZm9yRWFjaCgoe2VsZW1lbnRJZDpyfSk9PntpLmRlbGV0ZShyKX0pLHsuLi5uLHZpc2libGVDYXJkTWFwOml9fSkseWUoSGcsKG4se2NhcmRJZDp0fSk9PntsZXQgZT1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmhhcyh0KSxpPSFlJiYhbi5jYXJkVG9QaW5uZWRDb3B5Lmhhcyh0KTtpZihpJiYhS1MobikpcmV0dXJuIG47bGV0IHI9bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHkpLG89bmV3IE1hcChuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSkscz1uZXcgTWFwKG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwpLGE9ey4uLm4uY2FyZE1ldGFkYXRhTWFwfSxsPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGM9ey4uLm4uY2FyZFN0YXRlTWFwfTtpZihlKXtsZXQgZD1uLnBpbm5lZENhcmRUb09yaWdpbmFsLmdldCh0KTtyLmRlbGV0ZShkKSxvLmRlbGV0ZShkKSxzLmRlbGV0ZSh0KSxkZWxldGUgYVt0XSxkZWxldGUgbFt0XSxkZWxldGUgY1t0XX1lbHNlIGlmKGkpe2xldCBkPXpGKHQscixvLHMsbCxhLGMpO3I9ZC5jYXJkVG9QaW5uZWRDb3B5LG89ZC5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUscz1kLnBpbm5lZENhcmRUb09yaWdpbmFsLGE9ZC5jYXJkTWV0YWRhdGFNYXAsbD1kLmNhcmRTdGVwSW5kZXgsYz1kLmNhcmRTdGF0ZU1hcH1lbHNle2xldCBkPW4uY2FyZFRvUGlubmVkQ29weS5nZXQodCk7ci5kZWxldGUodCksby5kZWxldGUodCkscy5kZWxldGUoZCksZGVsZXRlIGFbZF0sZGVsZXRlIGxbZF0sZGVsZXRlIGNbdF19cmV0dXJuey4uLm4sY2FyZE1ldGFkYXRhTWFwOmEsY2FyZFN0YXRlTWFwOmMsY2FyZFN0ZXBJbmRleDpsLGNhcmRUb1Bpbm5lZENvcHk6cixjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6byxwaW5uZWRDYXJkVG9PcmlnaW5hbDpzfX0pLHllKEZULG49PntsZXQgdD0hbi5saW5rZWRUaW1lRW5hYmxlZCxlPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9bi5zdGVwU2VsZWN0b3JFbmFibGVkLG89bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7aWYodCl7bGV0e21heDpzfT1uLnN0ZXBNaW5NYXg7aT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24/P3tzdGFydDp7c3RlcDpzPT09LTEvMD8wOnN9LGVuZDpudWxsfSxlPVVGKG4uY2FyZFN0ZXBJbmRleCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhLGkpLHI9dCxvPUJvb2xlYW4oaS5lbmQpfXJldHVybnsuLi5uLGNhcmRTdGVwSW5kZXg6ZSxsaW5rZWRUaW1lRW5hYmxlZDp0LGxpbmtlZFRpbWVTZWxlY3Rpb246aSxzdGVwU2VsZWN0b3JFbmFibGVkOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm99fSkseWUoTlQsbj0+e2xldCB0PSFuLnJhbmdlU2VsZWN0aW9uRW5hYmxlZCxlPW4uc3RlcFNlbGVjdG9yRW5hYmxlZCxpPW4ubGlua2VkVGltZVNlbGVjdGlvbixyPU9iamVjdC5lbnRyaWVzKG4uY2FyZFN0YXRlTWFwKS5yZWR1Y2UoKG8sW3MsYV0pPT4ob1tzXT17Li4uYSxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6THMuTk9ORSxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOkxzLk5PTkV9LG8pLHt9KTtyZXR1cm4gdD8oZT10LGl8fChpPXtzdGFydDp7c3RlcDpuLnN0ZXBNaW5NYXgubWlufSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSxpLmVuZHx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDppLnN0YXJ0fSkpOmkmJihpPXtzdGFydDppLmVuZD8/aS5zdGFydCxlbmQ6bnVsbH0pLHsuLi5uLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ZSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6dCxsaW5rZWRUaW1lU2VsZWN0aW9uOmksY2FyZFN0YXRlTWFwOnJ9fSkseWUoa2YsKG4sdCk9PntsZXR7Y2FyZElkOmUsdGltZVNlbGVjdGlvbjppfT10LHI9aS5zdGFydC5zdGVwLG89aS5lbmQ/LnN0ZXAsYT1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtuLmxpbmtlZFRpbWVFbmFibGVkJiYoYT12b2lkIDAhPT1vKTtsZXQgbD17c3RhcnQ6e3N0ZXA6cn0sZW5kOnZvaWQgMD09PW8/bnVsbDp7c3RlcDpyPm8/cjpvfX0sYz1VRihuLmNhcmRTdGVwSW5kZXgsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSxsKSxkPXsuLi5uLmNhcmRTdGF0ZU1hcH07cmV0dXJuIGUmJihkW2VdPXsuLi5kW2VdLHRpbWVTZWxlY3Rpb246bCxzdGVwU2VsZWN0aW9uT3ZlcnJpZGU6THMuT1ZFUlJJREVfQVNfRU5BQkxFRCxyYW5nZVNlbGVjdGlvbk92ZXJyaWRlOnZvaWQgMD09PWwuZW5kPy5zdGVwP0xzLk9WRVJSSURFX0FTX0RJU0FCTEVEOkxzLk9WRVJSSURFX0FTX0VOQUJMRUR9KSx7Li4ubixsaW5rZWRUaW1lU2VsZWN0aW9uOmwsY2FyZFN0ZXBJbmRleDpjLGNhcmRTdGF0ZU1hcDpkLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDphfX0pLHllKGJ5LChuLHtjYXJkSWQ6dCx1c2VyVmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLHllKElkLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246YSwuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpMcy5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntpW2FdPXsuLi5pW2FdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpMcy5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09WXMuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxzPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzLGNhcmRTdGF0ZU1hcDppfX0pLHllKGxULChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLHllKHpnLChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PXJvLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSx5ZShVZywobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlcjplLGNhcmRJZDppfSk9PntsZXR7Y2FyZFN0YXRlTWFwOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm8sbGlua2VkVGltZUVuYWJsZWQ6c309bixhPWk/JFMocixvLHMsaSk6dD09PXJvLlJBTkdFLGw9YT9uLnJhbmdlU2VsZWN0aW9uSGVhZGVyczpuLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsYz1sLmZpbmRJbmRleChwPT5wLm5hbWU9PT1lLm5hbWUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGwpO2xbY10uZW5hYmxlZCYmZC0tO2xldCB1PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KGMsZCxsKTtyZXR1cm4gdVtkXT17Li4udVtkXSxlbmFibGVkOiF1W2RdLmVuYWJsZWR9LGE/ey4uLm4scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOnV9OnsuLi5uLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6dX19KSx5ZShPVCwobix7cGx1Z2luOnR9KT0+e2xldCBlPW5ldyBTZXQobi5maWx0ZXJlZFBsdWdpblR5cGVzKTtyZXR1cm4gZS5oYXModCk/ZS5kZWxldGUodCk6ZS5hZGQodCksT2JqZWN0LnZhbHVlcyh6bikuZXZlcnkoaT0+ZS5oYXMoaSkpJiYoZT1uZXcgU2V0KSx7Li4ubixmaWx0ZXJlZFBsdWdpblR5cGVzOmV9fSkseWUoa1Qsbj0+KHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldH0pKSx5ZShvVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiFuLmlzU2V0dGluZ3NQYW5lT3Blbn0pKSx5ZShyVCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiExfSkpLHllKHNULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46IW4uaXNTbGlkZW91dE1lbnVPcGVufSkpLHllKGFULChuLHttb2RlOnR9KT0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMCxpc1NldHRpbmdzUGFuZU9wZW46ITAsdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLHllKGNULG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46ITF9KSkpO2Z1bmN0aW9uIHRRKG4sdCl7cmV0dXJuIHBmKEFTZSxJU2UpKG4sdCl9ZnVuY3Rpb24gJFgobix0KXtyZXR1cm57dGFnRGVzY3JpcHRpb25zOm5bdF0udGFnRGVzY3JpcHRpb25zLHRhZ1RvUnVuczpSU2Uoblt0XS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24gUlNlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKWZvcihsZXQgaSBvZiBuW2VdKXRbaV09Wy4uLnRbaV18fFtdLGVdO3JldHVybiB0fXZhciBrU2U9cShfZCxXYSwobix0LGUpPT50P3suLi50LGxvYWRTdGF0ZTpuLGlkOmV9Om51bGwpLG5RPV9lKCJbTWV0cmljcyBFZmZlY3RzXSBJbml0IiksaVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShlaShuUSx3YyxkZixQcyksQnQodGhpcy5zdG9yZS5zZWxlY3QoV28pLHRoaXMuc3RvcmUuc2VsZWN0KHZ2KSksa2UoKFssbyxzXSk9Pm89PT1ndiYmcy5zdGF0ZT09PVRlLk5PVF9MT0FERUQpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShlaShjcyxGcyksQnQodGhpcy5zdG9yZS5zZWxlY3QoV28pKSxrZSgoWyxvXSk9Pm89PT1ndikpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD10bih0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoQnQodGhpcy5zdG9yZS5zZWxlY3QodnYpLHRoaXMuc3RvcmUuc2VsZWN0KGxyKSksa2UoKFssbyxzXSk9Pm8uc3RhdGUhPT1UZS5MT0FESU5HJiZudWxsIT09cyksYWMoMTApLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkVCgpKX0pLEpuKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2godVQoe3RhZ01ldGFkYXRhOnN9KSl9KSx6cigoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2gocFQoKSksSHQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGVpKFZnKSxCdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxOKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGU9PT1UZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShCdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxOKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGUhPT1UZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXRuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShrZShvPT5vLmxlbmd0aD4wKSxCdCh0aGlzLnN0b3JlLnNlbGVjdChscikucGlwZShrZShvPT5udWxsIT09bykpKSxobigoW28sc10pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8scykpKSx0aGlzLmRhdGFFZmZlY3RzJD1hcigoKT0+dG4odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBuUSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChiVykucGlwZShKbihpPT5pLnNpemU/Y28oWy4uLmldLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChrU2UsbykucGlwZShZdCgxKSkpKTpIdChbXSkpLE4oaT0+aS5maWx0ZXIoQm9vbGVhbikpKX1mZXRjaFRpbWVTZXJpZXMoZSl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFRpbWVTZXJpZXMoW2VdKS5waXBlKE50KGk9PntsZXQgcj1pLmZpbHRlcihVUyk7ci5sZW5ndGgmJmNvbnNvbGUuZXJyb3IoIlRpbWUgc2VyaWVzIHJlc3BvbnNlIGNvbnRhaW5lZCBlcnJvcnM6IixyKSx0aGlzLnN0b3JlLmRpc3BhdGNoKElUKHtyZXNwb25zZTppWzBdfSkpfSksenIoKCk9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKERUKHtyZXF1ZXN0OmV9KSksSHQobnVsbCkpKSl9ZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHMoZSxpKXtyZXR1cm4gSHQoZS5tYXAobz0+e2xldHtwbHVnaW46cyx0YWc6YSxydW5JZDpsLHNhbXBsZTpjfT1vLGQ9cGEocyk/e3BsdWdpbjpzLHRhZzphLHJ1bklkOmx9OntwbHVnaW46cyx0YWc6YSxleHBlcmltZW50SWRzOml9O3JldHVybiB2b2lkIDAhPT1jJiYoZC5zYW1wbGU9YyksZH0pKS5waXBlKE50KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRUKHtyZXF1ZXN0czpvfSkpfSksaG4obz0+dG4oLi4uby5tYXAoYT0+dGhpcy5mZXRjaFRpbWVTZXJpZXMoYSkpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShrKHhvKSxrKEFlKSxrKFRjKSl9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksRE49bmV3IGllKCJNZXRyaWNzIFN0b3JlIENvbmZpZyIpLElOPW5ldyBpZSgiTWV0cmljcyBJbml0aWFsIFNldHRpbmdzIENvbmZpZyIpO2Z1bmN0aW9uIHJRKG4pe3JldHVybiBuP3tpbml0aWFsU3RhdGU6ey4uLlROLHNldHRpbmdzOm59fTp7aW5pdGlhbFN0YXRlOlROfX12YXIgZ2E9KCgpPT4oZnVuY3Rpb24obil7bltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQiLG5bbi5NSURETEU9NF09Ik1JRERMRSIsbltuLkZPVVJUSD04XT0iRk9VUlRIIixuW24uRklGVEg9MzJdPSJGSUZUSCJ9KGdhfHwoZ2E9e30pKSxnYSkpKCksb1E9MDtmdW5jdGlvbiBGU2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDMpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmV4cGFuZFNpZGViYXIoKSl9KSxQKDEsIm1hdC1pY29uIiw0KSxnKCl9fWZ1bmN0aW9uIE5TZShuLHQpe2lmKDEmbiYmKGgoMCwibmF2Iiw1KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLHp0KDMsMSksZygpKSwyJm4pe2xldCBlPXcoKTtUdCgid2lkdGgiLFcoMSw2LGUud2lkdGgkKSwiJSIpKCJtaW4td2lkdGgiLGUuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYLCJweCIpKCJtYXgtd2lkdGgiLFcoMiw4LGUucnVuc1RhYmxlRnVsbFNjcmVlbiQpPzEwMDoiIiwiJSIpfX1mdW5jdGlvbiBMU2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDYpLEkoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5yZXNpemVHcmFiYmVkKCkpfSksZygpfX12YXIgQlNlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLFZTZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLGFRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdChMaCksdGhpcy53aWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ1MpLnBpcGUoTGkodGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJCksTigoW3Isb10pPT5vPzEwMDpyKSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLnJlc2l6aW5nPSExLHRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPTc1LG1pKGkubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIikucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGtlKCgpPT50aGlzLnJlc2l6aW5nKSkuc3Vic2NyaWJlKHI9PntpZigoci5idXR0b25zJmdhLkxFRlQpIT09Z2EuTEVGVClyZXR1cm4gdm9pZCh0aGlzLnJlc2l6aW5nPSExKTtyLnByZXZlbnREZWZhdWx0KCk7bGV0e3dpZHRoOm99PWkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGtoKHt3aWR0aEluUGVyY2VudDpyLmNsaWVudFg8PXRoaXMuTUlOSU1VTV9TSURFQkFSX1dJRFRIX0lOX1BYPzA6ci5jbGllbnRYL28qMTAwfSkpfSksbWkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZXNpemluZz0hMX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1yZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1leHBhbmRTaWRlYmFyKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChraCh7d2lkdGhJblBlcmNlbnQ6MjB9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoTWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXNoYm9hcmQtbGF5b3V0Il1dLG5nQ29udGVudFNlbGVjdG9yczpWU2UsZGVjbHM6Nyx2YXJzOjksY29uc3RzOltbImNsYXNzIiwiZXhwYW5kIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiwzLCJ3aWR0aCIsIm1pbldpZHRoIiwibWF4V2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oQlNlKSxTKDAsRlNlLDIsMCwiYnV0dG9uIiwwKSxqKDEsImFzeW5jIiksUygyLE5TZSw0LDEwLCJuYXYiLDEpLGooMywiYXN5bmMiKSxTKDQsTFNlLDEsMCwiZGl2IiwyKSxqKDUsImFzeW5jIiksenQoNikpLDImZSYmKF8oIm5nSWYiLDA9PT1XKDEsMyxpLndpZHRoJCkpLHYoMiksXygibmdJZiIsVygzLDUsaS53aWR0aCQpPjApLHYoMiksXygibmdJZiIsVyg1LDcsaS53aWR0aCQpPjApKX0sZGVwZW5kZW5jaWVzOltGZSxFbixjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo4MHZ3fS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXg6MCAwO2p1c3RpZnktc2VsZjpzdHJldGNofWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweDtjdXJzb3I6ZXctcmVzaXplO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6c3RyZXRjaH0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlci1jb2xvcjojY2NjO291dGxpbmU6M3B4IHNvbGlkICNjY2M7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye291dGxpbmUtY29sb3I6Izc3Nztib3JkZXItY29sb3I6Izc3N30uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MCAxcHggMCAwO2NvbG9yOmluaGVyaXQ7Y29udGFpbjpjb250ZW50O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LXNlbGY6c3RyZXRjaDtwYWRkaW5nOjB9LmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQU49bmV3IFdlYWtNYXAseHk9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJvb3Q9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMuZGVzdHJveWVkVGFyZ2V0cz1uZXcgV2Vha1NldH1pbml0aWFsaXplKHQpe2lmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpcmV0dXJuO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2s9dDtsZXQgZT17dGhyZXNob2xkOjAscm9vdDp0aGlzLnJvb3Q/P251bGx9O3RoaXMuYnVmZmVyJiYoZS5yb290TWFyZ2luPXRoaXMuYnVmZmVyKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpLGUpfWFkZCh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0KX13aWxsRGVzdHJveSh0KXt0aGlzLmVuc3VyZUluaXRpYWxpemVkKCkmJnRoaXMuZGVzdHJveWVkVGFyZ2V0cy5hZGQodCl9ZW5zdXJlSW5pdGlhbGl6ZWQoKXtpZighdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcil0aHJvdyBuZXcgRXJyb3IoIkNhcmRPYnNlcnZlciBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UiKTtyZXR1cm4hMH1vbkNhcmRJbnRlcnNlY3Rpb24odCl7dC5zb3J0KChyLG8pPT5yLnRpbWUtby50aW1lKTtsZXQgZT1uZXcgU2V0LGk9bmV3IFNldDtmb3IobGV0e2lzSW50ZXJzZWN0aW5nOnIsdGFyZ2V0Om99b2YgdClyPyhlLmFkZChvKSxpLmRlbGV0ZShvKSk6KGUuZGVsZXRlKG8pLGkuYWRkKG8pKSx0aGlzLmRlc3Ryb3llZFRhcmdldHMuaGFzKG8pJiYhciYmKHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5kZWxldGUobyksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUobykpO3RoaXMuaW50ZXJzZWN0aW9uQ2FsbGJhY2soZSxpKX1vbkNhcmRJbnRlcnNlY3Rpb25Gb3JUZXN0KHQpe3RoaXMub25DYXJkSW50ZXJzZWN0aW9uKHQpfX0sbFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1BTi5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1BTi5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaChWZyh7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0FOLnNldChlLHtlbGVtZW50SWQ6KG9RKyssU3ltYm9sKG9RKSksY2FyZElkOnRoaXMuY2FyZElkfSksdGhpcy5jYXJkT2JzZXJ2ZXJ8fCh0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeHkpLHRoaXMuY2FyZE9ic2VydmVyLmluaXRpYWxpemUodGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24uYmluZCh0aGlzKSksdGhpcy5jYXJkT2JzZXJ2ZXIuYWRkKGUpfW5nT25EZXN0cm95KCl7dGhpcy5jYXJkT2JzZXJ2ZXImJnRoaXMuY2FyZE9ic2VydmVyLndpbGxEZXN0cm95KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KX1ob3N0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmhvc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoQWUpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2FyZExhenlMb2FkZXIiLCIiXV0saW5wdXRzOntjYXJkSWQ6WyJjYXJkTGF6eUxvYWRlciIsImNhcmRJZCJdLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn19KSxufSkoKTtmdW5jdGlvbiBVU2Uobix0KXsxJm4mJihPdCgwKSx6dCgxKSxrdCgpKX12YXIgalNlPVsiKiJdLGNRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhzaSksQyhmbykpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpqU2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksUygwLFVTZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmXygibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltGZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksV1NlPVsiYnV0dG9uIl0scVNlPVsiKiJdLGRRPW5ldyBpZSgiTUFUX0JVVFRPTl9UT0dHTEVfREVGQVVMVF9PUFRJT05TIiksdVE9bmV3IGllKCJNYXRCdXR0b25Ub2dnbGVHcm91cCIpLFlTZT17cHJvdmlkZTpNbyx1c2VFeGlzdGluZzokbigoKT0+Uk4pLG11bHRpOiEwfSxwUT0wLEJUPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSxSTj0oKCk9PntjbGFzcyBue2dldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVJ0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVJ0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1jb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yPWUsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9uYW1lPSJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC0iK3BRKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRix0aGlzLmNoYW5nZT1uZXcgRix0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWw9bmV3IGRnKHRoaXMubXVsdGlwbGUsdm9pZCAwLCExKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy5fYnV0dG9uVG9nZ2xlcy5maWx0ZXIoZT0+ZS5jaGVja2VkKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnZhbHVlPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9X2VtaXRDaGFuZ2VFdmVudChlKXtsZXQgaT1uZXcgQlQoZSx0aGlzLnZhbHVlKTt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKGkudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQoaSl9X3N5bmNCdXR0b25Ub2dnbGUoZSxpLHI9ITEsbz0hMSl7IXRoaXMubXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJiFlLmNoZWNrZWQmJih0aGlzLnNlbGVjdGVkLmNoZWNrZWQ9ITEpLHRoaXMuX3NlbGVjdGlvbk1vZGVsP2k/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGUpOm89ITAsbz9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscikpOnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUoZSxyKX1faXNTZWxlY3RlZChlKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSl9X2lzUHJlY2hlY2tlZChlKXtyZXR1cm4hKHR5cGVvZiB0aGlzLl9yYXdWYWx1ZT4idSIpJiYodGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLl9yYXdWYWx1ZSk/dGhpcy5fcmF3VmFsdWUuc29tZShpPT5udWxsIT1lLnZhbHVlJiZpPT09ZS52YWx1ZSk6ZS52YWx1ZT09PXRoaXMuX3Jhd1ZhbHVlKX1fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKXt0aGlzLl9yYXdWYWx1ZT1lLHRoaXMuX2J1dHRvblRvZ2dsZXMmJih0aGlzLm11bHRpcGxlJiZlPyhBcnJheS5pc0FycmF5KGUpLHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksZS5mb3JFYWNoKGk9PnRoaXMuX3NlbGVjdFZhbHVlKGkpKSk6KHRoaXMuX2NsZWFyU2VsZWN0aW9uKCksdGhpcy5fc2VsZWN0VmFsdWUoZSkpKX1fY2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMuX2J1dHRvblRvZ2dsZXMuZm9yRWFjaChlPT5lLmNoZWNrZWQ9ITEpfV9zZWxlY3RWYWx1ZShlKXtsZXQgaT10aGlzLl9idXR0b25Ub2dnbGVzLmZpbmQocj0+bnVsbCE9ci52YWx1ZSYmci52YWx1ZT09PWUpO2kmJihpLmNoZWNrZWQ9ITAsdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpKX1fdXBkYXRlTW9kZWxWYWx1ZShlLGkpe2kmJnRoaXMuX2VtaXRDaGFuZ2VFdmVudChlKSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSl9X21hcmtCdXR0b25zRm9yQ2hlY2soKXt0aGlzLl9idXR0b25Ub2dnbGVzPy5mb3JFYWNoKGU9PmUuX21hcmtGb3JDaGVjaygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCksQyhkUSw4KSl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJlRpKHIsUVNlLDUpLDImZSl7bGV0IG87U2Uobz1FZSgpKSYmKGkuX2J1dHRvblRvZ2dsZXM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCksbnQoIm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIixpLnZlcnRpY2FsKSgibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09PWkuYXBwZWFyYW5jZSkpfSxpbnB1dHM6e2FwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLG5hbWU6Im5hbWUiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCIsdmFsdWU6InZhbHVlIixtdWx0aXBsZToibXVsdGlwbGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsY2hhbmdlOiJjaGFuZ2UifSxleHBvcnRBczpbIm1hdEJ1dHRvblRvZ2dsZUdyb3VwIl0sZmVhdHVyZXM6W1F0KFtZU2Use3Byb3ZpZGU6dVEsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxYU2U9dXMoY2xhc3N7fSksUVNlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYU2V7Z2V0IGJ1dHRvbklkKCl7cmV0dXJuYCR7dGhpcy5pZH0tYnV0dG9uYH1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuYXBwZWFyYW5jZTp0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe3RoaXMuX2FwcGVhcmFuY2U9ZX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX2lzU2VsZWN0ZWQodGhpcyk6dGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1SdChlKTtpIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9UnQoZSl9Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEY7bGV0IGw9TnVtYmVyKHMpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9YSYmYS5hcHBlYXJhbmNlP2EuYXBwZWFyYW5jZToic3RhbmRhcmQifW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK3BRKyssZSYmKGUuX2lzUHJlY2hlY2tlZCh0aGlzKT90aGlzLmNoZWNrZWQ9ITA6ZS5faXNTZWxlY3RlZCh0aGlzKSE9PXRoaXMuX2NoZWNrZWQmJmUuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLmJ1dHRvblRvZ2dsZUdyb3VwO3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSxlJiZlLl9pc1NlbGVjdGVkKHRoaXMpJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsITEsITEsITApfWZvY3VzKGUpe3RoaXMuX2J1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fb25CdXR0b25DbGljaygpe2xldCBlPSEhdGhpcy5faXNTaW5nbGVTZWxlY3RvcigpfHwhdGhpcy5fY2hlY2tlZDtlIT09dGhpcy5fY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9ZSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYodGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQsITApLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX29uVG91Y2hlZCgpKSksdGhpcy5jaGFuZ2UuZW1pdChuZXcgQlQodGhpcyx0aGlzLnZhbHVlKSl9X21hcmtGb3JDaGVjaygpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRCdXR0b25OYW1lKCl7cmV0dXJuIHRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKT90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm5hbWU6dGhpcy5uYW1lfHxudWxsfV9pc1NpbmdsZVNlbGVjdG9yKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJiF0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLm11bHRpcGxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHVRLDgpLEMoJHQpLEMoTWUpLEMoWHIpLHlvKCJ0YWJpbmRleCIpLEMoZFEsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoV1NlLDUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKEJlKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxudCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbS2VdLG5nQ29udGVudFNlbGVjdG9yczpxU2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKERuKCksaCgwLCJidXR0b24iLDAsMSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGgoMiwic3BhbiIsMiksenQoMyksZygpKCksUCg0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1pdCgxKTtfKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSxCZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHYoNSksXygibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOlttb10sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVlQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZuLEJsLGZuXX0pLG59KSgpLEtTZT1bImRldGVybWluYXRlU3Bpbm5lciJdO2Z1bmN0aW9uIEpTZShuLHQpe2lmKDEmbiYmKE5uKCksaCgwLCJzdmciLDExKSxQKDEsImNpcmNsZSIsMTIpLGcoKSksMiZuKXtsZXQgZT13KCk7QmUoInZpZXdCb3giLGUuX3ZpZXdCb3goKSksdigxKSxUdCgic3Ryb2tlLWRhc2hhcnJheSIsZS5fc3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fc3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLzIsInB4IikoInN0cm9rZS13aWR0aCIsZS5fY2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpLEJlKCJyIixlLl9jaXJjbGVSYWRpdXMoKSl9fXZhciAkU2U9enMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxlMWU9bmV3IGllKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOmZRfX19KSxmUT0xMDAsdGw9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRTZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5tb2RlPSJtYXQtc3Bpbm5lciI9PT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8iaW5kZXRlcm1pbmF0ZSI6ImRldGVybWluYXRlIix0aGlzLl92YWx1ZT0wLHRoaXMuX2RpYW1ldGVyPWZRLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1pJiYhIXImJiFyLl9mb3JjZUFuaW1hdGlvbnMsciYmKHIuY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXIuY29sb3IpLHIuZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPXIuZGlhbWV0ZXIpLHIuc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPXIuc3Ryb2tlV2lkdGgpKX1nZXQgdmFsdWUoKXtyZXR1cm4iZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlP3RoaXMuX3ZhbHVlOjB9c2V0IHZhbHVlKGUpe3RoaXMuX3ZhbHVlPU1hdGgubWF4KDAsTWF0aC5taW4oMTAwLF9pKGUpKSl9Z2V0IGRpYW1ldGVyKCl7cmV0dXJuIHRoaXMuX2RpYW1ldGVyfXNldCBkaWFtZXRlcihlKXt0aGlzLl9kaWFtZXRlcj1faShlKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGg/P3RoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKGUpe3RoaXMuX3N0cm9rZVdpZHRoPV9pKGUpfV9jaXJjbGVSYWRpdXMoKXtyZXR1cm4odGhpcy5kaWFtZXRlci0xMCkvMn1fdmlld0JveCgpe2xldCBlPTIqdGhpcy5fY2lyY2xlUmFkaXVzKCkrdGhpcy5zdHJva2VXaWR0aDtyZXR1cm5gMCAwICR7ZX0gJHtlfWB9X3N0cm9rZUNpcmN1bWZlcmVuY2UoKXtyZXR1cm4gMipNYXRoLlBJKnRoaXMuX2NpcmNsZVJhZGl1cygpfV9zdHJva2VEYXNoT2Zmc2V0KCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl9zdHJva2VDaXJjdW1mZXJlbmNlKCkqKDEwMC10aGlzLl92YWx1ZSkvMTAwOm51bGx9X2NpcmNsZVN0cm9rZVdpZHRoKCl7cmV0dXJuIHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy5kaWFtZXRlcioxMDB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoaGksOCksQyhlMWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShLU2UsNSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5fZGV0ZXJtaW5hdGVDaXJjbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJvZ3Jlc3NiYXIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIiLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3MiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihCZSgiYXJpYS12YWx1ZW1pbiIsMCkoImFyaWEtdmFsdWVtYXgiLDEwMCkoImFyaWEtdmFsdWVub3ciLCJkZXRlcm1pbmF0ZSI9PT1pLm1vZGU/aS52YWx1ZTpudWxsKSgibW9kZSIsaS5tb2RlKSxUdCgid2lkdGgiLGkuZGlhbWV0ZXIsInB4IikoImhlaWdodCIsaS5kaWFtZXRlciwicHgiKSxudCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLGkuX25vb3BBbmltYXRpb25zKSgibWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIiwiaW5kZXRlcm1pbmF0ZSI9PT1pLm1vZGUpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOltLZV0sZGVjbHM6MTQsdmFyczoxMSxjb25zdHM6W1siY2lyY2xlIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZGV0ZXJtaW5hdGUtY29udGFpbmVyIl0sWyJkZXRlcm1pbmF0ZVNwaW5uZXIiLCIiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpYyJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNvbnRhaW5lciJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXIiXSxbMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtY2xpcHBlciIsIm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY2lyY2xlLWxlZnQiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2dhcC1wYXRjaCJdLFsxLCJtZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1jbGlwcGVyIiwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtcmlnaHQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoUygwLEpTZSwyLDgsIm5nLXRlbXBsYXRlIixudWxsLDAsV3QpLGgoMiwiZGl2IiwxLDIpLE5uKCksaCg0LCJzdmciLDMpLFAoNSwiY2lyY2xlIiw0KSxnKCkoKSxPbygpLGgoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksbGkoOSw4KSxnKCksaCgxMCwiZGl2Iiw5KSxsaSgxMSw4KSxnKCksaCgxMiwiZGl2IiwxMCksbGkoMTMsOCksZygpKCkoKSksMiZlKXtsZXQgcj1pdCgxKTt2KDQpLEJlKCJ2aWV3Qm94IixpLl92aWV3Qm94KCkpLHYoMSksVHQoInN0cm9rZS1kYXNoYXJyYXkiLGkuX3N0cm9rZUNpcmN1bWZlcmVuY2UoKSwicHgiKSgic3Ryb2tlLWRhc2hvZmZzZXQiLGkuX3N0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLXdpZHRoIixpLl9jaXJjbGVTdHJva2VXaWR0aCgpLCIlIiksQmUoInIiLGkuX2NpcmNsZVJhZGl1cygpKSx2KDQpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLHIpLHYoMiksXygibmdUZW1wbGF0ZU91dGxldCIsciksdigyKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixyKX19LGRlcGVuZGVuY2llczpbTHJdLHN0eWxlczpbIkBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbnRhaW5lci1yb3RhdGV7dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZXsxMi41JXt0cmFuc2Zvcm06cm90YXRlKDEzNWRlZyl9MjUle3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXt0cmFuc2Zvcm06cm90YXRlKDQwNWRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoNTQwZGVnKX02Mi41JXt0cmFuc2Zvcm06cm90YXRlKDY3NWRlZyl9NzUle3RyYW5zZm9ybTpyb3RhdGUoODEwZGVnKX04Ny41JXt0cmFuc2Zvcm06cm90YXRlKDk0NWRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDEwODBkZWcpfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0xLWZhZGUtaW4tb3V0e2Zyb217b3BhY2l0eTouOTl9MjUle29wYWNpdHk6Ljk5fTI2JXtvcGFjaXR5OjB9ODkle29wYWNpdHk6MH05MCV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTouOTl9fUBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTItZmFkZS1pbi1vdXR7ZnJvbXtvcGFjaXR5OjB9MTUle29wYWNpdHk6MH0yNSV7b3BhY2l0eTouOTl9NTAle29wYWNpdHk6Ljk5fTUxJXtvcGFjaXR5OjB9dG97b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0zLWZhZGUtaW4tb3V0e2Zyb217b3BhY2l0eTowfTQwJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6Ljk5fTc1JXtvcGFjaXR5Oi45OX03NiV7b3BhY2l0eTowfXRve29wYWNpdHk6MH19QGtleWZyYW1lcyBtZGMtY2lyY3VsYXItcHJvZ3Jlc3MtY29sb3ItNC1mYWRlLWluLW91dHtmcm9te29wYWNpdHk6MH02NSV7b3BhY2l0eTowfTc1JXtvcGFjaXR5Oi45OX05MCV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1kYy1jaXJjdWxhci1wcm9ncmVzcy1sZWZ0LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKDI2NWRlZyl9NTAle3RyYW5zZm9ybTpyb3RhdGUoMTMwZGVnKX10b3t0cmFuc2Zvcm06cm90YXRlKDI2NWRlZyl9fUBrZXlmcmFtZXMgbWRjLWNpcmN1bGFyLXByb2dyZXNzLXJpZ2h0LXNwaW57ZnJvbXt0cmFuc2Zvcm06cm90YXRlKC0yNjVkZWcpfTUwJXt0cmFuc2Zvcm06cm90YXRlKC0xMzBkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoLTI2NWRlZyl9fS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3N7ZGlzcGxheTppbmxpbmUtZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXJlY3Rpb246bHRyO2xpbmUtaGVpZ2h0OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDI1MG1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2RldGVybWluYXRlLWNvbnRhaW5lciwubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVyLC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jb250YWluZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVye2ZvbnQtc2l6ZTowO2xldHRlci1zcGFjaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwO29wYWNpdHk6MH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpYywubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2ZpbGw6cmdiYSgwLDAsMCwwKX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGV7dHJhbnNpdGlvbjpzdHJva2UtZGFzaG9mZnNldCA1MDBtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSl9Lm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZ2FwLXBhdGNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6NDcuNSU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjUlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19nYXAtcGF0Y2ggLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tsZWZ0Oi05MDAlO3dpZHRoOjIwMDAlO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jaXJjbGUtY2xpcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjUwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Lm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY2lyY2xlLWNsaXBwZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3t3aWR0aDoyMDAlfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1yaWdodCAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2xlZnQ6LTEwMCV9Lm1kYy1jaXJjdWxhci1wcm9ncmVzcy0taW5kZXRlcm1pbmF0ZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jb250YWluZXJ7b3BhY2l0eTowfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXJ7b3BhY2l0eToxfS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb250YWluZXItcm90YXRlIDE1NjguMjM1Mjk0MTE3Nm1zIGxpbmVhciBpbmZpbml0ZX0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX3NwaW5uZXItbGF5ZXJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItMXthbmltYXRpb246bWRjLWNpcmN1bGFyLXByb2dyZXNzLXNwaW5uZXItbGF5ZXItcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTEtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTJ7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1zcGlubmVyLWxheWVyLXJvdGF0ZSA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RoLG1kYy1jaXJjdWxhci1wcm9ncmVzcy1jb2xvci0yLWZhZGUtaW4tb3V0IDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGh9Lm1kYy1jaXJjdWxhci1wcm9ncmVzcy0taW5kZXRlcm1pbmF0ZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jb2xvci0ze2FuaW1hdGlvbjptZGMtY2lyY3VsYXItcHJvZ3Jlc3Mtc3Bpbm5lci1sYXllci1yb3RhdGUgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aCxtZGMtY2lyY3VsYXItcHJvZ3Jlc3MtY29sb3ItMy1mYWRlLWluLW91dCA1MzMybXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItNHthbmltYXRpb246bWRjLWNpcmN1bGFyLXByb2dyZXNzLXNwaW5uZXItbGF5ZXItcm90YXRlIDUzMzJtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGluZmluaXRlIGJvdGgsbWRjLWNpcmN1bGFyLXByb2dyZXNzLWNvbG9yLTQtZmFkZS1pbi1vdXQgNTMzMm1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1sZWZ0IC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY2lyY2xlLWdyYXBoaWN7YW5pbWF0aW9uOm1kYy1jaXJjdWxhci1wcm9ncmVzcy1sZWZ0LXNwaW4gMTMzM21zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkgaW5maW5pdGUgYm90aH0ubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1pbmRldGVybWluYXRlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NpcmNsZS1yaWdodCAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje2FuaW1hdGlvbjptZGMtY2lyY3VsYXItcHJvZ3Jlc3MtcmlnaHQtc3BpbiAxMzMzbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSBpbmZpbml0ZSBib3RofS5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWNsb3NlZHtvcGFjaXR5OjB9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtsaW5lLWhlaWdodDowfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fZGV0ZXJtaW5hdGUtY2lyY2xlLC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6dmFyKC0tbWRjLWNpcmN1bGFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3IsIHRyYW5zcGFyZW50KX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGUsLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje3N0cm9rZTpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1mb3VyLWNvbG9yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTEgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6Q2FudmFzVGV4dH19QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpey5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIgLm1kYy1jaXJjdWxhci1wcm9ncmVzcy0tZm91ci1jb2xvciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19jb2xvci0yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY2lyY2xlLWdyYXBoaWN7c3Ryb2tlOkNhbnZhc1RleHR9fUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXsubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtLWZvdXItY29sb3IgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fY29sb3ItMyAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGlje3N0cm9rZTpDYW52YXNUZXh0fX1AbWVkaWEgc2NyZWVuIGFuZCAoZm9yY2VkLWNvbG9yczogYWN0aXZlKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzLS1mb3VyLWNvbG9yIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2NvbG9yLTQgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jaXJjbGUtZ3JhcGhpY3tzdHJva2U6Q2FudmFzVGV4dH19Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSwubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2RldGVybWluYXRlLWNpcmNsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19fc3Bpbm5lci1sYXllciwubWF0LW1kYy1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tZGMtY2lyY3VsYXItcHJvZ3Jlc3NfX2luZGV0ZXJtaW5hdGUtY29udGFpbmVye2FuaW1hdGlvbjpub25lfS5tYXQtbWRjLXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1kYy1jaXJjdWxhci1wcm9ncmVzc19faW5kZXRlcm1pbmF0ZS1jb250YWluZXIgY2lyY2xle3N0cm9rZS1kYXNoYXJyYXk6MCAhaW1wb3J0YW50fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19pbmRldGVybWluYXRlLWNpcmNsZS1ncmFwaGljLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZGMtcHJvZ3Jlc3Mtc3Bpbm5lciAubWRjLWNpcmN1bGFyLXByb2dyZXNzX19kZXRlcm1pbmF0ZS1jaXJjbGV7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2U6Q2FudmFzVGV4dH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxubD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZm5dfSksbn0pKCk7ZnVuY3Rpb24gaTFlKG4sdCl7aWYoMSZuJiYoaCgwLCJiIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLEhlKCIiLGUuZGlzcGxheUFsaWFzLCI6Iil9fWZ1bmN0aW9uIHIxZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LW9wdGlvbiIsMikoMSwic3BhbiIsMyksUygyLGkxZSwyLDEsImIiLDQpLFQoMyksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygidmFsdWUiLGUudmFsdWUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCksdigxKSxVTSgidGl0bGUiLCIiLGUuZGlzcGxheUFsaWFzLCI6ICIsZS5kaXNwbGF5VGV4dCwiIiksdigxKSxfKCJuZ0lmIixlLmRpc3BsYXlBbGlhcyksdigxKSxIZSgiICIsZS5kaXNwbGF5VGV4dCwiICIpfX12YXIgbVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBGfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidmFsdWUiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIl0sWzEsIm9wdGlvbi1jb250ZW50IiwzLCJ0aXRsZSJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtYXQtc2VsZWN0IiwwKSxJKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG8udmFsdWUpfSksUygxLHIxZSw0LDYsIm1hdC1vcHRpb24iLDEpLGcoKSksMiZlJiYoXygidmFsdWUiLGkudmFsdWUpKCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwhMCksdigxKSxfKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltubixGZSx6dSxVc10sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDpub3JtYWx9bWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtbWRjLXNlbGVjdC1hcnJvdy13cmFwcGVye2hlaWdodDoxMnB4fW1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0b30gIC5tYXQtbWRjLXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW1kYy1vcHRpb257bWluLWhlaWdodDozMnB4O2ZvbnQtc2l6ZToxMnB4fSJdfSksbn0pKCksczFlPWZ1bmN0aW9uKG4pe3JldHVybnsiY29sdW1uLWVkaXQtbWVudS10b2dnbGUiOiEwLCJ0b2dnbGUtb3BlbmVkIjpufX07ZnVuY3Rpb24gYTFlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwzMSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25TbGlkZU91dFRvZ2dsZWQuZW1pdCgpKX0pLFAoMSwibWF0LWljb24iLDMyKSxUKDIsIiBFZGl0IFRhYmxlIENvbHVtbnMgIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oIm5nQ2xhc3MiLEluKDEsczFlLGUuaXNTbGlkZU91dE1lbnVPcGVuKSl9fWZ1bmN0aW9uIGwxZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNlY3Rpb24iLDMzKSgxLCJoMyIsMSksVCgyLCJJbWFnZXMiKSxnKCksaCgzLCJkaXYiLDM0KSg0LCJkaXYiLDM1KSxUKDUsIkJyaWdodG5lc3MiKSxnKCksaCg2LCJkaXYiLDEzKSg3LCJtYXQtc2xpZGVyIiwzNiksSSgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLmVtaXQoci52YWx1ZSkpfSksZygpLGgoOCwiYnV0dG9uIiwzNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VCcmlnaHRuZXNzUmVzZXQuZW1pdCgpKX0pLFAoOSwibWF0LWljb24iLDE2KSxnKCkoKSgpLGgoMTAsImRpdiIsMzgpKDExLCJkaXYiLDM5KSxUKDEyLCJDb250cmFzdCIpLGcoKSxoKDEzLCJkaXYiLDEzKSgxNCwibWF0LXNsaWRlciIsNDApLEkoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSxnKCksaCgxNSwiYnV0dG9uIiw0MSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VDb250cmFzdFJlc2V0LmVtaXQoKSl9KSxQKDE2LCJtYXQtaWNvbiIsMTYpLGcoKSgpKCksaCgxNywiZGl2Iiw0MikoMTgsIm1hdC1jaGVja2JveCIsMjUpLEkoImNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLFQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoNyksXygibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHYoNyksXygibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSx2KDQpLF8oImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBnUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMubG9jYWxlPWUsdGhpcy5saW5rZWRUaW1lVG9nZ2xlZD1uZXcgRix0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEYsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEYsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgRix0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6b28uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6b28uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6b28uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTpvby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOm9vLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBGLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBGLHRoaXMuWEF4aXNUeXBlPVBpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6UGkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpQaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6UGkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgRix0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEYsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZShzYygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBGLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOkRyLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOkRyLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgRix0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgRix0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZShzYygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBGLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEYsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoc2MoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgRix0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgRix0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKHNjKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBGLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEZ9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuICRPKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVBpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoY2QpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVFbmFibGVkOiJpc0xpbmtlZFRpbWVFbmFibGVkIixpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwTWluTWF4OiJzdGVwTWluTWF4Iixpc1NsaWRlT3V0TWVudU9wZW46ImlzU2xpZGVPdXRNZW51T3BlbiIsaXNJbWFnZVN1cHBvcnRFbmFibGVkOiJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLHRvb2x0aXBTb3J0OiJ0b29sdGlwU29ydCIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIix4QXhpc1R5cGU6InhBeGlzVHlwZSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGhpc3RvZ3JhbU1vZGU6Imhpc3RvZ3JhbU1vZGUiLHNjYWxhclNtb290aGluZzoic2NhbGFyU21vb3RoaW5nIixzY2FsYXJQYXJ0aXRpb25YOiJzY2FsYXJQYXJ0aXRpb25YIixpbWFnZUJyaWdodG5lc3NJbk1pbGxpOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixpbWFnZUNvbnRyYXN0SW5NaWxsaToiaW1hZ2VDb250cmFzdEluTWlsbGkiLGltYWdlU2hvd0FjdHVhbFNpemU6ImltYWdlU2hvd0FjdHVhbFNpemUifSxvdXRwdXRzOntsaW5rZWRUaW1lVG9nZ2xlZDoibGlua2VkVGltZVRvZ2dsZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NTQsdmFyczozMCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtc3RlcC1zZWxlY3RvciIsMywidGl0bGUiXSxbMywiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hhbmdlIl0sWzEsImluZGVudCJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFsxLCJpbWFnZSJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLWJyaWdodG5lc3MiXSxbImlkIiwiaW1hZ2UtYnJpZ2h0bmVzcy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJSZXNldCBicmlnaHRuZXNzIiwxLCJyZXNldC1idXR0b24iLDMsImNsaWNrIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtY29udHJhc3QiXSxbImlkIiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWNvbnN0cmFzdC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImRpc3BsYXlXaXRoIiwiaW5wdXQiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiUmVzZXQgY29udHJhc3QiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1zaG93LWFjdHVhbC1zaXplIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwic2VjdGlvbiIsMCkoMSwiaDMiLDEpLFQoMiwiR2VuZXJhbCIpLGcoKSxoKDMsImRpdiIsMikoNCwiZGl2IiwzKSxUKDUsIkhvcml6b250YWwgQXhpcyIpLGcoKSxoKDYsInRiLWRyb3Bkb3duIiw0KSxJKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnhBeGlzVHlwZUNoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGgoNywiZGl2Iiw1KSg4LCJtYXQtY2hlY2tib3giLDYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5zdGVwU2VsZWN0b3JUb2dnbGVkLmVtaXQoKX0pLFQoOSwiRW5hYmxlIHN0ZXAgc2VsZWN0aW9uIGFuZCBkYXRhIHRhYmxlICIpLGcoKSxoKDEwLCJzcGFuIiw3KSxUKDExLCIoU2NhbGFycyBvbmx5KSIpLGcoKSxoKDEyLCJkaXYiLDgpKDEzLCJtYXQtY2hlY2tib3giLDYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yYW5nZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksVCgxNCwiRW5hYmxlIFJhbmdlIFNlbGVjdGlvbiAiKSxnKCkoKSxoKDE1LCJkaXYiLDkpKDE2LCJtYXQtY2hlY2tib3giLDYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCl9KSxUKDE3KSxnKCkoKSxTKDE4LGExZSwzLDMsImJ1dHRvbiIsMTApLGcoKSxoKDE5LCJkaXYiLDExKSgyMCwiZGl2IiwxMiksVCgyMSwiQ2FyZCBXaWR0aCIpLGcoKSxoKDIyLCJkaXYiLDEzKSgyMywibWF0LXNsaWRlciIsMTQpLEkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5jYXJkV2lkdGhTbGlkZXJDaGFuZ2VkJC5lbWl0KG8udmFsdWUpfSksZygpLGgoMjQsImJ1dHRvbiIsMTUpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNhcmRXaWR0aFJlc2V0LmVtaXQoKX0pLFAoMjUsIm1hdC1pY29uIiwxNiksZygpKCkoKSgpLGgoMjYsInNlY3Rpb24iLDE3KSgyNywiaDMiLDEpLFQoMjgsIlNjYWxhcnMiKSxnKCksaCgyOSwiZGl2IiwxOCkoMzAsImRpdiIsMTkpLFQoMzEsIlNtb290aGluZyIpLGcoKSxoKDMyLCJkaXYiLDEzKSgzMywibWF0LXNsaWRlciIsMjApLEkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLGcoKSxoKDM0LCJpbnB1dCIsMjEpLEkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksZygpKCkoKSxoKDM1LCJkaXYiLDIyKSgzNiwiZGl2IiwyMyksVCgzNywiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLGcoKSxoKDM4LCJ0Yi1kcm9wZG93biIsNCksSSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLGcoKSgpLGgoMzksImRpdiIsMjQpKDQwLCJtYXQtY2hlY2tib3giLDI1KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxUKDQxLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLGcoKSgpLGgoNDIsImRpdiIsMjYpKDQzLCJtYXQtY2hlY2tib3giLDI1KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksVCg0NCwiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksZygpLFAoNDUsIm1hdC1pY29uIiwyNyksZygpKCksaCg0Niwic2VjdGlvbiIsMjgpKDQ3LCJoMyIsMSksVCg0OCwiSGlzdG9ncmFtcyIpLGcoKSxoKDQ5LCJkaXYiLDI5KSg1MCwiZGl2IiwyMyksVCg1MSwiTW9kZSIpLGcoKSxoKDUyLCJ0Yi1kcm9wZG93biIsNCksSSgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksZygpKCkoKSxTKDUzLGwxZSwyMCwxMywic2VjdGlvbiIsMzApKSwyJmUmJih2KDYpLF8oInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx2KDEpLF8oInRpdGxlIixpLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIiksdigxKSxfKCJjaGVja2VkIixpLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhaS5pc0F4aXNUeXBlU3RlcCgpKSx2KDUpLF8oImNoZWNrZWQiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksdigzKSxfKCJjaGVja2VkIixpLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWkuaXNBeGlzVHlwZVN0ZXAoKSksdigxKSxIZSgiTGluayBieSBzdGVwICIsaS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKSx2KDEpLF8oIm5nSWYiLGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksdig1KSxfKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLHYoMTApLF8oIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSx2KDEpLF8oIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx2KDQpLF8oInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucyksdigyKSxfKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx2KDMpLF8oImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCksdig5KSxfKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx2KDEpLF8oIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsbVEsSmksJGksaGEsRW4sRGRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTJweH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luOjAgMCAxMnB4IDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2VjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoICsgLmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSA+IG1hdC1jaGVja2JveCkpW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1ib3R0b206MTJweH0uY29udHJvbC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjhweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAucmVzZXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo2cHh9LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDoxMnB4O3BhZGRpbmc6MCA0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNDI1MDY2fS5zY2FsYXJzLXNtb290aGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7d2lkdGg6NWVtfS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5zY2FsYXJzLXBhcnRpdGlvbi14W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTVweDttYXJnaW4tbGVmdDo1cHg7d2lkdGg6MTVweDttaW4td2lkdGg6MTVweH1tYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0Oi0xMXB4fW1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3BhZGRpbmctbGVmdDowcHg7d2hpdGUtc3BhY2U6bm93cmFwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tYXQtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjI4cHg7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjEycHh9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLm1hdC1idXR0b24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VlZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9LmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NnB4fXRiLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfS5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuaW5kZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoyOHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksX1E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHh2KSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChTdSksdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdCh3dSksdGhpcy5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChkUyksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChYRiksdGhpcy5zdGVwTWluTWF4JD10aGlzLnN0b3JlLnNlbGVjdChZRiksdGhpcy5pc1NsaWRlT3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KGwxKSx0aGlzLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodnUpLnBpcGUoa2UoQm9vbGVhbiksWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoY1MpKSxOKChbLGldKT0+aSkpLHRoaXMudG9vbHRpcFNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KGhmKSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChnZiksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9sKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoWGgpLHRoaXMuaGlzdG9ncmFtTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QodDEpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChiZCksdGhpcy5zY2FsYXJQYXJ0aXRpb25YJD10aGlzLnN0b3JlLnNlbGVjdChuMSksdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChpMSksdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocjEpLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QobzEpfW9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobVQoe3NvcnQ6ZX0pKX1vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaFQoKSl9b25YQXhpc1R5cGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Qoe3hBeGlzVHlwZTplfSkpfW9uQ2FyZFdpZHRoQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9UKHtjYXJkTWluV2lkdGg6ZX0pKX1vbkNhcmRXaWR0aFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChiVCgpKX1vbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVQoe2hpc3RvZ3JhbU1vZGU6ZX0pKX1vblNjYWxhclNtb290aGluZ0NoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2VCh7c21vb3RoaW5nOmV9KSl9b25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goeVQoKSl9b25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHhUKHticmlnaHRuZXNzSW5NaWxsaTplfSkpfW9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1UKCkpfW9uSW1hZ2VDb250cmFzdFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3VCgpKX1vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKENUKHtjb250cmFzdEluTWlsbGk6ZX0pKX1vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChTVCgpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChGVCh7YWZmb3JkYW5jZTpZcy5DSEVDS19CT1h9KSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChJZCh7YWZmb3JkYW5jZTpZcy5DSEVDS19CT1h9KSl9b25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE5UKHthZmZvcmRhbmNlOllzLkNIRUNLX0JPWH0pKX1vblNsaWRlT3V0VG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc1QoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoxOSx2YXJzOjU0LGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsImlzTGlua2VkVGltZUVuYWJsZWQiLCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsInN0ZXBNaW5NYXgiLCJpc1NsaWRlT3V0TWVudU9wZW4iLCJ0b29sdGlwU29ydENoYW5nZWQiLCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLCJ4QXhpc1R5cGVDaGFuZ2VkIiwiY2FyZFdpZHRoQ2hhbmdlZCIsImNhcmRXaWR0aFJlc2V0IiwiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIiwic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsImltYWdlQnJpZ2h0bmVzc1Jlc2V0IiwiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIiwiaW1hZ2VDb250cmFzdFJlc2V0IiwiaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQiLCJsaW5rZWRUaW1lVG9nZ2xlZCIsInN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLCJvblNsaWRlT3V0VG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50IiwwKSxJKCJ0b29sdGlwU29ydENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVG9vbHRpcFNvcnRDaGFuZ2VkKG8pfSkoImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpfSkoInhBeGlzVHlwZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uWEF4aXNUeXBlQ2hhbmdlZChvKX0pKCJjYXJkV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNhcmRXaWR0aENoYW5nZWQobyl9KSgiY2FyZFdpZHRoUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25DYXJkV2lkdGhSZXNldCgpfSkoImhpc3RvZ3JhbU1vZGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKG8pfSkoInNjYWxhclNtb290aGluZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZChvKX0pKCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl9KSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQobyl9KSgiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZUJyaWdodG5lc3NSZXNldCgpfSkoImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25JbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQobyl9KSgiaW1hZ2VDb250cmFzdFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdFJlc2V0KCl9KSgiaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCgpfSkoImxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uTGlua2VkVGltZVRvZ2dsZWQoKX0pKCJzdGVwU2VsZWN0b3JUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCgpfSkoInJhbmdlU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJhbmdlU2VsZWN0aW9uVG9nZ2xlZCgpfSkoIm9uU2xpZGVPdXRUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2xpZGVPdXRUb2dnbGVkKCl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLGooMTcsImFzeW5jIiksaigxOCwiYXN5bmMiKSxnKCkpLDImZSYmXygiaXNJbWFnZVN1cHBvcnRFbmFibGVkIixXKDEsMTgsaS5pc0ltYWdlU3VwcG9ydEVuYWJsZWQkKSkoInRvb2x0aXBTb3J0IixXKDIsMjAsaS50b29sdGlwU29ydCQpKSgiaWdub3JlT3V0bGllcnMiLFcoMywyMixpLmlnbm9yZU91dGxpZXJzJCkpKCJ4QXhpc1R5cGUiLFcoNCwyNCxpLnhBeGlzVHlwZSQpKSgiY2FyZE1pbldpZHRoIixXKDUsMjYsaS5jYXJkTWluV2lkdGgkKSkoImhpc3RvZ3JhbU1vZGUiLFcoNiwyOCxpLmhpc3RvZ3JhbU1vZGUkKSkoInNjYWxhclNtb290aGluZyIsVyg3LDMwLGkuc2NhbGFyU21vb3RoaW5nJCkpKCJzY2FsYXJQYXJ0aXRpb25YIixXKDgsMzIsaS5zY2FsYXJQYXJ0aXRpb25YJCkpKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIixXKDksMzQsaS5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJCkpKCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsVygxMCwzNixpLmltYWdlQ29udHJhc3RJbk1pbGxpJCkpKCJpbWFnZVNob3dBY3R1YWxTaXplIixXKDExLDM4LGkuaW1hZ2VTaG93QWN0dWFsU2l6ZSQpKSgiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixXKDEyLDQwLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsVygxMyw0MixpLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJCkpKCJpc0xpbmtlZFRpbWVFbmFibGVkIixXKDE0LDQ0LGkuaXNMaW5rZWRUaW1lRW5hYmxlZCQpKSgiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsVygxNSw0NixpLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTYsNDgsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwTWluTWF4IixXKDE3LDUwLGkuc3RlcE1pbk1heCQpKSgiaXNTbGlkZU91dE1lbnVPcGVuIixXKDE4LDUyLGkuaXNTbGlkZU91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W2dRLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1yaWdodC1wYW5lIl1dLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzIil9LGRlcGVuZGVuY2llczpbX1FdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGgxZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gZzFlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBfMWUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIGIxZShuLHQpezEmbiYmUCgwLCJkaXYiLDUpfXZhciB6VD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5Db2x1bW5IZWFkZXJUeXBlPWh0fWdldFNwZWNpYWxUeXBlQ2xhc3NlcyhlKXtzd2l0Y2goZSl7Y2FzZSBodC5TVEVQX0FUX01JTjpyZXR1cm4ic3RlcC1hdC1taW4iO2Nhc2UgaHQuU1RFUF9BVF9NQVg6cmV0dXJuInN0ZXAtYXQtbWF4IjtkZWZhdWx0OnJldHVybiIifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1oZWFkZXIiXV0saW5wdXRzOntoZWFkZXI6ImhlYWRlciJ9LGRlY2xzOjcsdmFyczo2LGNvbnN0czpbWzEsImhlYWRlci1jb250YWluZXIiLDMsIm5nU3dpdGNoIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFszLCJuZ0NsYXNzIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCJdLFsxLCJleHRyYS1yaWdodC1wYWRkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApLFMoMSxoMWUsMSwwLCJtYXQtaWNvbiIsMSksUygyLGcxZSwxLDAsIm1hdC1pY29uIiwxKSxTKDMsXzFlLDEsMCwibWF0LWljb24iLDEpLFMoNCxiMWUsMSwwLCJkaXYiLDIpLGgoNSwic3BhbiIsMyksVCg2KSxnKCkoKSksMiZlJiYoXygibmdTd2l0Y2giLGkuaGVhZGVyLnR5cGUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuVkFMVUVfQ0hBTkdFKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlBFUkNFTlRBR0VfQ0hBTkdFKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlJBV19DSEFOR0UpLHYoMiksXygibmdDbGFzcyIsaS5nZXRTcGVjaWFsVHlwZUNsYXNzZXMoaS5oZWFkZXIudHlwZSkpLHYoMSksYnQoaS5oZWFkZXIuZGlzcGxheU5hbWUpKX0sZGVwZW5kZW5jaWVzOlt5bixzcixTcix1dSxFbl0sc3R5bGVzOlsiLmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjEycHh9LnN0ZXAtYXQtbWluW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MzdweH0uc3RlcC1hdC1tYXhbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo0MHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdjFlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw4KSxJKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5kcmFnU3RhcnQobykpfSkoImRyYWdlbmQiLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gUSh3KCkuZHJhZ0VuZChyKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0LHM9dygpLmRhdGFUYWJsZU1vZGU7cmV0dXJuIFEodygpLmRyYWdFbnRlcihvLHMpKX0pLGgoMSwibWF0LWNoZWNrYm94Iiw5KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQscz13KCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gUSh3KCkudG9nZ2xlSGVhZGVyKG8scykpfSksUCgyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTApLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygibmdDbGFzcyIsdygyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx2KDEpLF8oImNoZWNrZWQiLGUuZW5hYmxlZCksdigxKSxfKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiB5MWUobix0KXsxJm4mJlMoMCx2MWUsMywzLCJkaXYiLDcpLDImbiYmXygibmdGb3JPZiIsdC5oZWFkZXJzKX12YXIgeVE9ZnVuY3Rpb24obix0KXtyZXR1cm57aGVhZGVyczpuLGRhdGFUYWJsZU1vZGU6dH19LFBOPW49PntuLnByZXZlbnREZWZhdWx0KCl9LHgxZT0obix0LGUpPT57bGV0IGk9Wy4uLmVdO3JldHVybiBpLnNwbGljZShuLDEpLGkuc3BsaWNlKHQsMCxlW25dKSxpfSxVVD0obix0KT0+dC5maW5kSW5kZXgoZT0+ZS5uYW1lPT09bi5uYW1lKSxYdT0oKCk9PihmdW5jdGlvbihuKXtuW24uVE9QPTBdPSJUT1AiLG5bbi5CT1RUT009MV09IkJPVFRPTSJ9KFh1fHwoWHU9e30pKSxYdSkpKCkseFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5EYXRhVGFibGVNb2RlPXJvLHRoaXMuaGlnaGxpZ2h0RWRnZT1YdS5UT1AsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdD1uZXcgRix0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBGLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZD1uZXcgRix0aGlzLm9uVGFiQ2hhbmdlPW5ldyBGfW5nT25EZXN0cm95KCl7dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixQTil9dGFiQ2hhbmdlKGUpe3RoaXMub25UYWJDaGFuZ2UuZW1pdCgwPT09ZS5pbmRleD9yby5TSU5HTEU6cm8uUkFOR0UpfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyPWUsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixQTil9ZHJhZ0VuZChlKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlcnx8IXRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXIpcmV0dXJuO2xldCBpPXRoaXMuZ2V0SGVhZGVyc0Zvck1vZGUoZSk7dGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdC5lbWl0KHtkYXRhVGFibGVNb2RlOmUsaGVhZGVyczp4MWUoVVQodGhpcy5kcmFnZ2luZ0hlYWRlcixpKSxVVCh0aGlzLmhpZ2hsaWdodGVkSGVhZGVyLGkpLGkpfSksdGhpcy5kcmFnZ2luZ0hlYWRlcj12b2lkIDAsdGhpcy5oaWdobGlnaHRlZEhlYWRlcj12b2lkIDAsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixQTil9ZHJhZ0VudGVyKGUsaSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXIpcmV0dXJuO2xldCByPXRoaXMuZ2V0SGVhZGVyc0Zvck1vZGUoaSk7dGhpcy5oaWdobGlnaHRFZGdlPVVUKGUscik8VVQodGhpcy5kcmFnZ2luZ0hlYWRlcixyKT9YdS5UT1A6WHUuQk9UVE9NLHRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXI9ZX10b2dnbGVIZWFkZXIoZSxpKXt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkLmVtaXQoe2RhdGFUYWJsZU1vZGU6aSxoZWFkZXI6ZX0pfWdldEhpZ2hsaWdodENsYXNzZXMoZSl7cmV0dXJuIGUubmFtZSE9PXRoaXMuaGlnaGxpZ2h0ZWRIZWFkZXI/Lm5hbWU/e306e2hpZ2hsaWdodGVkOiEwLCJoaWdobGlnaHQtdG9wIjp0aGlzLmhpZ2hsaWdodEVkZ2U9PT1YdS5UT1AsImhpZ2hsaWdodC1ib3R0b20iOnRoaXMuaGlnaGxpZ2h0RWRnZT09PVh1LkJPVFRPTX19Z2V0U2VsZWN0ZWRUYWJJbmRleCgpe3JldHVybiB0aGlzLnNlbGVjdGVkVGFiPT09cm8uU0lOR0xFPzA6MX1nZXRIZWFkZXJzRm9yTW9kZShlKXtyZXR1cm4gZT09PXJvLlNJTkdMRT90aGlzLnNpbmdsZUhlYWRlcnM6dGhpcy5yYW5nZUhlYWRlcnN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e3JhbmdlSGVhZGVyczoicmFuZ2VIZWFkZXJzIixzaW5nbGVIZWFkZXJzOiJzaW5nbGVIZWFkZXJzIixzZWxlY3RlZFRhYjoic2VsZWN0ZWRUYWIifSxvdXRwdXRzOntvblNjYWxhclRhYmxlQ29sdW1uRWRpdDoib25TY2FsYXJUYWJsZUNvbHVtbkVkaXQiLG9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkOiJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsb25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZDoib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsb25UYWJDaGFuZ2U6Im9uVGFiQ2hhbmdlIn0sZGVjbHM6MTEsdmFyczoxMyxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBjb2x1bW4gZWRpdG9yLuKQn2NiNjE2Y2U5YjQzMjdiNDFlNmJkYjkzNDQ2NjliYTdjNzJlMmM3MGXikJ83MjA1NjM1NzY0NzEzMDM0ODQyOkNsb3NlIGNvbHVtbiBlZGl0b3JgLFtbMSwiZWRpdG9yLWNvbnRyb2xzIl0sWzEsInRhYi1ncm91cCIsMywic2VsZWN0ZWRJbmRleCIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sWzMsImxhYmVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJmb290ZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsImNsb3NlLWJ1dHRvbiIsMywiY2xpY2siXSxbImhlYWRlckxpc3QiLCIiXSxbImNsYXNzIiwiaGVhZGVyLWxpc3QtaXRlbSIsImRyYWdnYWJsZSIsInRydWUiLDMsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImRyYWdnYWJsZSIsInRydWUiLDEsImhlYWRlci1saXN0LWl0ZW0iLDMsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMywiaGVhZGVyIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJtYXQtdGFiLWdyb3VwIiwxKSxJKCJzZWxlY3RlZFRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkudGFiQ2hhbmdlKG8pfSksaCgyLCJtYXQtdGFiIiwyKSxQKDMsIm5nQ29udGV4dCIsMyksZygpLGgoNCwibWF0LXRhYiIsMiksUCg1LCJuZ0NvbnRleHQiLDMpLGcoKSgpKCksaCg2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZC5lbWl0KCl9KSxUKDgsIiBDbG9zZSAiKSxnKCkoKSxTKDkseTFlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsNixXdCkpLDImZSl7bGV0IHI9aXQoMTApO3YoMSksXygic2VsZWN0ZWRJbmRleCIsaS5nZXRTZWxlY3RlZFRhYkluZGV4KCkpLHYoMSksXygibGFiZWwiLCJTaW5nbGUiKSx2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLHIpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIscXIoNyx5USxpLnNpbmdsZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlNJTkdMRSkpLHYoMSksXygibGFiZWwiLCJSYW5nZSIpLHYoMSksXygibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixxcigxMCx5USxpLnJhbmdlSGVhZGVycyxpLkRhdGFUYWJsZU1vZGUuUkFOR0UpKX19LGRlcGVuZGVuY2llczpbeW4sbm4sTHIselQsaGEsc3ksYkUsSmldLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtdGFiLWxhYmVse21pbi13aWR0aDowO3BhZGRpbmc6MCAzMHB4fS5lZGl0b3ItY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMCUgLSA0NXB4KX0udGFiLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjA7aGVpZ2h0OjEwMCV9LmhlYWRlci1saXN0LWl0ZW1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4O2hlaWdodDoyNHB4fS5oaWdobGlnaHRlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5oaWdobGlnaHQtYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZmY5ODAwfS5oaWdobGlnaHQtdG9wW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjJweCBzb2xpZCAjZmY5ODAwfS5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjRweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NX0uY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3dpZHRoOjg0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntmbGV4OjF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxDUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNpbmdsZUhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KEN2KSx0aGlzLnJhbmdlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoTXYpLHRoaXMuc2VsZWN0ZWRUYWIkPXRoaXMuc3RvcmUuc2VsZWN0KFNXKX1vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFVnKGUpKX1vblNjYWxhclRhYmxlQ29sdW1uRWRpdChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHpnKGUpKX1vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChjVCgpKX1vblRhYkNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxUKHt0YWI6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywic2luZ2xlSGVhZGVycyIsInJhbmdlSGVhZGVycyIsInNlbGVjdGVkVGFiIiwib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQiLCJvblRhYkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvci1jb21wb25lbnQiLDApLEkoIm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY2FsYXJUYWJsZUNvbHVtbkVkaXQobyl9KSgib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkKCl9KSgib25UYWJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGFiQ2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksZygpKSwyJmUmJl8oInNpbmdsZUhlYWRlcnMiLFcoMSwzLGkuc2luZ2xlSGVhZGVycyQpKSgicmFuZ2VIZWFkZXJzIixXKDIsNSxpLnJhbmdlSGVhZGVycyQpKSgic2VsZWN0ZWRUYWIiLFcoMyw3LGkuc2VsZWN0ZWRUYWIkKSl9LGRlcGVuZGVuY2llczpbeFEsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFdnPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oV2d8fChXZz17fSkpLFdnKSkoKSx3MWU9cShfVyxJdSwobix0KT0+bmV3IFNldChPYmplY3QuZW50cmllcyhuLnNjYWxhcnMudGFnVG9SdW5zKS5maWx0ZXIoKFssZV0pPT4hdHx8IXQuc2l6ZXx8ZS5zb21lKGk9PnQ/LmdldChpKSkpLm1hcCgoW2VdKT0+ZSkpKSxTMWU9cShlMSxJdSx3Vyx3MWUsKG4sdCxlLGkpPT57bGV0IHI9QXJyYXkuZnJvbSh0Py52YWx1ZXMoKXx8W10pLnNvbWUoQm9vbGVhbik7cmV0dXJuIG4uZmlsdGVyKG89PnBhKG8ucGx1Z2luKT9Cb29sZWFuKHQmJnQuZ2V0KG8ucnVuSWQpKTohZXx8IXJ8fG8ucGx1Z2luIT09em4uU0NBTEFSU3x8aS5oYXMoby50YWcpKX0pLE5mPXEoUzFlLG49Pm4uc29ydCgodCxlKT0+eXkodC50YWcsZS50YWcpKSksalQ9e2ZpbHRlclJ1bkl0ZW1zQnlSZWdleDoobix0LGUpPT50P24uZmlsdGVyKGk9PlFoKHtydW5OYW1lOmkucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOmkuZXhwZXJpbWVudEFsaWFzfSx0LGUpKTpuLG1hdGNoRmlsdGVyOihuLHQpPT52b2lkIDA9PT10P24uaW5jbHVkZVVuZGVmaW5lZDpuLnR5cGU9PT1nbi5ESVNDUkVURT9uLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KTpuLnR5cGU9PT1nbi5JTlRFUlZBTCYmIm51bWJlciI9PXR5cGVvZiB0JiZuLmZpbHRlckxvd2VyVmFsdWU8PXQmJnQ8PW4uZmlsdGVyVXBwZXJWYWx1ZSxmaWx0ZXJSdW5JdGVtc0J5SHBhcmFtQW5kTWV0cmljRmlsdGVyOihuLHQsZSk9Pm4uZmlsdGVyKCh7aHBhcmFtczppLG1ldHJpY3M6cn0pPT57bGV0IG89Wy4uLnQuZW50cmllcygpXS5ldmVyeSgoW2EsbF0pPT57bGV0IGM9aS5nZXQoYSk7cmV0dXJuIGpULm1hdGNoRmlsdGVyKGwsYyl9KSxzPVsuLi5lLmVudHJpZXMoKV0uZXZlcnkoKFthLGxdKT0+e2xldCBjPXIuZ2V0KGEpO3JldHVybiBqVC5tYXRjaEZpbHRlcihsLGMpfSk7cmV0dXJuIG8mJnN9KX0sTVE9cShLRixtMSxoMSwobix0LGUpPT5uZXcgTWFwKFsuLi5uLC4uLnQsLi4uZV0pKSxFMWU9cShiMSxXNixJdSxBdSx6YSwobix0LGUsaSxyKT0+bi5tYXAobz0+e2xldCBzPW5ldyBNYXA7KG8uaHBhcmFtc3x8W10pLmZvckVhY2gobD0+e3Muc2V0KGwubmFtZSxsLnZhbHVlKX0pO2xldCBhPW5ldyBNYXA7cmV0dXJuKG8ubWV0cmljc3x8W10pLmZvckVhY2gobD0+e2Euc2V0KGwudGFnLGwudmFsdWUpfSkse3J1bjpvLGV4cGVyaW1lbnROYW1lOnRbby5leHBlcmltZW50SWRdfHwiIixleHBlcmltZW50QWxpYXM6cltvLmV4cGVyaW1lbnRJZF0sc2VsZWN0ZWQ6Qm9vbGVhbihlJiZlLmdldChvLmlkKSkscnVuQ29sb3I6aVtvLmlkXSxocGFyYW1zOnMsbWV0cmljczphfX0pKSxPTj1xKHZkLEUxZSxtMSxoMSxIYSwobix0LGUsaSxyKT0+e2xldCBvPWpULmZpbHRlclJ1bkl0ZW1zQnlSZWdleCh0LG4scj09PXduLkNPTVBBUkVfRVhQRVJJTUVOVCk7cmV0dXJuIGpULmZpbHRlclJ1bkl0ZW1zQnlIcGFyYW1BbmRNZXRyaWNGaWx0ZXIobyxlLGkpfSksd1E9cShPTixuPT5uZXcgU2V0KG4ubWFwKCh7cnVuOntpZDp0fX0pPT50KSkpLGtOPXEoZjEsbHIsKHtocGFyYW1zOm59LHQpPT50P24ubWFwKGU9Pih7dHlwZTpodC5IUEFSQU0sbmFtZTplLm5hbWUsZGlzcGxheU5hbWU6ZS5kaXNwbGF5TmFtZXx8ZS5uYW1lLGVuYWJsZWQ6ITEscmVtb3ZhYmxlOiEwLHNvcnRhYmxlOiEwLG1vdmFibGU6ITAsZmlsdGVyYWJsZTohMH0pKTpbXSkscWc9KFloKG49PnEoZDEobiksa04sKHQsZSk9PlsuLi50LC4uLmVdKSksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5jZGtTY3JvbGxhYmxlPWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9bmV3IEYsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcgSWUsdGhpcy5vbkV2ZW50JD1uZXcgSWV9bmdPbkluaXQoKXtsZXQgZT17cm9vdDp0aGlzLmNka1Njcm9sbGFibGU/dGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Om51bGx9O3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4mJihlLnJvb3RNYXJnaW49dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbik7bGV0IGk9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHI9Pnt0aGlzLm9uRXZlbnQkLm5leHQocil9LGUpO2kub2JzZXJ2ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLm5nVW5zdWJzY3JpYmUkLnN1YnNjcmliZSgoKT0+e2kudW5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpfSksdGhpcy5vbkV2ZW50JC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUocj0+e2xldCBvPXIuc2xpY2UoLTEpWzBdO3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoe3Zpc2libGU6by5pc0ludGVyc2VjdGluZ30pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+dGhpcy5vbkV2ZW50JC5waXBlKFl0KDEpKS5zdWJzY3JpYmUoKCk9PntlKCl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoQ2QsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIl1dLGlucHV0czp7aW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW46ImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIn0sb3V0cHV0czp7b25WaXNpYmlsaXR5Q2hhbmdlOiJvblZpc2liaWxpdHlDaGFuZ2UifX0pLG59KSgpKSxTUT0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiBZZyhuLHQpe2xldCBlPW47cmV0dXJuIHQmJm4uc3RhcnRzV2l0aCh0KyIvIikmJihlPW4uc2xpY2UodC5sZW5ndGgrMSkpLGUuZW5kc1dpdGgoU1EpJiYoZT1lLnNsaWNlKDAsLVNRLmxlbmd0aCkpLGV8fG59dmFyIEdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuaHJlZkF0dHI9dm9pZCAwLHRoaXMuc3JjQXR0cj12b2lkIDAsdGhpcy5pbmNsdWRlRmVhdHVyZUZsYWdzPSEwfWdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KFBoKS5waXBlKE4oaT0+e2lmKE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wKXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKFtbInRlbnNvckJvYXJkRmVhdHVyZUZsYWdzIixKU09OLnN0cmluZ2lmeShpKV1dKSxvPWUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybiBlK28rU3RyaW5nKHIpfXJldHVybiBlfSkpfXNldCBocmVmKGUpe2UmJklDKHRoaXMuZ2V0VXJsV2l0aEZlYXR1cmVGbGFncyhlKSkudGhlbihpPT57dGhpcy5ocmVmQXR0cj1pLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSl9c2V0IHNyYyhlKXtlJiZJQyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuc3JjQXR0cj1pLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoJHQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siYSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiLCIiXSxbImltZyIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkJlKCJocmVmIixpLmhyZWZBdHRyLGthKSgic3JjIixpLnNyY0F0dHIsa2EpfSxpbnB1dHM6e2luY2x1ZGVGZWF0dXJlRmxhZ3M6ImluY2x1ZGVGZWF0dXJlRmxhZ3MiLGhyZWY6ImhyZWYiLHNyYzoic3JjIn19KSxufSkoKSxUMWU9WyJtZWFzdXJlciJdLEQxZT1bImlucHV0Il0sVFE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnN0eWxlPSJkZWZhdWx0Iix0aGlzLnBhdHRlcm5SZWdleD1uZXcgUmVnRXhwKCIuKiIpLHRoaXMuaXNWYWxpZD0hMCx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEYsdGhpcy5ibHVyPW5ldyBGLHRoaXMuZm9jdXM9bmV3IEYsdGhpcy5rZXlkb3duPW5ldyBGLHRoaXMua2V5dXA9bmV3IEYsdGhpcy5pbnRlcm5hbFZhbHVlPSIiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyPXRoaXMudXBkYXRlSW5wdXRXaWR0aC5iaW5kKHRoaXMpfW5nT25Jbml0KCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRpbmdkb25lIix0aGlzLmZvbnRDaGFuZ2VMaXN0ZW5lcil9bmdPbkRlc3Ryb3koKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uQ2hhbmdlcyhlKXtlLnBhdHRlcm4mJih0aGlzLnBhdHRlcm5SZWdleD1uZXcgUmVnRXhwKHRoaXMucGF0dGVybj8/IiIpKSxlLnZhbHVlJiYodGhpcy5pbnRlcm5hbFZhbHVlPXRoaXMudmFsdWUpLHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSl9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy51cGRhdGVJbnB1dFdpZHRoKCl9b25JbnB1dChlKXtsZXQgaT10aGlzLmludGVybmFsVmFsdWU7dGhpcy5pbnRlcm5hbFZhbHVlPXRoaXMuaW5wdXRFbFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuaW50ZXJuYWxWYWx1ZSE9PWkmJih0aGlzLmlzVmFsaWQ9dGhpcy5wYXR0ZXJuUmVnZXgudGVzdCh0aGlzLmludGVybmFsVmFsdWUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpLHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHt2YWx1ZTp0aGlzLmludGVybmFsVmFsdWV9KX11cGRhdGVJbnB1dFdpZHRoKCl7bGV0e3dpZHRoOmV9PXRoaXMubWVhc3VyZXJFbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuaW5wdXRFbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoPWAke2V9cHhgfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siY29udGVudC13cmFwcGluZy1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShUMWUsNyxNZSksR2UoRDFlLDcsTWUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLm1lYXN1cmVyRWxSZWY9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuaW5wdXRFbFJlZj1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZBcyhpLnN0eWxlKX0saW5wdXRzOnt2YWx1ZToidmFsdWUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsc3R5bGU6InN0eWxlIixwYXR0ZXJuOiJwYXR0ZXJuIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSIsYmx1cjoiYmx1ciIsZm9jdXM6ImZvY3VzIixrZXlkb3duOiJrZXlkb3duIixrZXl1cDoia2V5dXAifSxmZWF0dXJlczpbR3RdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1lYXN1cmVyIl0sWyJtZWFzdXJlciIsIiJdLFsiYXV0b2NvbXBsZXRlIiwib2ZmIiwic3BlbGxjaGVjayIsImZhbHNlIiwidHlwZSIsInRleHQiLDMsInZhbHVlIiwicGxhY2Vob2xkZXIiLCJibHVyIiwiZm9jdXMiLCJpbnB1dCIsImtleWRvd24iLCJrZXl1cCJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNwYW4iKSgxLCJzcGFuIiwwLDEpLFQoMyksZygpLGgoNCwiaW5wdXQiLDIsMyksSSgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYmx1ci5lbWl0KG8pfSkoImZvY3VzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5mb2N1cy5lbWl0KG8pfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbklucHV0KG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLmtleWRvd24uZW1pdChvKX0pKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5dXAuZW1pdChvKX0pLGcoKSgpKSwyJmUmJihudCgiY29udGFpbmVyIiwhMCkoImlzLXZhbGlkIixpLmlzVmFsaWQpLHYoMyksYnQoaS5pbnRlcm5hbFZhbHVlfHxpLnBsYWNlaG9sZGVyKSx2KDEpLF8oInZhbHVlIixpLnZhbHVlKSgicGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O3dpZHRoOm1heC1jb250ZW50fVtfbmdob3N0LSVDT01QJV06Zm9jdXMtd2l0aGluICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNmNTdjMDB9LmRlZmF1bHRbX25naG9zdC0lQ09NUCVdOmhvdmVyICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNlYmViZWJ9LmVycm9yW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06bm90KC5pcy12YWxpZCl7Ym9yZGVyLWNvbG9yOiNlZjlhOWF9LmVycm9yW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCAuZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXMtd2l0aGluLCBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06bm90KC5pcy12YWxpZCk6aG92ZXIsIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpmb2N1cy13aXRoaW57Ym9yZGVyLWNvbG9yOiNlZjlhOWF9LmhpZ2gtY29udHJhc3RbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNiZGJkYmR9LmhpZ2gtY29udHJhc3RbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiM3NTc1NzV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjJweCBzb2xpZCByZ2JhKDAsMCwwLDApO3BhZGRpbmc6MXB4IDJweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW59Lm1lYXN1cmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7bGluZS1oZWlnaHQ6MS40O3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpwcmV9Lm1lYXN1cmVyW19uZ2NvbnRlbnQtJUNPTVAlXTplbXB0eSwgaW5wdXRbX25nY29udGVudC0lQ09NUCVdOmVtcHR5e3dpZHRoOjJjaH1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXI6MDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtZmFtaWx5OmluaGVyaXQ7b3V0bGluZTowfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3twYWRkaW5nLXJpZ2h0OjFjaH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEExZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImNvbnRlbnQtd3JhcHBpbmctaW5wdXQiLDMpLEkoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmFsaWFzQ2hhbmdlZC5lbWl0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoKTtGYShlLmlzQWxpYXNOYW1lTGVnYWw/ImhpZ2gtY29udHJhc3QiOiJlcnJvciIpLF8oInZhbHVlIixlLmFsaWFzLmFsaWFzVGV4dCl9fWZ1bmN0aW9uIFIxZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO250KCJpbGxlZ2FsIiwhZS5pc0FsaWFzTmFtZUxlZ2FsKSxfKCJ0aXRsZSIsZS50aXRsZSksdigxKSxidChlLmFsaWFzLmFsaWFzVGV4dCl9fXZhciBRdT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pc0FsaWFzTmFtZUxlZ2FsPSEwLHRoaXMuYWxpYXNDaGFuZ2VkPW5ldyBGfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1leHBlcmltZW50LWFsaWFzIl1dLGlucHV0czp7YWxpYXM6ImFsaWFzIixhbGlhc0VkaXRhYmxlOiJhbGlhc0VkaXRhYmxlIix0aXRsZToidGl0bGUiLGlzQWxpYXNOYW1lTGVnYWw6ImlzQWxpYXNOYW1lTGVnYWwifSxvdXRwdXRzOnthbGlhc0NoYW5nZWQ6ImFsaWFzQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczozLGNvbnN0czpbWzEsImFsaWFzLW51bWJlciJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywic3R5bGUiLCJ2YWx1ZSIsIm9uVmFsdWVDaGFuZ2UiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9FZGl0QWxpYXNOYW1lIiwiIl0sWyJwbGFjZWhvbGRlciIsIkFsaWFzIGZvciBleHBlcmltZW50IiwzLCJ2YWx1ZSIsIm9uVmFsdWVDaGFuZ2UiXSxbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsInNwYW4iLDApLFQoMSksZygpLFMoMixBMWUsMSwzLCJjb250ZW50LXdyYXBwaW5nLWlucHV0IiwxKSxTKDMsUjFlLDIsNCwibmctdGVtcGxhdGUiLG51bGwsMixXdCkpLDImZSl7bGV0IHI9aXQoNCk7digxKSxidChpLmFsaWFzLmFsaWFzTnVtYmVyKSx2KDEpLF8oIm5nSWYiLGkuYWxpYXNFZGl0YWJsZSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRmUsVFFdLHN0eWxlczpbIi5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTtib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6MnB4O3BhZGRpbmc6MCAycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfVtfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0iXX0pLG59KSgpO2Z1bmN0aW9uIFAxZShuLHQpezEmbiYmUCgwLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwyKSwyJm4mJl8oImFsaWFzIix3KCkuZXhwZXJpbWVudEFsaWFzKX1mdW5jdGlvbiBPMWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsIi8iKSxnKCkpfXZhciBEUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxQMWUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxTKDEsTzFlLDIsMCwic3BhbiIsMSksaCgyLCJzcGFuIiksVCgzKSxnKCkpLDImZSYmKF8oIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx2KDEpLF8oIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx2KDIpLGJ0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W0ZlLFF1XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPWRuKFt0aGlzLnN0b3JlLnNlbGVjdChfMSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShOKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9ZG4oW3RoaXMuc3RvcmUuc2VsZWN0KGcxLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoemEpXSkucGlwZShOKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJihfKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksQmUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W0RRLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBGMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGJ0KGUuZmlyc3RUZXh0UGFydCgpKX19dmFyIFhnPSgoKT0+e2NsYXNzIG57cGFyc2VWYWx1ZSgpe2xldCBlPXRoaXMudmFsdWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWU/e2ZpcnN0OiIiLHNlY29uZDp0aGlzLnZhbHVlfTp7Zmlyc3Q6dGhpcy52YWx1ZS5zbGljZSgwLGUpLHNlY29uZDp0aGlzLnZhbHVlLnNsaWNlKGUpfX1maXJzdFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLmZpcnN0fXNlY29uZFRleHRQYXJ0KCl7cmV0dXJuIHRoaXMucGFyc2VWYWx1ZSgpLnNlY29uZH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItdHJ1bmNhdGVkLXBhdGgiXV0saW5wdXRzOnt2YWx1ZToidmFsdWUifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJmaXJzdC10ZXh0LXBhcnQiLDQsIm5nSWYiXSxbMSwic2Vjb25kLXRleHQtcGFydCJdLFsxLCJmaXJzdC10ZXh0LXBhcnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsRjFlLDIsMSwic3BhbiIsMCksaCgxLCJzcGFuIiwxKSxUKDIpLGcoKSksMiZlJiYoXygibmdJZiIsaS5maXJzdFRleHRQYXJ0KCkubGVuZ3RoPjApLHYoMiksYnQoaS5zZWNvbmRUZXh0UGFydCgpKSl9LGRlcGVuZGVuY2llczpbRmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgNGNoO21heC13aWR0aDptYXgtY29udGVudH0uZmlyc3QtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlY29uZC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfSJdfSksbn0pKCk7ZnVuY3Rpb24gTjFlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiwyKX1mdW5jdGlvbiBMMWUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDMpfXZhciBRZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5pc0NsaXBwZWQ9ITEsdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyJdXSxpbnB1dHM6e2lzQ2xpcHBlZDoiaXNDbGlwcGVkIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiIsNCwibmdJZiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbGlwcGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJMaW5rZWQgc3RlcCBpcyBub3QgZm91bmQgaW4gdGhpcyB2aXN1YWxpemF0aW9uLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIl0sWyJkYXRhLXZhbHVlIiwiY2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiRGF0YSBpcyBub3QgZm91bmQgb24gc2VsZWN0ZWQgc3RlcC4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFMoMCxOMWUsMSwwLCJtYXQtaWNvbiIsMCksUygxLEwxZSwxLDAsIm1hdC1pY29uIiwxKSksMiZlJiYoXygibmdJZiIsaS5pc0NsaXBwZWQpLHYoMSksXygibmdJZiIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpKX0sZGVwZW5kZW5jaWVzOltGZSxFbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmO2hlaWdodDoxZW07bGluZS1oZWlnaHQ6MDtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZDMyZjJmfVtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEIxZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsMTkpLFQoMSksaigyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksSGUoIlN0ZXAgIixXKDIsMSxlLnN0ZXBzW2Uuc3RlcEluZGV4XSksIiIpfX1mdW5jdGlvbiBWMWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIwKSxUKDEpLGooMiwibnVtYmVyIiksaigzLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksbHUoIlNhbXBsZSAiLFcoMiwyLGUuc2FtcGxlKzEpLCIvIixXKDMsNCxlLm51bVNhbXBsZSksIiIpfX1mdW5jdGlvbiBIMWUobix0KXsxJm4mJlAoMCwibWF0LXNwaW5uZXIiLDIxKX1mdW5jdGlvbiB6MWUobix0KXtpZigxJm4mJihoKDAsInNwYW4iKSxQKDEsInNwYW4iLDMwKSgyLCJzcGFuIiwzMSksZygpKSwyJm4pe2xldCBlPXcoMyk7digyKSxUdCgibGVmdCIsZS5zbGlkZXJTdGFydFBvc2l0aW9uKSgid2lkdGgiLGUuc2xpZGVyVHJhY2tXaWR0aCl9fWZ1bmN0aW9uIFUxZShuLHQpe2lmKDEmbiYmUCgwLCJkaXYiLDMyKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygzKTtUdCgibGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKSkoIm1hcmdpbi1sZWZ0IixpLmdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpKX19ZnVuY3Rpb24gajFlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDI3KSxTKDEsejFlLDMsNCwic3BhbiIsMjgpLFMoMixVMWUsMSw0LCJkaXYiLDI5KSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLF8oIm5nSWYiLG51bGwhPT1lLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcCksdigxKSxfKCJuZ0Zvck9mIixlLnNlbGVjdGVkU3RlcHMpfX12YXIgRzFlPWZ1bmN0aW9uKG4pe3JldHVybltuXX0sVzFlPWZ1bmN0aW9uKG4pe3JldHVybntmaWx0ZXI6bn19O2Z1bmN0aW9uIHExZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtPdCgwKSxoKDEsImRpdiIsMjIpKDIsIm1hdC1zbGlkZXIiLDIzKSxJKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25TbGlkZXJJbnB1dChyKSl9KSxnKCksUygzLGoxZSwzLDIsImRpdiIsMjQpLGcoKSxoKDQsImRpdiIsMjUpLFAoNSwiaW1nIiwyNiksZygpLGt0KCl9aWYoMiZuKXtsZXQgZT13KCk7digyKSxfKCJuZ0NsYXNzIixJbigxMSxHMWUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSx2KDEpLF8oIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbiksdigyKSxmYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSxXaSgic3JjIixlLmltYWdlVXJsLGthKSxfKCJuZ1N0eWxlIixJbigxMyxXMWUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBZMWUobix0KXsxJm4mJihoKDAsImRpdiIsMzQpLFQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLGcoKSl9ZnVuY3Rpb24gWDFlKG4sdCl7aWYoMSZuJiZTKDAsWTFlLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT13KCk7XygibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIFExZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxBUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5EYXRhTG9hZFN0YXRlPVRlLHRoaXMuc2xpZGVyU3RhcnRQb3NpdGlvbj0iIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9IiIsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uPW51bGwsdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ9ITEsdGhpcy5vbkFjdHVhbFNpemVUb2dnbGU9bmV3IEYsdGhpcy5zdGVwSW5kZXhDaGFuZ2U9bmV3IEYsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEZ9Y3NzRmlsdGVyKCl7cmV0dXJuYGNvbnRyYXN0KCR7dGhpcy5jb250cmFzdEluTWlsbGkvMTB9JSkgYnJpZ2h0bmVzcygke3RoaXMuYnJpZ2h0bmVzc0luTWlsbGkvMWUzfSlgfW9uU2xpZGVySW5wdXQoZSl7dGhpcy5zdGVwSW5kZXhDaGFuZ2UuZW1pdChlLnZhbHVlKX1jaGFuZ2VEaXN0aW5jdChlKXtyZXR1cm4gZS5jdXJyZW50VmFsdWUhPT1lLnByZXZpb3VzVmFsdWV9bmdPbkNoYW5nZXMoZSl7KGUuc2VsZWN0ZWRTdGVwcyYmdGhpcy5jaGFuZ2VEaXN0aW5jdChlLnNlbGVjdGVkU3RlcHMpfHxlLmxpbmtlZFRpbWVTZWxlY3Rpb24mJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5saW5rZWRUaW1lU2VsZWN0aW9uKSkmJnRoaXMucmVuZGVyUmFuZ2VTbGlkZXIoKX1yZW5kZXJSYW5nZVNsaWRlcigpe2lmKCF0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb258fCF0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcClyZXR1cm47bGV0IGU9dGhpcy5zdGVwcy5sZW5ndGgtMSxpPXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydFN0ZXA8dGhpcy5zdGVwc1swXT90aGlzLnN0ZXBzWzBdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5zdGFydFN0ZXAscj10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kU3RlcD50aGlzLnN0ZXBzW2VdP3RoaXMuc3RlcHNbZV06dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXAse3N0YXJ0UG9zaXRpb246byx3aWR0aDpzfT10aGlzLmdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGkscixlKTt0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249MTAwKm8rIiUiLHRoaXMuc2xpZGVyVHJhY2tXaWR0aD0xMDAqcysiJSJ9Z2V0VHJhY2tTdGFydFBvc2l0aW9uQW5kV2lkdGgoZSxpLHIpe2xldCBvPTEvcixzPTAsYT0wLGw9MDtmb3IoO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sZD10aGlzLnN0ZXBzW2wrMV07aWYoYzw9ZSYmZTw9ZCl7cys9KGUtYykvKGQtYyk7YnJlYWt9fWZvcihzPShzK2wpKm87bDx0aGlzLnN0ZXBzLmxlbmd0aC0xO2wrKyl7bGV0IGM9dGhpcy5zdGVwc1tsXSxkPXRoaXMuc3RlcHNbbCsxXTtpZihlPj1jJiZpPD1kKXthPShpLWUpLyhkLWMpO2JyZWFrfWlmKGU+PWMmJmk+PWQpYSs9KGQtZSkvKGQtYyk7ZWxzZXtpZighKGk+PWQpKXthKz0oaS1jKS8oZC1jKTticmVha31hKz0xfX1yZXR1cm4gYSo9bywocz4xfHxzPDApJiYocz0wKSx7c3RhcnRQb3NpdGlvbjpzLHdpZHRoOmF9fWdldExpbmtlZFRpbWVUaWNrTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybiB0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjEwMCsiJSJ9Z2V0TGlua2VkVGltZVRpY2tNYXJnaW5MZWZ0U3R5bGUoZSl7aWYoLTE9PXRoaXMuc3RlcHMuaW5kZXhPZihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RlcEluZGV4OiBzdGVwSW5kZXggdmFsdWUgaXMgbm90IGluY2x1ZGVkIGluIHN0ZXBzIik7cmV0dXJuYC0ke3RoaXMuc3RlcHMuaW5kZXhPZihlKS8odGhpcy5zdGVwcy5sZW5ndGgtMSkqMTR9cHhgfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmbnQoImFjdHVhbC1zaXplIixpLnNob3dBY3R1YWxTaXplKX0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixzYW1wbGU6InNhbXBsZSIsbnVtU2FtcGxlOiJudW1TYW1wbGUiLGltYWdlVXJsOiJpbWFnZVVybCIsc3RlcEluZGV4OiJzdGVwSW5kZXgiLHN0ZXBzOiJzdGVwcyIsYnJpZ2h0bmVzc0luTWlsbGk6ImJyaWdodG5lc3NJbk1pbGxpIixjb250cmFzdEluTWlsbGk6ImNvbnRyYXN0SW5NaWxsaSIsc2hvd0FjdHVhbFNpemU6InNob3dBY3R1YWxTaXplIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixhbGxvd1RvZ2dsZUFjdHVhbFNpemU6ImFsbG93VG9nZ2xlQWN0dWFsU2l6ZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixzZWxlY3RlZFN0ZXBzOiJzZWxlY3RlZFN0ZXBzIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uQWN0dWFsU2l6ZVRvZ2dsZToib25BY3R1YWxTaXplVG9nZ2xlIixzdGVwSW5kZXhDaGFuZ2U6InN0ZXBJbmRleENoYW5nZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQifSxmZWF0dXJlczpbR3RdLGRlY2xzOjIxLHZhcnM6MTYsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBhbiBpbWFnZSBjYXJkIHRoYXQgdG9nZ2xlcyBhY3R1YWwgaW1hZ2Ugc2l6ZS7ikJ8zY2EwNWVmM2E2ZTNhMzcwNjVmNWUwZjY5YzVkNWEyMTc4ZDkwNzkx4pCfNzYzNTEwMTkzNjY2NDc4OTE0MDpUb2dnbGUgYWN0dWFsIGltYWdlIHNpemVgLFtbMSwiaGVhZGluZyJdLFsxLCJsaW5lIl0sWzEsInRhZyJdLFsxLCJ0YWctcGF0aCIsMywidGl0bGUiLCJ2YWx1ZSJdLFszLCJpc0NsaXBwZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiXSxbMSwiY29udHJvbHMiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwidGl0bGUiLCJUb2dnbGUgYWN0dWFsIGltYWdlIHNpemUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJpbWFnZV9zZWFyY2hfMjRweCJdLFsxLCJydW4iXSxbMSwiZG90IiwzLCJuZ1N0eWxlIl0sWzEsInJ1bi10ZXh0IiwzLCJydW5JZCJdLFsxLCJtZXRhZGF0YSJdLFsiY2xhc3MiLCJzdGVwIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhbXBsZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nIiwiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW1hZ2VEYXRhIiwiIl0sWzEsInN0ZXAiXSxbMSwic2FtcGxlIl0sWyJkaWFtZXRlciIsIjE4IiwxLCJsb2FkaW5nIl0sWzEsInNsaWRlci1yb3ciXSxbImNvbG9yIiwicHJpbWFyeSIsMSwic3RlcC1zbGlkZXIiLDMsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0aWNrSW50ZXJ2YWwiLCJ2YWx1ZSIsImlucHV0Il0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiaW1nLWNvbnRhaW5lciJdLFszLCJhbHQiLCJzcmMiLCJuZ1N0eWxlIiwiaW5jbHVkZUZlYXR1cmVGbGFncyJdLFsxLCJsaW5rZWQtdGltZS13cmFwcGVyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibGlua2VkLXRpbWUtdGljayIsMywibGVmdCIsIm1hcmdpbi1sZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsImxpbmtlZC10aW1lLXRpY2siXSxbImNsYXNzIiwiZW1wdHktbWVzc2FnZSIsNCwibmdJZiJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLFAoMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksZygpLGgoNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxQKDcsIm1hdC1pY29uIiw3KSxnKCksaCg4LCJidXR0b24iLDgpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxQKDksIm1hdC1pY29uIiw5KSxnKCkoKSgpLGgoMTAsImRpdiIsMSkoMTEsInNwYW4iLDEwKSxQKDEyLCJzcGFuIiwxMSkoMTMsImNhcmQtcnVuLW5hbWUiLDEyKSxnKCksaCgxNCwiZGl2IiwxMyksUygxNSxCMWUsMywzLCJzcGFuIiwxNCksUygxNixWMWUsNCw2LCJzcGFuIiwxNSksUygxNyxIMWUsMSwwLCJtYXQtc3Bpbm5lciIsMTYpLGcoKSgpKCksUygxOCxxMWUsNiwxNSwibmctY29udGFpbmVyIiwxNyksUygxOSxYMWUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxOCxXdCkpLDImZSl7bGV0IHI9aXQoMjApO3YoMyksV2koInRpdGxlIixpLnRhZyksV2koInZhbHVlIixpLnRpdGxlKSx2KDEpLF8oImlzQ2xpcHBlZCIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJiZpLmxpbmtlZFRpbWVTZWxlY3Rpb24uY2xpcHBlZCkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpLHYoMiksQmUoInRpdGxlIixpLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSx2KDEpLF8oInN2Z0ljb24iLGkuaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksdigxKSxfKCJkaXNhYmxlZCIsIWkuYWxsb3dUb2dnbGVBY3R1YWxTaXplKSx2KDQpLF8oIm5nU3R5bGUiLEluKDE0LFExZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSx2KDEpLF8oInJ1bklkIixpLnJ1bklkKSx2KDIpLF8oIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpLHYoMSksXygibmdJZiIsaS5udW1TYW1wbGU+MSksdigxKSxfKCJuZ0lmIixpLmxvYWRTdGF0ZT09PWkuRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSx2KDEpLF8oIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLG5uLEZlLHB1LEdULCRpLEVuLHRsLERkLHFULFhnLFFnLExhXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1heC1jb250ZW50fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweH0ubWV0YWRhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXgtd2lkdGg6MTc1cHg7dGV4dC1hbGlnbjplbmR9LnRhZy1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnJ1bltfbmdjb250ZW50LSVDT01QJV17YWxpZ24tc2VsZjpiYXNlbGluZTtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO3doaXRlLXNwYWNlOm5vd3JhcDtqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3cteTphdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17aW1hZ2UtcmVuZGVyaW5nOi1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOnBpeGVsYXRlZH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVdICAgLmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87ZmxleDpub25lfVtfbmdob3N0LSVDT01QJV06bm90KC5hY3R1YWwtc2l6ZSkgICBpbWdbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO21heC1oZWlnaHQ6MTAwJTttYXgtd2lkdGg6MTAwJTt3aWR0aDphdXRvO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y29udGFpbn0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RlcC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MX1bX25naG9zdC0lQ09NUCVdICAgICAubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfVtfbmdob3N0LSVDT01QJV0gICAgIC5oaWRlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MH0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9LmxpbmtlZC10aW1lLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1cHg7d2lkdGg6MTAwJX0ubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlci1yYWRpdXM6NTAlO2hlaWdodDoxNHB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjE0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoycHg7dG9wOjZweDtwb3NpdGlvbjphYnNvbHV0ZX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI2KTtsZWZ0OjdweDt3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBGLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGkxKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QocjEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KG8xKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IEFpKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChBVCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09em4uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtkbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoV2EsdGhpcy5jYXJkSWQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxrZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSksTihsPT5sKSxNcygxKSksbz1kbihbaSx0aGlzLnN0b3JlLnNlbGVjdChDdSx0aGlzLmNhcmRJZCldKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksTigoW2wsY10pPT57bGV0IGQ9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eShkKT9jW2RdOltdfSksWW4oKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLE1zKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QocUYsdGhpcy5jYXJkSWQpLnBpcGUoTihsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChxRix0aGlzLmNhcmRJZCkucGlwZShOKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoX2QsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoTihsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKE4obD0+WWcobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoTihsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShOKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShOKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3QodlcsdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KE11LHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEV1KS5waXBlKExpKHRoaXMuc3RlcHMkKSxOKChbbCxjXSk9Pmw/VWgobCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKExpKHRoaXMuc3RlcHMkKSxOKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcihkPT5kPj1sLnN0YXJ0U3RlcCYmZDw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPWRuKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoTigoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoTihsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoVGMpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksSSgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLGcoKSksMiZlJiZfKCJsb2FkU3RhdGUiLFcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFcoMywyMixpLnRhZyQpKSgicnVuSWQiLFcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixXKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixXKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixXKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixXKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixXKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W0FRLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUWk9KCgpPT4oZnVuY3Rpb24obil7bltuLlNWRz0wXT0iU1ZHIixuW24uV0VCR0w9MV09IldFQkdMIn0oUWl8fChRaT17fSkpLFFpKSkoKSxucj0oKCk9PihmdW5jdGlvbihuKXtuW24uTElORUFSPTBdPSJMSU5FQVIiLG5bbi5MT0cxMD0xXT0iTE9HMTAiLG5bbi5USU1FPTJdPSJUSU1FIn0obnJ8fChucj17fSkpLG5yKSkoKSxJcj0oKCk9PihmdW5jdGlvbihuKXtuLk5PTkU9Ik5PTkUiLG4uRFJBR19aT09NSU5HPSJEUkFHX1pPT01JTkciLG4uU0NST0xMX1pPT01JTkc9IlNDUk9MTF9aT09NSU5HIixuLlBBTk5JTkc9IlBBTk5JTkcifShJcnx8KElyPXt9KSksSXIpKSgpO2Z1bmN0aW9uICQxZShuLHQpezEmbiYmKGgoMCwic3BhbiIpLFQoMSwic2NhbGFyIiksZygpKX1mdW5jdGlvbiBlRWUobix0KXsxJm4mJihoKDAsInNwYW4iKSxUKDEsImhpc3RvZ3JhbSIpLGcoKSl9ZnVuY3Rpb24gdEVlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiksVCgxLCJ1bmtub3duIiksZygpKX1mdW5jdGlvbiBuRWUobix0KXtpZigxJm4mJihPdCgwLDEzKSxTKDEsJDFlLDIsMCwic3BhbiIsMTQpLFMoMixlRWUsMiwwLCJzcGFuIiwxNCksUygzLHRFZSwyLDAsInNwYW4iLDE1KSxrdCgpKSwyJm4pe2xldCBlPXcoMik7XygibmdTd2l0Y2giLGUuY2FyZE1ldGFkYXRhLnBsdWdpbiksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5TQ0FMQVJTKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpfX1mdW5jdGlvbiBpRWUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIHJFZShuLHQpe2lmKDEmbiYmKGgoMCwib3B0aW9uIiwxNiksVCgxKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygidmFsdWUiLGUuaWQpLHYoMSksYnQoZS5uYW1lKX19ZnVuY3Rpb24gb0VlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiaDIiKSxTKDIsbkVlLDQsMywibmctdGVtcGxhdGUiLG51bGwsMixXdCksaCg0LCJzcGFuIiksVCg1LCJEb3dubG9hZFx4YTAiKSxnKCksUyg2LGlFZSwxLDAsIm5nLWNvbnRhaW5lciIsMyksaCg3LCJzcGFuIiksVCg4LCJceGEwZGF0YSBmb3JceGEwIiksZygpLGgoOSwiY29kZSIsNCksVCgxMCksZygpKCksaCgxMSwibWF0LWRpYWxvZy1jb250ZW50IikoMTIsIm1hdC1mb3JtLWZpZWxkIiw1KSgxMywibWF0LWxhYmVsIiksVCgxNCwiU2VsZWN0IGEgcnVuIHRvIGRvd25sb2FkIGEgZGF0YSBmb3IgYSBzZXJpZXMiKSxnKCksaCgxNSwic2VsZWN0Iiw2KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLGgoMTYsIm9wdGlvbiIsNyksVCgxNywiLSIpLGcoKSxTKDE4LHJFZSwyLDIsIm9wdGlvbiIsOCksZygpKCksaCgxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLFQoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksZygpLFQoMjIsIlx4YTAiKSxoKDIzLCJhIiwxMCksVCgyNCwiSlNPTiIpLGcoKSxoKDI1LCJhIiwxMCksVCgyNiwiQ1NWIiksZygpKCkoKSxoKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksVCgyOSwiQ2xvc2UiKSxnKCkoKSxrdCgpfWlmKDImbil7bGV0IGU9aXQoMyksaT13KCk7dig2KSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlKSx2KDMpLF8oInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLHYoMSksYnQoaS5jYXJkTWV0YWRhdGEudGFnKSx2KDUpLF8oInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSx2KDEpLF8oInZhbHVlIiwiIiksdigyKSxfKCJuZ0Zvck9mIixpLnJ1bnMpLHYoNSksXygiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24sa2EpLHYoMiksXygiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSkoImhyZWYiLGkuZG93bmxvYWRVcmxDc3Ysa2EpfX1mdW5jdGlvbiBzRWUobix0KXsxJm4mJlQoMCwiTG9hZGluZy4uLiIpfXZhciBPUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5TZWxlY3RlZD1uZXcgRix0aGlzLlBsdWdpblR5cGU9em59Z2V0RG93bmxvYWROYW1lKGUpe2xldCBpPXRoaXMucnVucy5maW5kKHI9PnIuaWQ9PT10aGlzLnNlbGVjdGVkUnVuSWQpO3JldHVybiBpP2Ake2kubmFtZX0uJHtlfWA6IiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRNZXRhZGF0YToiY2FyZE1ldGFkYXRhIixydW5zOiJydW5zIixzZWxlY3RlZFJ1bklkOiJzZWxlY3RlZFJ1bklkIixkb3dubG9hZFVybENzdjoiZG93bmxvYWRVcmxDc3YiLGRvd25sb2FkVXJsSnNvbjoiZG93bmxvYWRVcmxKc29uIn0sb3V0cHV0czp7cnVuU2VsZWN0ZWQ6InJ1blNlbGVjdGVkIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0NhcmRNZXRhZGF0YSIsIiJdLFsiZGF0YU5hbWUiLCIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJ0YWctbmFtZSIsMywidGl0bGUiXSxbImFwcGVhcmFuY2UiLCJmaWxsIiwxLCJydW4tc2VsZWN0b3IiXSxbIm1hdE5hdGl2ZUNvbnRyb2wiLCIiLCJuYW1lIiwicnVuIiwiY2RrRm9jdXNJbml0aWFsIiwiIiwicmVxdWlyZWQiLCIiLDMsInZhbHVlIiwiY2hhbmdlIl0sWyJzZWxlY3RlZCIsIiIsMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkb3dubG9hZC1jb250cm9scyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJkaXNhYmxlZCIsImRvd25sb2FkIiwiaHJlZiIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbImFsaWduIiwiZW5kIl0sWyJtYXQtYnV0dG9uIiwiIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbNCwiTmdTd2l0Y2hEZWZhdWx0Il0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoUygwLG9FZSwzMCwxMiwibmctY29udGFpbmVyIiwwKSxTKDEsc0VlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMSxXdCkpLDImZSl7bGV0IHI9aXQoMik7XygibmdJZiIsaS5jYXJkTWV0YWRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W25uLEZlLExyLHNyLFNyLEdULHVxLGZxLFI3LEppLFoxLEsxLEoxLFV1LEthLGtjXSxzdHlsZXM6WyJoMltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMjVlbTtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW07d2lkdGg6MTAwJX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5kb3dubG9hZC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46M3B4IDEwcHggM3B4IDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnNlbGVjdGVkUnVuSWQkPW5ldyBBaShudWxsKSx0aGlzLmNhcmRNZXRhZGF0YSQ9ZS5zZWxlY3QoV2Esci5jYXJkSWQpLnBpcGUoa2Uobz0+Qm9vbGVhbihvKSkpLHRoaXMuZG93bmxvYWRVcmxDc3YkPWRuKFtlLnNlbGVjdChXYSxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoTigoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywiY3N2Iik6bnVsbCkscW4obnVsbCkpLHRoaXMuZG93bmxvYWRVcmxKc29uJD1kbihbZS5zZWxlY3QoV2Esci5jYXJkSWQpLHRoaXMuc2VsZWN0ZWRSdW5JZCRdKS5waXBlKE4oKFtvLHNdKT0+byYmcz9pLmRvd25sb2FkVXJsKG8ucGx1Z2luLG8udGFnLHMsImpzb24iKTpudWxsKSxxbihudWxsKSksdGhpcy5ydW5zJD1kbihbZS5zZWxlY3QoVlcpLGUuc2VsZWN0KEN1LHIuY2FyZElkKV0pLnBpcGUoTigoW28sc10pPT5zP09iamVjdC5rZXlzKHMpLm1hcChhPT5vLmdldChhKSkuZmlsdGVyKEJvb2xlYW4pOltdKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoVGMpLEMoWHYpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywiY2FyZE1ldGFkYXRhIiwicnVucyIsInNlbGVjdGVkUnVuSWQiLCJkb3dubG9hZFVybENzdiIsImRvd25sb2FkVXJsSnNvbiIsInJ1blNlbGVjdGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiLDApLEkoInJ1blNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZFJ1bklkJC5uZXh0KG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxnKCkpLDImZSYmXygiY2FyZE1ldGFkYXRhIixXKDEsNSxpLmNhcmRNZXRhZGF0YSQpKSgicnVucyIsVygyLDcsaS5ydW5zJCkpKCJzZWxlY3RlZFJ1bklkIixXKDMsOSxpLnNlbGVjdGVkUnVuSWQkKSkoImRvd25sb2FkVXJsQ3N2IixXKDQsMTEsaS5kb3dubG9hZFVybENzdiQpKSgiZG93bmxvYWRVcmxKc29uIixXKDUsMTMsaS5kb3dubG9hZFVybEpzb24kKSl9LGRlcGVuZGVuY2llczpbT1EsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGlsKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIEN5KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBpbChuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgSGM9Q3koaWwpLnJpZ2h0LEJOPU1hdGguc3FydCg1MCksVk49TWF0aC5zcXJ0KDEwKSxITj1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gTXkobix0LGUpe3ZhciBpLG8scyxhLHI9LTE7aWYoZT0rZSwobj0rbik9PSh0PSt0KSYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYobz1uLG49dCx0PW8pLDA9PT0oYT1aZyhuLHQsZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtbisxKSk7KytyPG87KXNbcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKG4tdCsxKSk7KytyPG87KXNbcl09KG4tcikvYTtyZXR1cm4gaSYmcy5yZXZlcnNlKCksc31mdW5jdGlvbiBaZyhuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PUJOPzEwOm8+PVZOPzU6bz49SE4/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1CTj8xMDpvPj1WTj81Om8+PUhOPzI6MSl9ZnVuY3Rpb24gQWQobix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PUJOP3IqPTEwOm8+PVZOP3IqPTU6bz49SE4mJihyKj0yKSx0PG4/LXI6cn12YXIgWFQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEhRKG4pe3JldHVybiBufXZhciBVTj0xLFpUPTIsak49MyxRVD00LHpRPTFlLTY7ZnVuY3Rpb24gX0VlKG4pe3JldHVybiJ0cmFuc2xhdGUoIisobisuNSkrIiwwKSJ9ZnVuY3Rpb24gYkVlKG4pe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhuKy41KSsiKSJ9ZnVuY3Rpb24gdkVlKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rbih0KX19ZnVuY3Rpb24geUVlKG4pe3ZhciB0PU1hdGgubWF4KDAsbi5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiBuLnJvdW5kKCkmJih0PU1hdGgucm91bmQodCkpLGZ1bmN0aW9uKGUpe3JldHVybituKGUpK3R9fWZ1bmN0aW9uIHhFZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBVUShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD1uPT09VU58fG49PT1RVD8tMToxLGM9bj09PVFUfHxuPT09WlQ/IngiOiJ5IixkPW49PT1VTnx8bj09PWpOP19FZTpiRWU7ZnVuY3Rpb24gdShwKXt2YXIgZj1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksbT1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOkhRKSxiPU1hdGgubWF4KG8sMCkrYSxNPXQucmFuZ2UoKSx5PStNWzBdKy41LHg9K01bTS5sZW5ndGgtMV0rLjUsUj0odC5iYW5kd2lkdGg/eUVlOnZFZSkodC5jb3B5KCkpLEE9cC5zZWxlY3Rpb24/cC5zZWxlY3Rpb24oKTpwLFY9QS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksdGU9QS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShmLHQpLm9yZGVyKCksSz10ZS5leGl0KCkseGU9dGUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxYZT10ZS5zZWxlY3QoImxpbmUiKSxEZT10ZS5zZWxlY3QoInRleHQiKTtWPVYubWVyZ2UoVi5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksdGU9dGUubWVyZ2UoeGUpLFhlPVhlLm1lcmdlKHhlLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksRGU9RGUubWVyZ2UoeGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmIpLmF0dHIoImR5IixuPT09VU4/IjBlbSI6bj09PWpOPyIwLjcxZW0iOiIwLjMyZW0iKSkscCE9PUEmJihWPVYudHJhbnNpdGlvbihwKSx0ZT10ZS50cmFuc2l0aW9uKHApLFhlPVhlLnRyYW5zaXRpb24ocCksRGU9RGUudHJhbnNpdGlvbihwKSxLPUsudHJhbnNpdGlvbihwKS5hdHRyKCJvcGFjaXR5Iix6USkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihEKXtyZXR1cm4gaXNGaW5pdGUoRD1SKEQpKT9kKEQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLHhlLmF0dHIoIm9wYWNpdHkiLHpRKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3ZhciByZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBkKHJlJiZpc0Zpbml0ZShyZT1yZShEKSk/cmU6UihEKSl9KSksSy5yZW1vdmUoKSxWLmF0dHIoImQiLG49PT1RVHx8bj09WlQ/cz8iTSIrbCpzKyIsIit5KyJIMC41ViIreCsiSCIrbCpzOiJNMC41LCIreSsiViIreDpzPyJNIit5KyIsIitsKnMrIlYwLjVIIit4KyJWIitsKnM6Ik0iK3krIiwwLjVIIit4KSx0ZS5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEQpe3JldHVybiBkKFIoRCkpfSksWGUuYXR0cihjKyIyIixsKm8pLERlLmF0dHIoYyxsKmIpLnRleHQobSksQS5maWx0ZXIoeEVlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixuPT09WlQ/InN0YXJ0IjpuPT09UVQ/ImVuZCI6Im1pZGRsZSIpLEEuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPVJ9KX1yZXR1cm4gdS5zY2FsZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1wLHUpOnR9LHUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gZT1YVC5jYWxsKGFyZ3VtZW50cyksdX0sdS50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXA/W106WFQuY2FsbChwKSx1KTplLnNsaWNlKCl9LHUudGlja1ZhbHVlcz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT1wP251bGw6WFQuY2FsbChwKSx1KTppJiZpLnNsaWNlKCl9LHUudGlja0Zvcm1hdD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1wLHUpOnJ9LHUudGlja1NpemU9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cz0rcCx1KTpvfSx1LnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3AsdSk6b30sdS50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStwLHUpOnN9LHUudGlja1BhZGRpbmc9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3AsdSk6YX0sdX12YXIgQ0VlPXt2YWx1ZTpmdW5jdGlvbigpe319O2Z1bmN0aW9uIEdRKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IEtUKGUpfWZ1bmN0aW9uIEtUKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIHdFZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGpRKG4sdCxlKXtmb3IodmFyIGk9MCxyPW4ubGVuZ3RoO2k8cjsrK2kpaWYobltpXS5uYW1lPT09dCl7bltpXT1DRWUsbj1uLnNsaWNlKDAsaSkuY29uY2F0KG4uc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJm4ucHVzaCh7bmFtZTp0LHZhbHVlOmV9KSxufUtULnByb3RvdHlwZT1HUS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktULG9uOmZ1bmN0aW9uKG4sdCl7dmFyIHIsZT10aGlzLl8saT1mdW5jdGlvbihuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1qUShlW3JdLG4ubmFtZSx0KTtlbHNlIGlmKG51bGw9PXQpZm9yKHIgaW4gZSllW3JdPWpRKGVbcl0sbi5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPHM7KWlmKChyPShuPWlbb10pLnR5cGUpJiYocj13RWUoZVtyXSxuLm5hbWUpKSlyZXR1cm4gcn0sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgS1Qobil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG8sZT1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihpPTAscj0obz10aGlzLl9bbl0pLmxlbmd0aDtpPHI7KytpKW9baV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O3ZhciBxTj1HUSxKVD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsWU49e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkpULHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gUmQobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksWU4uaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOllOW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gU0VlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09SlQmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUpUP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBFRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gJFQobil7dmFyIHQ9UmQobik7cmV0dXJuKHQubG9jYWw/RUVlOlNFZSkodCl9ZnVuY3Rpb24gVEVlKCl7fWZ1bmN0aW9uIExmKG4pe3JldHVybiBudWxsPT1uP1RFZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIERFZSgpe3JldHVybltdfWZ1bmN0aW9uIFN5KG4pe3JldHVybiBudWxsPT1uP0RFZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIEV5KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIGVEKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIFR5KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fVR5LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VHksYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07dmFyIFpRPSIkIjtmdW5jdGlvbiBJRWUobix0LGUsaSxyLG8pe2Zvcih2YXIgYSxzPTAsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9dFtzXSk/KGEuX19kYXRhX189b1tzXSxpW3NdPWEpOmVbc109bmV3IFR5KG4sb1tzXSk7Zm9yKDtzPGw7KytzKShhPXRbc10pJiYocltzXT1hKX1mdW5jdGlvbiBBRWUobix0LGUsaSxyLG8scyl7dmFyIGEsbCxmLGM9e30sZD10Lmxlbmd0aCx1PW8ubGVuZ3RoLHA9bmV3IEFycmF5KGQpO2ZvcihhPTA7YTxkOysrYSkobD10W2FdKSYmKHBbYV09Zj1aUStzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksZiBpbiBjP3JbYV09bDpjW2ZdPWwpO2ZvcihhPTA7YTx1OysrYSkobD1jW2Y9WlErcy5jYWxsKG4sb1thXSxhLG8pXSk/KGlbYV09bCxsLl9fZGF0YV9fPW9bYV0sY1tmXT1udWxsKTplW2FdPW5ldyBUeShuLG9bYV0pO2ZvcihhPTA7YTxkOysrYSkobD10W2FdKSYmY1twW2FdXT09PWwmJihyW2FdPWwpfWZ1bmN0aW9uIFJFZShuLHQpe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBQRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIE9FZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9fWZ1bmN0aW9uIGtFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9fWZ1bmN0aW9uIEZFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBORWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9fWZ1bmN0aW9uIExFZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfX1mdW5jdGlvbiB0RChuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQkVlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9fWZ1bmN0aW9uIFZFZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQsZSl9fWZ1bmN0aW9uIEhFZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09aT90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBadShuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fHREKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHpFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuXX19ZnVuY3Rpb24gVUVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tuXT10fX1mdW5jdGlvbiBqRWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gcFoobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhOKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IGZaKG4pfWZ1bmN0aW9uIGZaKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1wWihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIG1aKG4sdCl7Zm9yKHZhciBlPVhOKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24gaFoobix0KXtmb3IodmFyIGU9WE4obiksaT0tMSxyPXQubGVuZ3RoOysraTxyOyllLnJlbW92ZSh0W2ldKX1mdW5jdGlvbiBHRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7bVoodGhpcyxuKX19ZnVuY3Rpb24gV0VlKG4pe3JldHVybiBmdW5jdGlvbigpe2haKHRoaXMsbil9fWZ1bmN0aW9uIHFFZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9tWjpoWikodGhpcyxuKX19ZnVuY3Rpb24gWUVlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBYRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1ufX1mdW5jdGlvbiBRRWUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19ZnVuY3Rpb24gWkVlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gS0VlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPW59fWZ1bmN0aW9uIEpFZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10Pz8iIn19ZnVuY3Rpb24gJEVlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGVUZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHRUZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIG5UZSgpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGlUZSgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gclRlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mWi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihuKXt0aGlzLl9uYW1lcy5pbmRleE9mKG4pPDAmJih0aGlzLl9uYW1lcy5wdXNoKG4pLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKG4pO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuKT49MH19O3ZhciBUWj17fSxRTj1udWxsO2Z1bmN0aW9uIG9UZShuLHQsZSl7cmV0dXJuIG49RFoobix0LGUpLGZ1bmN0aW9uKGkpe3ZhciByPWkucmVsYXRlZFRhcmdldDsoIXJ8fHIhPT10aGlzJiYhKDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSkpJiZuLmNhbGwodGhpcyxpKX19ZnVuY3Rpb24gRFoobix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1RTjtRTj1pO3RyeXtuLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQsZSl9ZmluYWxseXtRTj1yfX19ZnVuY3Rpb24gYVRlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZih0KXtmb3IodmFyIG8sZT0wLGk9LTEscj10Lmxlbmd0aDtlPHI7KytlKW89dFtlXSxuLnR5cGUmJm8udHlwZSE9PW4udHlwZXx8by5uYW1lIT09bi5uYW1lP3RbKytpXT1vOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOysraT90Lmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBsVGUobix0LGUpe3ZhciBpPVRaLmhhc093blByb3BlcnR5KG4udHlwZSk/b1RlOkRaO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgZD0wLHU9YS5sZW5ndGg7ZDx1OysrZClpZigobD1hW2RdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIEFaKG4sdCxlKXt2YXIgaT10RChuKSxyPWkuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIHI/cj1uZXcgcih0LGUpOihyPWkuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZT8oci5pbml0RXZlbnQodCxlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlKSxyLmRldGFpbD1lLmRldGFpbCk6ci5pbml0RXZlbnQodCwhMSwhMSkpLG4uZGlzcGF0Y2hFdmVudChyKX1mdW5jdGlvbiBjVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQVoodGhpcyxuLHQpfX1mdW5jdGlvbiBkVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQVoodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoVFo9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBaTj1bbnVsbF07ZnVuY3Rpb24gQnIobix0KXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gUFooKXtyZXR1cm4gbmV3IEJyKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sWk4pfUJyLnByb3RvdHlwZT1QWi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkJyLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TGYobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLGQ9MDtkPHM7KytkKShsPW9bZF0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLGQsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbZF09Yyk7cmV0dXJuIG5ldyBCcihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVN5KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBCcihpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV5KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBCcihpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGY9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0ZSl7ZlsrK2NdPXRlfSksZjt2YXIgZT10P0FFZTpJRWUsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciBkPWlbY10sdT1yW2NdLHA9dS5sZW5ndGgsZj1uLmNhbGwoZCxkJiZkLl9fZGF0YV9fLGMsaSksbT1mLmxlbmd0aCxiPWFbY109bmV3IEFycmF5KG0pLE09c1tjXT1uZXcgQXJyYXkobSk7ZShkLHUsYixNLGxbY109bmV3IEFycmF5KHApLGYsdCk7Zm9yKHZhciBBLFYseD0wLFI9MDt4PG07Kyt4KWlmKEE9Ylt4XSl7Zm9yKHg+PVImJihSPXgrMSk7IShWPU1bUl0pJiYrK1I8bTspO0EuX25leHQ9Vnx8bnVsbH19cmV0dXJuKHM9bmV3IEJyKHMsaSkpLl9lbnRlcj1hLHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgQnIodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoZUQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBCcih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGVEKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24oaSk6aS5hcHBlbmQobisiIiksbnVsbCE9dCYmKHI9dChyKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sZD1sLmxlbmd0aCx1PXNbYV09bmV3IEFycmF5KGQpLGY9MDtmPGQ7KytmKShwPWxbZl18fGNbZl0pJiYodVtmXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgQnIocyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBzLGk9blt0XSxyPWkubGVuZ3RoLTEsbz1pW3JdOy0tcj49MDspKHM9aVtyXSkmJihvJiY0XnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxvKSxvPXMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQodSxwKXtyZXR1cm4gdSYmcD9uKHUuX19kYXRhX18scC5fX2RhdGFfXyk6IXUtIXB9bnx8KG49UkVlKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYyxzPWVbb10sYT1zLmxlbmd0aCxsPXJbb109bmV3IEFycmF5KGEpLGQ9MDtkPGE7KytkKShjPXNbZF0pJiYobFtkXT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBCcihyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIHM9aVtyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWZvcih2YXIgYSxyPXRbZV0sbz0wLHM9ci5sZW5ndGg7bzxzOysrbykoYT1yW29dKSYmbi5jYWxsKGEsYS5fX2RhdGFfXyxvLHIpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UmQobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP09FZTpQRWU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9MRWU6TkVlOmUubG9jYWw/RkVlOmtFZSkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9CRWU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/SEVlOlZFZSkobix0LGU/PyIiKSk6WnUodGhpcy5ub2RlKCksbil9LHByb3BlcnR5OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/ekVlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2pFZTpVRWUpKG4sdCkpOnRoaXMubm9kZSgpW25dfSxjbGFzc2VkOmZ1bmN0aW9uKG4sdCl7dmFyIGU9cFoobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WE4odGhpcy5ub2RlKCkpLHI9LTEsbz1lLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/cUVlOnQ/R0VlOldFZSkoZSx0KSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PW4/WUVlOigiZnVuY3Rpb24iPT10eXBlb2Ygbj9RRWU6WEVlKShuKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PW4/WkVlOigiZnVuY3Rpb24iPT10eXBlb2Ygbj9KRWU6S0VlKShuKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goJEVlKX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGVUZSl9LGFwcGVuZDpmdW5jdGlvbihuKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOiRUKG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24obix0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOiRUKG4pLGk9bnVsbD09dD90VGU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpMZih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goblRlKX0sY2xvbmU6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/clRlOmlUZSl9LGRhdHVtOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24obix0LGUpe3ZhciByLHMsaT1mdW5jdGlvbihuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9KG4rIiIpLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT10P2xUZTphVGUsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChhKGlbcl0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgZCxsPTAsYz1hLmxlbmd0aDtsPGM7KytsKWZvcihyPTAsZD1hW2xdO3I8bzsrK3IpaWYoKHM9aVtyXSkudHlwZT09PWQudHlwZSYmcy5uYW1lPT09ZC5uYW1lKXJldHVybiBkLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2RUZTpjVGUpKG4sdCkpfX07dmFyIFBkPVBaO2Z1bmN0aW9uIG5EKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9uZXcgQnIoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBCcihbW25dXSxaTil9ZnVuY3Rpb24gQmYobix0LGUpe24ucHJvdG90eXBlPXQucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj1ufWZ1bmN0aW9uIEtnKG4sdCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIHQpZVtpXT10W2ldO3JldHVybiBlfWZ1bmN0aW9uIEt1KCl7fXZhciByRD0xLy43LEpnPSJcXHMqKFsrLV0/XFxkKylcXHMqIixJeT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixVYz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsdVRlPS9eIyhbMC05YS1mXXszLDh9KSQvLHBUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbSmcsSmcsSmddKyJcXCkkIiksZlRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tVYyxVYyxVY10rIlxcKSQiKSxtVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tKZyxKZyxKZyxJeV0rIlxcKSQiKSxoVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tVYyxVYyxVYyxJeV0rIlxcKSQiKSxnVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0l5LFVjLFVjXSsiXFwpJCIpLF9UZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0l5LFVjLFVjLEl5XSsiXFwpJCIpLE9aPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGtaKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gRlooKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBHbChuKXt2YXIgdCxlO3JldHVybiBuPShuKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD11VGUuZXhlYyhuKSk/KGU9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSw2PT09ZT9OWih0KTozPT09ZT9uZXcgWm8odD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgxNSZ0KTw8NHwxNSZ0LDEpOjg9PT1lP2lEKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKDI1NSZ0KS8yNTUpOjQ9PT1lP2lEKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXwyNDAmdCwoKDE1JnQpPDw0fDE1JnQpLzI1NSk6bnVsbCk6KHQ9cFRlLmV4ZWMobikpP25ldyBabyh0WzFdLHRbMl0sdFszXSwxKToodD1mVGUuZXhlYyhuKSk/bmV3IFpvKDI1NSp0WzFdLzEwMCwyNTUqdFsyXS8xMDAsMjU1KnRbM10vMTAwLDEpOih0PW1UZS5leGVjKG4pKT9pRCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1oVGUuZXhlYyhuKSk/aUQoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsdFs0XSk6KHQ9Z1RlLmV4ZWMobikpP1ZaKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9X1RlLmV4ZWMobikpP1ZaKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6T1ouaGFzT3duUHJvcGVydHkobik/TlooT1pbbl0pOiJ0cmFuc3BhcmVudCI9PT1uP25ldyBabyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIE5aKG4pe3JldHVybiBuZXcgWm8obj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLDEpfWZ1bmN0aW9uIGlEKG4sdCxlLGkpe3JldHVybiBpPD0wJiYobj10PWU9TmFOKSxuZXcgWm8obix0LGUsaSl9ZnVuY3Rpb24gJE4obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBLdXx8KG49R2wobikpLG4/bmV3IFpvKChuPW4ucmdiKCkpLnIsbi5nLG4uYixuLm9wYWNpdHkpOm5ldyBab31mdW5jdGlvbiAkZyhuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/JE4obik6bmV3IFpvKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIFpvKG4sdCxlLGkpe3RoaXMucj0rbix0aGlzLmc9K3QsdGhpcy5iPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBMWigpe3JldHVybiIjIitLTih0aGlzLnIpK0tOKHRoaXMuZykrS04odGhpcy5iKX1mdW5jdGlvbiBCWigpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PW4/IikiOiIsICIrbisiKSIpfWZ1bmN0aW9uIEtOKG4pe3JldHVybigobj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKG4pfHwwKSkpPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gVloobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyB6YyhuLHQsZSxpKX1mdW5jdGlvbiBIWihuKXtpZihuIGluc3RhbmNlb2YgemMpcmV0dXJuIG5ldyB6YyhuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBLdXx8KG49R2wobikpLCFuKXJldHVybiBuZXcgemM7aWYobiBpbnN0YW5jZW9mIHpjKXJldHVybiBuO3ZhciB0PShuPW4ucmdiKCkpLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSksbz1NYXRoLm1heCh0LGUsaSkscz1OYU4sYT1vLXIsbD0obytyKS8yO3JldHVybiBhPyhzPXQ9PT1vPyhlLWkpL2ErNiooZTxpKTplPT09bz8oaS10KS9hKzI6KHQtZSkvYSs0LGEvPWw8LjU/bytyOjItby1yLHMqPTYwKTphPWw+MCYmbDwxPzA6cyxuZXcgemMocyxhLGwsbi5vcGFjaXR5KX1mdW5jdGlvbiBWZihuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/SFoobik6bmV3IHpjKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIHpjKG4sdCxlLGkpe3RoaXMuaD0rbix0aGlzLnM9K3QsdGhpcy5sPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBKTihuLHQsZSl7cmV0dXJuIDI1NSoobjw2MD90KyhlLXQpKm4vNjA6bjwxODA/ZTpuPDI0MD90KyhlLXQpKigyNDAtbikvNjA6dCl9QmYoS3UsR2wse2NvcHk6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxuKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6a1osZm9ybWF0SGV4OmtaLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBIWih0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkZaLHRvU3RyaW5nOkZafSksQmYoWm8sJGcsS2coS3Use2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/ckQ6TWF0aC5wb3cockQsbiksbmV3IFpvKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBabyh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OkxaLGZvcm1hdEhleDpMWixmb3JtYXRSZ2I6QlosdG9TdHJpbmc6Qlp9KSksQmYoemMsVmYsS2coS3Use2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/ckQ6TWF0aC5wb3cockQsbiksbmV3IHpjKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IHpjKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSx0PWlzTmFOKG4pfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLGk9ZSsoZTwuNT9lOjEtZSkqdCxyPTIqZS1pO3JldHVybiBuZXcgWm8oSk4obj49MjQwP24tMjQwOm4rMTIwLHIsaSksSk4obixyLGkpLEpOKG48MTIwP24rMjQwOm4tMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT1uPyIpIjoiLCAiK24rIikiKX19KSk7dmFyIHpaPU1hdGguUEkvMTgwLFVaPTE4MC9NYXRoLlBJLGpaPS45NjQyMixHWj0xLFdaPS44MjUyMSxxWj00LzI5LGUwPTYvMjksWVo9MyplMCplMCx2VGU9ZTAqZTAqZTA7ZnVuY3Rpb24gWFoobil7aWYobiBpbnN0YW5jZW9mIGpjKXJldHVybiBuZXcgamMobi5sLG4uYSxuLmIsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgT2QpcmV0dXJuIFFaKG4pO24gaW5zdGFuY2VvZiBab3x8KG49JE4obikpO3ZhciBvLHMsdD1pTChuLnIpLGU9aUwobi5nKSxpPWlMKG4uYikscj1lTCgoLjIyMjUwNDUqdCsuNzE2ODc4NiplKy4wNjA2MTY5KmkpL0daKTtyZXR1cm4gdD09PWUmJmU9PT1pP289cz1yOihvPWVMKCguNDM2MDc0Nyp0Ky4zODUwNjQ5KmUrLjE0MzA4MDQqaSkvalopLHM9ZUwoKC4wMTM5MzIyKnQrLjA5NzEwNDUqZSsuNzE0MTczMyppKS9XWikpLG5ldyBqYygxMTYqci0xNiw1MDAqKG8tciksMjAwKihyLXMpLG4ub3BhY2l0eSl9ZnVuY3Rpb24gamMobix0LGUsaSl7dGhpcy5sPStuLHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGVMKG4pe3JldHVybiBuPnZUZT9NYXRoLnBvdyhuLDEvMyk6bi9ZWitxWn1mdW5jdGlvbiB0TChuKXtyZXR1cm4gbj5lMD9uKm4qbjpZWioobi1xWil9ZnVuY3Rpb24gbkwobil7cmV0dXJuIDI1NSoobjw9LjAwMzEzMDg/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpTChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBIZihuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIE9kKXJldHVybiBuZXcgT2Qobi5oLG4uYyxuLmwsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgamN8fChuPVhaKG4pKSwwPT09bi5hJiYwPT09bi5iKXJldHVybiBuZXcgT2QoTmFOLDA8bi5sJiZuLmw8MTAwPzA6TmFOLG4ubCxuLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIobi5iLG4uYSkqVVo7cmV0dXJuIG5ldyBPZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQobi5hKm4uYStuLmIqbi5iKSxuLmwsbi5vcGFjaXR5KX0obik6bmV3IE9kKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIE9kKG4sdCxlLGkpe3RoaXMuaD0rbix0aGlzLmM9K3QsdGhpcy5sPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBRWihuKXtpZihpc05hTihuLmgpKXJldHVybiBuZXcgamMobi5sLDAsMCxuLm9wYWNpdHkpO3ZhciB0PW4uaCp6WjtyZXR1cm4gbmV3IGpjKG4ubCxNYXRoLmNvcyh0KSpuLmMsTWF0aC5zaW4odCkqbi5jLG4ub3BhY2l0eSl9ZnVuY3Rpb24gb0wobix0LGUsaSxyKXt2YXIgbz1uKm4scz1vKm47cmV0dXJuKCgxLTMqbiszKm8tcykqdCsoNC02Km8rMypzKSplKygxKzMqbiszKm8tMypzKSppK3MqcikvNn1mdW5jdGlvbiB0MChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gSloobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBzRChuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9KWihuLGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6dDAoaXNOYU4obik/dDpuKX1mdW5jdGlvbiBYcyhuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9KWihuLGUpOnQwKGlzTmFOKG4pP3Q6bil9QmYoamMsZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1haKG4pOm5ldyBqYyhuLHQsZSxpPz8xKX0sS2coS3Use2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgamModGhpcy5sKzE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGpjKHRoaXMubC0xOCoobj8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgbj0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP246bit0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT9uOm4tdGhpcy5iLzIwMDtyZXR1cm4gbmV3IFpvKG5MKDMuMTMzODU2MSoodD1qWip0TCh0KSktMS42MTY4NjY3KihuPUdaKnRMKG4pKS0uNDkwNjE0NiooZT1XWip0TChlKSkpLG5MKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSpuKy4wMzM0NTQqZSksbkwoLjA3MTk0NTMqdC0uMjI4OTkxNCpuKzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSxCZihPZCxIZixLZyhLdSx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBPZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobj8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgT2QodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBRWih0aGlzKS5yZ2IoKX19KSk7dmFyIHpmPWZ1bmN0aW9uIG4odCl7dmFyIGU9ZnVuY3Rpb24obil7cmV0dXJuIDE9PShuPStuKT9YczpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuPU1hdGgucG93KG4sZSksdD1NYXRoLnBvdyh0LGUpLW4sZT0xL2UsZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KG4raSp0LGUpfX0odCxlLG4pOnQwKGlzTmFOKHQpP2U6dCl9fSh0KTtmdW5jdGlvbiBpKHIsbyl7dmFyIHM9ZSgocj0kZyhyKSkuciwobz0kZyhvKSkuciksYT1lKHIuZyxvLmcpLGw9ZShyLmIsby5iKSxjPVhzKHIub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gci5yPXMoZCksci5nPWEoZCksci5iPWwoZCksci5vcGFjaXR5PWMoZCkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBlSyhuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHMsYSxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpO2ZvcihzPTA7czxlOysrcylhPSRnKHRbc10pLGlbc109YS5yfHwwLHJbc109YS5nfHwwLG9bc109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLG89bihvKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPW8obCksYSsiIn19fWZ1bmN0aW9uIHRLKG4sdCl7dHx8KHQ9W10pO3ZhciByLGU9bj9NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCk6MCxpPXQuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1vKSt0W3JdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIGlLKG4sdCl7dmFyIHMsZT10P3QubGVuZ3RoOjAsaT1uP01hdGgubWluKGUsbi5sZW5ndGgpOjAscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGk7KytzKXJbc109VWYobltzXSx0W3NdKTtmb3IoO3M8ZTsrK3Mpb1tzXT10W3NdO3JldHVybiBmdW5jdGlvbihhKXtmb3Iocz0wO3M8aTsrK3Mpb1tzXT1yW3NdKGEpO3JldHVybiBvfX1mdW5jdGlvbiBySyhuLHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oaSl7cmV0dXJuIGUuc2V0VGltZShuKigxLWkpK3QqaSksZX19ZnVuY3Rpb24gQm8obix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBuKigxLWUpK3QqZX19ZnVuY3Rpb24gb0sobix0KXt2YXIgcixlPXt9LGk9e307Zm9yKHIgaW4obnVsbD09PW58fCJvYmplY3QiIT10eXBlb2YgbikmJihuPXt9KSwobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJih0PXt9KSx0KXIgaW4gbj9lW3JdPVVmKG5bcl0sdFtyXSk6aVtyXT10W3JdO3JldHVybiBmdW5jdGlvbihvKXtmb3IociBpbiBlKWlbcl09ZVtyXShvKTtyZXR1cm4gaX19ZUsoZnVuY3Rpb24obil7dmFyIHQ9bi5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9ZTw9MD9lPTA6ZT49MT8oZT0xLHQtMSk6TWF0aC5mbG9vcihlKnQpLHI9bltpXSxvPW5baSsxXTtyZXR1cm4gb0woKGUtaS90KSp0LGk+MD9uW2ktMV06MipyLW8scixvLGk8dC0xP25baSsyXToyKm8tcil9fSksZUsoZnVuY3Rpb24obil7dmFyIHQ9bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPU1hdGguZmxvb3IoKChlJT0xKTwwPysrZTplKSp0KTtyZXR1cm4gb0woKGUtaS90KSp0LG5bKGkrdC0xKSV0XSxuW2kldF0sblsoaSsxKSV0XSxuWyhpKzIpJXRdKX19KTt2YXIgYUw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHNMPW5ldyBSZWdFeHAoYUwuc291cmNlLCJnIik7ZnVuY3Rpb24gQXkobix0KXt2YXIgaSxyLG8sZT1hTC5sYXN0SW5kZXg9c0wubGFzdEluZGV4PTAscz0tMSxhPVtdLGw9W107Zm9yKG4rPSIiLHQrPSIiOyhpPWFMLmV4ZWMobikpJiYocj1zTC5leGVjKHQpKTspKG89ci5pbmRleCk+ZSYmKG89dC5zbGljZShlLG8pLGFbc10/YVtzXSs9bzphWysrc109byksKGk9aVswXSk9PT0ocj1yWzBdKT9hW3NdP2Fbc10rPXI6YVsrK3NdPXI6KGFbKytzXT1udWxsLGwucHVzaCh7aTpzLHg6Qm8oaSxyKX0pKSxlPXNMLmxhc3RJbmRleDtyZXR1cm4gZTx0Lmxlbmd0aCYmKG89dC5zbGljZShlKSxhW3NdP2Fbc10rPW86YVsrK3NdPW8pLGEubGVuZ3RoPDI/bFswXT9mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4odCkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0odCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1LGQ9MDtkPHQ7KytkKWFbKHU9bFtkXSkuaV09dS54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVWYobix0KXt2YXIgaSxlPXR5cGVvZiB0O3JldHVybiBudWxsPT10fHwiYm9vbGVhbiI9PT1lP3QwKHQpOigibnVtYmVyIj09PWU/Qm86InN0cmluZyI9PT1lPyhpPUdsKHQpKT8odD1pLHpmKTpBeTp0IGluc3RhbmNlb2YgR2w/emY6dCBpbnN0YW5jZW9mIERhdGU/cks6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT90SzpBcnJheS5pc0FycmF5KHQpP2lLOiJmdW5jdGlvbiIhPXR5cGVvZiB0LnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiB0LnRvU3RyaW5nfHxpc05hTih0KT9vSzpCbykobix0KX1mdW5jdGlvbiBsTChuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgUnksZEwsYUssbEQsc0s9MTgwL01hdGguUEksYUQ9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gY0wobix0LGUsaSxyLG8pe3ZhciBzLGEsbDtyZXR1cm4ocz1NYXRoLnNxcnQobipuK3QqdCkpJiYobi89cyx0Lz1zKSwobD1uKmUrdCppKSYmKGUtPW4qbCxpLT10KmwpLChhPU1hdGguc3FydChlKmUraSppKSkmJihlLz1hLGkvPWEsbC89YSksbippPHQqZSYmKG49LW4sdD0tdCxsPS1sLHM9LXMpLHt0cmFuc2xhdGVYOnIsdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsbikqc0ssc2tld1g6TWF0aC5hdGFuKGwpKnNLLHNjYWxlWDpzLHNjYWxlWTphfX1mdW5jdGlvbiBkSyhuLHQsZSxpKXtmdW5jdGlvbiByKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24oYyxkKXt2YXIgdT1bXSxwPVtdO3JldHVybiBjPW4oYyksZD1uKGQpLGZ1bmN0aW9uKGMsZCx1LHAsZixtKXtpZihjIT09dXx8ZCE9PXApe3ZhciBiPWYucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwsZSk7bS5wdXNoKHtpOmItNCx4OkJvKGMsdSl9LHtpOmItMix4OkJvKGQscCl9KX1lbHNlKHV8fHApJiZmLnB1c2goInRyYW5zbGF0ZSgiK3UrdCtwK2UpfShjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLGQudHJhbnNsYXRlWCxkLnRyYW5zbGF0ZVksdSxwKSxmdW5jdGlvbihjLGQsdSxwKXtjIT09ZD8oYy1kPjE4MD9kKz0zNjA6ZC1jPjE4MCYmKGMrPTM2MCkscC5wdXNoKHtpOnUucHVzaChyKHUpKyJyb3RhdGUoIixudWxsLGkpLTIseDpCbyhjLGQpfSkpOmQmJnUucHVzaChyKHUpKyJyb3RhdGUoIitkK2kpfShjLnJvdGF0ZSxkLnJvdGF0ZSx1LHApLGZ1bmN0aW9uKGMsZCx1LHApe2MhPT1kP3AucHVzaCh7aTp1LnB1c2gocih1KSsic2tld1goIixudWxsLGkpLTIseDpCbyhjLGQpfSk6ZCYmdS5wdXNoKHIodSkrInNrZXdYKCIrZCtpKX0oYy5za2V3WCxkLnNrZXdYLHUscCksZnVuY3Rpb24oYyxkLHUscCxmLG0pe2lmKGMhPT11fHxkIT09cCl7dmFyIGI9Zi5wdXNoKHIoZikrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO20ucHVzaCh7aTpiLTQseDpCbyhjLHUpfSx7aTpiLTIseDpCbyhkLHApfSl9ZWxzZSgxIT09dXx8MSE9PXApJiZmLnB1c2gocihmKSsic2NhbGUoIit1KyIsIitwKyIpIil9KGMuc2NhbGVYLGMuc2NhbGVZLGQuc2NhbGVYLGQuc2NhbGVZLHUscCksYz1kPW51bGwsZnVuY3Rpb24oZil7Zm9yKHZhciBNLG09LTEsYj1wLmxlbmd0aDsrK208YjspdVsoTT1wW21dKS5pXT1NLngoZik7cmV0dXJuIHUuam9pbigiIil9fX12YXIgdUw9ZEsoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9hRDooUnl8fChSeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxkTD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYUs9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLFJ5LnN0eWxlLnRyYW5zZm9ybT1uLG49YUsuZ2V0Q29tcHV0ZWRTdHlsZShkTC5hcHBlbmRDaGlsZChSeSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksZEwucmVtb3ZlQ2hpbGQoUnkpLGNMKCsobj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIikpWzBdLCtuWzFdLCtuWzJdLCtuWzNdLCtuWzRdLCtuWzVdKSl9LCJweCwgIiwicHgpIiwiZGVnKSIpLHBMPWRLKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP2FEOihsRHx8KGxEPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGxELnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1sRC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9jTCgobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTphRCl9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gdUsobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1WZih0KSkuaCwoZT1WZihlKSkuaCkscj1Ycyh0LnMsZS5zKSxvPVhzKHQubCxlLmwpLHM9WHModC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9byhhKSx0Lm9wYWNpdHk9cyhhKSx0KyIifX19dmFyIGZMPXVLKHNEKTtmdW5jdGlvbiBwSyhuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PUhmKHQpKS5oLChlPUhmKGUpKS5oKSxyPVhzKHQuYyxlLmMpLG89WHModC5sLGUubCkscz1Ycyh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX11SyhYcyk7dmFyIGNELGt5LG1MPXBLKHNEKSxuMD0ocEsoWHMpLDApLE95PTAsUHk9MCxtSz0xZTMsZEQ9MCxqZj0wLHVEPTAsRnk9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsaEs9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gaTAoKXtyZXR1cm4gamZ8fChoSyhEVGUpLGpmPUZ5Lm5vdygpK3VEKX1mdW5jdGlvbiBEVGUoKXtqZj0wfWZ1bmN0aW9uIE55KCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBwRChuLHQsZSl7dmFyIGk9bmV3IE55O3JldHVybiBpLnJlc3RhcnQobix0LGUpLGl9ZnVuY3Rpb24gZksoKXtqZj0oZEQ9Rnkubm93KCkpK3VELG4wPU95PTA7dHJ5eyFmdW5jdGlvbigpe2kwKCksKytuMDtmb3IodmFyIHQsbj1jRDtuOykodD1qZi1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKG51bGwsdCksbj1uLl9uZXh0Oy0tbjB9KCl9ZmluYWxseXtuMD0wLGZ1bmN0aW9uKCl7Zm9yKHZhciBuLGUsdD1jRCxpPTEvMDt0Oyl0Ll9jYWxsPyhpPnQuX3RpbWUmJihpPXQuX3RpbWUpLG49dCx0PXQuX25leHQpOihlPXQuX25leHQsdC5fbmV4dD1udWxsLHQ9bj9uLl9uZXh0PWU6Y0Q9ZSk7a3k9bixoTChpKX0oKSxqZj0wfX1mdW5jdGlvbiBJVGUoKXt2YXIgbj1GeS5ub3coKSx0PW4tZEQ7dD5tSyYmKHVELT10LGREPW4pfWZ1bmN0aW9uIGhMKG4pe24wfHwoT3kmJihPeT1jbGVhclRpbWVvdXQoT3kpKSxuLWpmPjI0PyhuPDEvMCYmKE95PXNldFRpbWVvdXQoZkssbi1GeS5ub3coKS11RCkpLFB5JiYoUHk9Y2xlYXJJbnRlcnZhbChQeSkpKTooUHl8fChkRD1GeS5ub3coKSxQeT1zZXRJbnRlcnZhbChJVGUsbUspKSxuMD0xLGhLKGZLKSkpfWZ1bmN0aW9uIGZEKG4sdCxlKXt2YXIgaT1uZXcgTnk7cmV0dXJuIGkucmVzdGFydChmdW5jdGlvbihyKXtpLnN0b3AoKSxuKHIrdCl9LHQ9bnVsbD09dD8wOit0LGUpLGl9TnkucHJvdG90eXBlPXBELnByb3RvdHlwZT17Y29uc3RydWN0b3I6TnkscmVzdGFydDpmdW5jdGlvbihuLHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtlPShudWxsPT1lP2kwKCk6K2UpKyhudWxsPT10PzA6K3QpLCF0aGlzLl9uZXh0JiZreSE9PXRoaXMmJihreT9reS5fbmV4dD10aGlzOmNEPXRoaXMsa3k9dGhpcyksdGhpcy5fY2FsbD1uLHRoaXMuX3RpbWU9ZSxoTCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxoTCgpKX19O3ZhciBSVGU9cU4oInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksUFRlPVtdLGJLPTAsZ0w9MSxoRD0yLG1EPTMsX0s9NCxnRD01LEx5PTY7ZnVuY3Rpb24gSnUobix0LGUsaSxyLG8pe3ZhciBzPW4uX190cmFuc2l0aW9uO2lmKHMpe2lmKGUgaW4gcylyZXR1cm59ZWxzZSBuLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24obix0LGUpe3ZhciByLGk9bi5fX3RyYW5zaXRpb247ZnVuY3Rpb24gcyhjKXt2YXIgZCx1LHAsZjtpZihlLnN0YXRlIT09Z0wpcmV0dXJuIGwoKTtmb3IoZCBpbiBpKWlmKChmPWlbZF0pLm5hbWU9PT1lLm5hbWUpe2lmKGYuc3RhdGU9PT1tRClyZXR1cm4gZkQocyk7Zi5zdGF0ZT09PV9LPyhmLnN0YXRlPUx5LGYudGltZXIuc3RvcCgpLGYub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZi5pbmRleCxmLmdyb3VwKSxkZWxldGUgaVtkXSk6K2Q8dCYmKGYuc3RhdGU9THksZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW2RdKX1pZihmRChmdW5jdGlvbigpe2Uuc3RhdGU9PT1tRCYmKGUuc3RhdGU9X0ssZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1oRCxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09aEQpe2ZvcihlLnN0YXRlPW1ELHI9bmV3IEFycmF5KHA9ZS50d2Vlbi5sZW5ndGgpLGQ9MCx1PS0xO2Q8cDsrK2QpKGY9ZS50d2VlbltkXS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKyt1XT1mKTtyLmxlbmd0aD11KzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciBkPWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWdELDEpLHU9LTEscD1yLmxlbmd0aDsrK3U8cDspclt1XS5jYWxsKG4sZCk7ZS5zdGF0ZT09PWdEJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Zvcih2YXIgYyBpbiBlLnN0YXRlPUx5LGUudGltZXIuc3RvcCgpLGRlbGV0ZSBpW3RdLGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn1pW3RdPWUsZS50aW1lcj1wRChmdW5jdGlvbihjKXtlLnN0YXRlPWdMLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOlJUZSx0d2VlbjpQVGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6Ykt9KX1mdW5jdGlvbiBCeShuLHQpe3ZhciBlPWhvKG4sdCk7aWYoZS5zdGF0ZT5iSyl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIG1zKG4sdCl7dmFyIGU9aG8obix0KTtpZihlLnN0YXRlPm1EKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIGhvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24ga1RlKG4sdCl7dmFyIGUsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1tcyh0aGlzLG4pLG89ci50d2VlbjtpZihvIT09ZSlmb3IodmFyIHM9MCxhPShpPWU9bykubGVuZ3RoO3M8YTsrK3MpaWYoaVtzXS5uYW1lPT09dCl7KGk9aS5zbGljZSgpKS5zcGxpY2UocywxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIEZUZShuLHQsZSl7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bXModGhpcyxuKSxzPW8udHdlZW47aWYocyE9PWkpe3I9KGk9cykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfW8udHdlZW49cn19ZnVuY3Rpb24gcjAobix0LGUpe3ZhciBpPW4uX2lkO3JldHVybiBuLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1tcyh0aGlzLGkpOyhyLnZhbHVlfHwoci52YWx1ZT17fSkpW3RdPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24ocil7cmV0dXJuIGhvKHIsaSkudmFsdWVbdF19fWZ1bmN0aW9uIF9EKG4sdCl7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgdD9Cbzp0IGluc3RhbmNlb2YgR2w/emY6KGU9R2wodCkpPyh0PWUsemYpOkF5KShuLHQpfWZ1bmN0aW9uIE5UZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gTFRlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQlRlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gcz09PXI/bnVsbDpzPT09aT9vOm89dChpPXMsZSl9fWZ1bmN0aW9uIFZUZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gSFRlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToocz10aGlzLmdldEF0dHJpYnV0ZShuKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIHpUZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGwsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIEdUZShuLHQpe3ZhciBlLGk7ZnVuY3Rpb24gcigpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09aSYmKGU9KGk9bykmJmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19KG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBXVGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQuY2FsbCh0aGlzLGUpKX19KG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBxVGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtCeSh0aGlzLG4pLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gWVRlKG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCeSh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFhUZShuLHQpe3JldHVybiBmdW5jdGlvbigpe21zKHRoaXMsbikuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBRVGUobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe21zKHRoaXMsbikuZHVyYXRpb249dH19dmFyIGVEZT1QZC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gT0sobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19dmFyIHVEZT0wO2Z1bmN0aW9uIEtvKG4sdCxlLGkpe3RoaXMuX2dyb3Vwcz1uLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPWUsdGhpcy5faWQ9aX1mdW5jdGlvbiBiRCgpe3JldHVybisrdURlfXZhciBvMD1QZC5wcm90b3R5cGU7S28ucHJvdG90eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBQZCgpLnRyYW5zaXRpb24obil9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6S28sc2VsZWN0OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49TGYobikpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPTA7czxyOysrcylmb3IodmFyIGQsdSxhPWlbc10sbD1hLmxlbmd0aCxjPW9bc109bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKShkPWFbcF0pJiYodT1uLmNhbGwoZCxkLl9fZGF0YV9fLHAsYSkpJiYoIl9fZGF0YV9fImluIGQmJih1Ll9fZGF0YV9fPWQuX19kYXRhX18pLGNbcF09dSxKdShjW3BdLHQsZSxwLGMsaG8oZCxlKSkpO3JldHVybiBuZXcgS28obyx0aGlzLl9wYXJlbnRzLHQsZSl9LHNlbGVjdEFsbDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVN5KG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxzPVtdLGE9MDthPHI7KythKWZvcih2YXIgZCxsPWlbYV0sYz1sLmxlbmd0aCx1PTA7dTxjOysrdSlpZihkPWxbdV0pe2Zvcih2YXIgZixwPW4uY2FsbChkLGQuX19kYXRhX18sdSxsKSxtPWhvKGQsZSksYj0wLE09cC5sZW5ndGg7YjxNOysrYikoZj1wW2JdKSYmSnUoZix0LGUsYixwLG0pO28ucHVzaChwKSxzLnB1c2goZCl9cmV0dXJuIG5ldyBLbyhvLHMsdCxlKX0sZmlsdGVyOmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1FeShuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgbCxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09W10sYz0wO2M8czsrK2MpKGw9b1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxvKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgS28oaSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbihuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgsbz1NYXRoLm1pbihpLGUubGVuZ3RoKSxzPW5ldyBBcnJheShpKSxhPTA7YTxvOysrYSlmb3IodmFyIHAsbD10W2FdLGM9ZVthXSxkPWwubGVuZ3RoLHU9c1thXT1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2YpKHA9bFtmXXx8Y1tmXSkmJih1W2ZdPXApO2Zvcig7YTxpOysrYSlzW2FdPXRbYV07cmV0dXJuIG5ldyBLbyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgZURlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1iRCgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLHM9aVtvXSxhPXMubGVuZ3RoLGM9MDtjPGE7KytjKWlmKGw9c1tjXSl7dmFyIGQ9aG8obCx0KTtKdShsLG4sZSxjLHMse3RpbWU6ZC50aW1lK2QuZGVsYXkrZC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmQuZHVyYXRpb24sZWFzZTpkLmVhc2V9KX1yZXR1cm4gbmV3IEtvKGksdGhpcy5fcGFyZW50cyxuLGUpfSxjYWxsOm8wLmNhbGwsbm9kZXM6bzAubm9kZXMsbm9kZTpvMC5ub2RlLHNpemU6bzAuc2l6ZSxlbXB0eTpvMC5lbXB0eSxlYWNoOm8wLmVhY2gsb246ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2hvKHRoaXMubm9kZSgpLGUpLm9uLm9uKG4pOnRoaXMuZWFjaChmdW5jdGlvbihuLHQsZSl7dmFyIGkscixvPWZ1bmN0aW9uKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP0J5Om1zO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPW8odGhpcyxuKSxhPXMub247YSE9PWkmJihyPShpPWEpLmNvcHkoKSkub24odCxlKSxzLm9uPXJ9fShlLG4sdCkpfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UmQobiksaT0idHJhbnNmb3JtIj09PWU/cEw6X0Q7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGUubG9jYWw/elRlOkhUZSkoZSxpLHIwKHRoaXMsImF0dHIuIituLHQpKTpudWxsPT10PyhlLmxvY2FsP0xUZTpOVGUpKGUpOihlLmxvY2FsP1ZUZTpCVGUpKGUsaSx0KSl9LGF0dHJUd2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPSJhdHRyLiIrbjtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7dmFyIGk9UmQobik7cmV0dXJuIHRoaXMudHdlZW4oZSwoaS5sb2NhbD9HVGU6V1RlKShpLHQpKX0sc3R5bGU6ZnVuY3Rpb24obix0LGUpe3ZhciBpPSJ0cmFuc2Zvcm0iPT0obis9IiIpP3VMOl9EO3JldHVybiBudWxsPT10P3RoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVp1KHRoaXMsbikscz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxadSh0aGlzLG4pKTtyZXR1cm4gbz09PXM/bnVsbDpvPT09ZSYmcz09PWk/cjpyPXQoZT1vLGk9cyl9fShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixPSyhuKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1adSh0aGlzLG4pLGE9ZSh0aGlzKSxsPWErIiI7cmV0dXJuIG51bGw9PWEmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGw9YT1adSh0aGlzLG4pKSxzPT09bD9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fShuLGkscjAodGhpcywic3R5bGUuIituLHQpKSkuZWFjaChmdW5jdGlvbihuLHQpe3ZhciBlLGkscixhLG89InN0eWxlLiIrdCxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPW1zKHRoaXMsbiksYz1sLm9uLGQ9bnVsbD09bC52YWx1ZVtvXT9hfHwoYT1PSyh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PWQpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKHMscj1kKSxsLm9uPWl9fSh0aGlzLl9pZCxuKSk6dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVp1KHRoaXMsbik7cmV0dXJuIHM9PT1yP251bGw6cz09PWk/bzpvPXQoaT1zLGUpfX0obixpLHQpLGUpLm9uKCJlbmQuc3R5bGUuIituLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxyO2Z1bmN0aW9uIG8oKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PXImJihpPShyPXMpJiZmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19KG4scyxlKSksaX1yZXR1cm4gby5fdmFsdWU9dCxvfShuLHQsZT8/IiIpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX0ocjAodGhpcywidGV4dCIsbikpOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19KG51bGw9PW4/IiI6bisiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24obil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LGZ1bmN0aW9uKG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PW4uY2FsbCh0aGlzLHQpfX0ocikpLHR9cmV0dXJuIGkuX3ZhbHVlPW4saX0obikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO2lmKG4rPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBzLGk9aG8odGhpcy5ub2RlKCksZSkudHdlZW4scj0wLG89aS5sZW5ndGg7cjxvOysrcilpZigocz1pW3JdKS5uYW1lPT09bilyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P2tUZTpGVGUpKGUsbix0KSl9LGRlbGF5OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/cVRlOllUZSkodCxuKSk6aG8odGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/WFRlOlFUZSkodCxuKSk6aG8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uKG4sdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe21zKHRoaXMsbikuZWFzZT10fX0odCxuKSk6aG8odGhpcy5ub2RlKCksdCkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLHMpe3ZhciBhPXt2YWx1ZTpzfSxsPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0tciYmbygpfX07ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9bXModGhpcyxpKSxkPWMub247ZCE9PW4mJigodD0obj1kKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goYSksdC5fLmludGVycnVwdC5wdXNoKGEpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX19O3ZhciBiTD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24obil7cmV0dXJuKChuKj0yKTw9MT9uKm4qbjoobi09MikqbipuKzIpLzJ9fTtmdW5jdGlvbiBwRGUobix0KXtmb3IodmFyIGU7IShlPW4uX190cmFuc2l0aW9uKXx8IShlPWVbdF0pOylpZighKG49bi5wYXJlbnROb2RlKSlyZXR1cm4gYkwudGltZT1pMCgpLGJMO3JldHVybiBlfWZ1bmN0aW9uIHZMKG4pe3JldHVybnt0eXBlOm59fVBkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeyFmdW5jdGlvbihuLHQpe3ZhciBpLHIscyxlPW4uX190cmFuc2l0aW9uLG89ITA7aWYoZSl7Zm9yKHMgaW4gdD1udWxsPT10P251bGw6dCsiIixlKShpPWVbc10pLm5hbWU9PT10PyhyPWkuc3RhdGU+aEQmJmkuc3RhdGU8Z0QsaS5zdGF0ZT1MeSxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtzXSk6bz0hMTtvJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fSh0aGlzLG4pfSl9LFBkLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKG4pe3ZhciB0LGU7biBpbnN0YW5jZW9mIEtvPyh0PW4uX2lkLG49bi5fbmFtZSk6KHQ9YkQoKSwoZT1iTCkudGltZT1pMCgpLG49bnVsbD09bj9udWxsOm4rIiIpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPTA7bzxyOysrbylmb3IodmFyIGwscz1pW29dLGE9cy5sZW5ndGgsYz0wO2M8YTsrK2MpKGw9c1tjXSkmJkp1KGwsbix0LGMscyxlfHxwRGUobCx0KSk7cmV0dXJuIG5ldyBLbyhpLHRoaXMuX3BhcmVudHMsbix0KX0sWyJ3IiwiZSJdLm1hcCh2TCksWyJuIiwicyJdLm1hcCh2TCksWyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAodkwpLE1hdGg7dmFyIF9hPSIkIjtmdW5jdGlvbiB5RCgpe31mdW5jdGlvbiBqSyhuLHQpe3ZhciBlPW5ldyB5RDtpZihuIGluc3RhbmNlb2YgeUQpbi5lYWNoKGZ1bmN0aW9uKGEsbCl7ZS5zZXQobCxhKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIG8saT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5zZXQoaSxuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuc2V0KHQobz1uW2ldLGksbiksbyl9ZWxzZSBpZihuKWZvcih2YXIgcyBpbiBuKWUuc2V0KHMsbltzXSk7cmV0dXJuIGV9ZnVuY3Rpb24geEQoKXt9eUQucHJvdG90eXBlPWpLLnByb3RvdHlwZT17Y29uc3RydWN0b3I6eUQsaGFzOmZ1bmN0aW9uKG4pe3JldHVybiBfYStuIGluIHRoaXN9LGdldDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1tfYStuXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXNbX2Erbl09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9X2ErbjtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09X2EmJmRlbGV0ZSB0aGlzW25dfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PV9hJiZuLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIG59LHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1fYSYmbi5wdXNoKHRoaXNbdF0pO3JldHVybiBufSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PV9hJiZuLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gbn0sc2l6ZTpmdW5jdGlvbigpe3ZhciBuPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PV9hJiYrK247cmV0dXJuIG59LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpaWYoblswXT09PV9hKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1fYSYmbih0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTt2YXIgV2Y9aksucHJvdG90eXBlO2Z1bmN0aW9uIHFmKG4sdCl7aWYoKGU9KG49dD9uLnRvRXhwb25lbnRpYWwodC0xKTpuLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBlLGk9bi5zbGljZSgwLGUpO3JldHVybltpLmxlbmd0aD4xP2lbMF0raS5zbGljZSgyKTppLCtuLnNsaWNlKGUrMSldfWZ1bmN0aW9uIEdjKG4pe3JldHVybihuPXFmKE1hdGguYWJzKG4pKSk/blsxXTpOYU59eEQucHJvdG90eXBlPWZ1bmN0aW9uKG4sdCl7dmFyIGU9bmV3IHhEO2lmKG4gaW5zdGFuY2VvZiB4RCluLmVhY2goZnVuY3Rpb24obyl7ZS5hZGQobyl9KTtlbHNlIGlmKG4pe3ZhciBpPS0xLHI9bi5sZW5ndGg7aWYobnVsbD09dClmb3IoOysraTxyOyllLmFkZChuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuYWRkKHQobltpXSxpLG4pKX1yZXR1cm4gZX0ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4RCxoYXM6V2YuaGFzLGFkZDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1tfYSsobis9IiIpXT1uLHRoaXN9LHJlbW92ZTpXZi5yZW1vdmUsY2xlYXI6V2YuY2xlYXIsdmFsdWVzOldmLmtleXMsc2l6ZTpXZi5zaXplLGVtcHR5OldmLmVtcHR5LGVhY2g6V2YuZWFjaH0sTWF0aCxNYXRoLnNxcnQoNSk7dmFyIHlMLHhEZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiAkdShuKXtpZighKHQ9eERlLmV4ZWMobikpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrbik7dmFyIHQ7cmV0dXJuIG5ldyBDRCh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1mdW5jdGlvbiBDRChuKXt0aGlzLmZpbGw9dm9pZCAwPT09bi5maWxsPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1uLmFsaWduPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1uLnNpZ24/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1uLnN5bWJvbD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1uLndpZHRoP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1uLnByZWNpc2lvbj92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09bi50eXBlPyIiOm4udHlwZSsiIn1mdW5jdGlvbiB4TChuLHQpe3ZhciBlPXFmKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9JHUucHJvdG90eXBlPUNELnByb3RvdHlwZSxDRC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgQ0w9eyIlIjpmdW5jdGlvbihuLHQpe3JldHVybigxMDAqbikudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gbisiIn0sZDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5hYnMobj1NYXRoLnJvdW5kKG4pKT49MWUyMT9uLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6bi50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9GaXhlZCh0KX0sZzpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHhMKDEwMCpuLHQpfSxyOnhMLHM6ZnVuY3Rpb24obix0KXt2YXIgZT1xZihuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLG89ci0oeUw9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioci8zKSkpKSsxLHM9aS5sZW5ndGg7cmV0dXJuIG89PT1zP2k6bz5zP2krbmV3IEFycmF5KG8tcysxKS5qb2luKCIwIik6bz4wP2kuc2xpY2UoMCxvKSsiLiIraS5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStxZihuLE1hdGgubWF4KDAsdCtvLTEpKVswXX0sWDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBNTChuKXtyZXR1cm4gbn12YXIgTUQsUXIsd0QsS0s9QXJyYXkucHJvdG90eXBlLm1hcCxKSz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBybCgpe3JldHVybiBNYXRoLnJhbmRvbSgpfU1EPWZ1bmN0aW9uKG4pe3ZhciB0PXZvaWQgMD09PW4uZ3JvdXBpbmd8fHZvaWQgMD09PW4udGhvdXNhbmRzP01MOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7Zm9yKHZhciByPWUubGVuZ3RoLG89W10scz0wLGE9blswXSxsPTA7cj4wJiZhPjAmJihsK2ErMT5pJiYoYT1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChlLnN1YnN0cmluZyhyLT1hLHIrYSkpLCEoKGwrPWErMSk+aSkpOylhPW5bcz0ocysxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fShLSy5jYWxsKG4uZ3JvdXBpbmcsTnVtYmVyKSxuLnRob3VzYW5kcysiIiksZT12b2lkIDA9PT1uLmN1cnJlbmN5PyIiOm4uY3VycmVuY3lbMF0rIiIsaT12b2lkIDA9PT1uLmN1cnJlbmN5PyIiOm4uY3VycmVuY3lbMV0rIiIscj12b2lkIDA9PT1uLmRlY2ltYWw/Ii4iOm4uZGVjaW1hbCsiIixvPXZvaWQgMD09PW4ubnVtZXJhbHM/TUw6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bK2VdfSl9fShLSy5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSkscz12b2lkIDA9PT1uLnBlcmNlbnQ/IiUiOm4ucGVyY2VudCsiIixhPXZvaWQgMD09PW4ubWludXM/Ii0iOm4ubWludXMrIiIsbD12b2lkIDA9PT1uLm5hbj8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKHUpe3ZhciBwPSh1PSR1KHUpKS5maWxsLGY9dS5hbGlnbixtPXUuc2lnbixiPXUuc3ltYm9sLE09dS56ZXJvLHk9dS53aWR0aCx4PXUuY29tbWEsUj11LnByZWNpc2lvbixBPXUudHJpbSxWPXUudHlwZTsibiI9PT1WPyh4PSEwLFY9ImciKTpDTFtWXXx8KHZvaWQgMD09PVImJihSPTEyKSxBPSEwLFY9ImciKSwoTXx8IjAiPT09cCYmIj0iPT09ZikmJihNPSEwLHA9IjAiLGY9Ij0iKTt2YXIgdGU9IiQiPT09Yj9lOiIjIj09PWImJi9bYm94WF0vLnRlc3QoVik/IjAiK1YudG9Mb3dlckNhc2UoKToiIixLPSIkIj09PWI/aTovWyVwXS8udGVzdChWKT9zOiIiLHhlPUNMW1ZdLFhlPS9bZGVmZ3BycyVdLy50ZXN0KFYpO2Z1bmN0aW9uIERlKEQpe3ZhciBmZSxiZSxuZSxyZT10ZSxjZT1LO2lmKCJjIj09PVYpY2U9eGUoRCkrY2UsRD0iIjtlbHNle3ZhciBkZT0oRD0rRCk8MHx8MS9EPDA7aWYoRD1pc05hTihEKT9sOnhlKE1hdGguYWJzKEQpLFIpLEEmJihEPWZ1bmN0aW9uKG4pe2U6Zm9yKHZhciByLHQ9bi5sZW5ndGgsZT0xLGk9LTE7ZTx0OysrZSlzd2l0Y2gobltlXSl7Y2FzZSIuIjppPXI9ZTticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1lKSxyPWU7YnJlYWs7ZGVmYXVsdDppZighK25bZV0pYnJlYWsgZTtpPjAmJihpPTApfXJldHVybiBpPjA/bi5zbGljZSgwLGkpK24uc2xpY2UocisxKTpufShEKSksZGUmJjA9PStEJiYiKyIhPT1tJiYoZGU9ITEpLHJlPShkZT8iKCI9PT1tP206YToiLSI9PT1tfHwiKCI9PT1tPyIiOm0pK3JlLGNlPSgicyI9PT1WP0pLWzgreUwvM106IiIpK2NlKyhkZSYmIigiPT09bT8iKSI6IiIpLFhlKWZvcihmZT0tMSxiZT1ELmxlbmd0aDsrK2ZlPGJlOylpZig0OD4obmU9RC5jaGFyQ29kZUF0KGZlKSl8fG5lPjU3KXtjZT0oNDY9PT1uZT9yK0Quc2xpY2UoZmUrMSk6RC5zbGljZShmZSkpK2NlLEQ9RC5zbGljZSgwLGZlKTticmVha319eCYmIU0mJihEPXQoRCwxLzApKTt2YXIgcGU9cmUubGVuZ3RoK0QubGVuZ3RoK2NlLmxlbmd0aCxqZT1wZTx5P25ldyBBcnJheSh5LXBlKzEpLmpvaW4ocCk6IiI7c3dpdGNoKHgmJk0mJihEPXQoamUrRCxqZS5sZW5ndGg/eS1jZS5sZW5ndGg6MS8wKSxqZT0iIiksZil7Y2FzZSI8IjpEPXJlK0QrY2UramU7YnJlYWs7Y2FzZSI9IjpEPXJlK2plK0QrY2U7YnJlYWs7Y2FzZSJeIjpEPWplLnNsaWNlKDAscGU9amUubGVuZ3RoPj4xKStyZStEK2NlK2plLnNsaWNlKHBlKTticmVhaztkZWZhdWx0OkQ9amUrcmUrRCtjZX1yZXR1cm4gbyhEKX1yZXR1cm4gUj12b2lkIDA9PT1SPzY6L1tncHJzXS8udGVzdChWKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLFIpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLFIpKSxEZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB1KyIifSxEZX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHUscCl7dmFyIGY9YygoKHU9JHUodSkpLnR5cGU9ImYiLHUpKSxtPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEdjKHApLzMpKSksYj1NYXRoLnBvdygxMCwtbSksTT1KS1s4K20vM107cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBmKGIqeSkrTX19fX0oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLFFyPU1ELmZvcm1hdCx3RD1NRC5mb3JtYXRQcmVmaXgsZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhyPWksaT0wKTpyLT1pLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSpyK2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KHJsKTt2YXIgREw9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7dmFyIG8scztyZXR1cm4gaT1udWxsPT1pPzA6K2kscj1udWxsPT1yPzE6K3IsZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1vKWE9byxvPW51bGw7ZWxzZSBkb3tvPTIqdCgpLTEsYT0yKnQoKS0xLHM9bypvK2EqYX13aGlsZSghc3x8cz4xKTtyZXR1cm4gaStyKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHMpL3MpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShybCksSUw9KGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSgpe3ZhciBpPURMLnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGkoKSl9fXJldHVybiBlLnNvdXJjZT1uLGV9KHJsKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAsbz0wO288aTsrK28pcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShybCkpO2Z1bmN0aW9uIFFzKG4sdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShuKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKG4pfXJldHVybiB0aGlzfShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7dmFyIHI9SUwuc291cmNlKHQpKGkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0pKHJsKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShybCk7dmFyIGVKPUFycmF5LnByb3RvdHlwZSx6eT1lSi5tYXAsWWY9ZUouc2xpY2U7ZnVuY3Rpb24gQUwobil7cmV0dXJuK259dmFyIG5KPVswLDFdO2Z1bmN0aW9uIFpzKG4pe3JldHVybiBufWZ1bmN0aW9uIFJMKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9OmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX0oaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBpSihuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIFREZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPVJMKHIsaSksbz1lKHMsbykpOihpPVJMKGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBERGUobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPVJMKG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1IYyhuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBlcChuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiBVeSgpe3ZhciBpLHIsbyxhLGwsYyxuPW5KLHQ9bkosZT1VZixzPVpzO2Z1bmN0aW9uIGQoKXtyZXR1cm4gYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk+Mj9ERGU6VERlLGw9Yz1udWxsLHV9ZnVuY3Rpb24gdShwKXtyZXR1cm4gaXNOYU4ocD0rcCk/bzoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShzKHApKSl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKHApe3JldHVybiBzKHIoKGN8fChjPWEodCxuLm1hcChpKSxCbykpKShwKSkpfSx1LmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj16eS5jYWxsKHAsQUwpLHM9PT1ac3x8KHM9aUoobikpLGQoKSk6bi5zbGljZSgpfSx1LnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PVlmLmNhbGwocCksZCgpKTp0LnNsaWNlKCl9LHUucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD1ZZi5jYWxsKHApLGU9bEwsZCgpfSx1LmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/aUoobik6WnMsdSk6cyE9PVpzfSx1LmludGVycG9sYXRlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXAsZCgpKTplfSx1LnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cCx1KTpvfSxmdW5jdGlvbihwLGYpe3JldHVybiBpPXAscj1mLGQoKX19ZnVuY3Rpb24gankobix0KXtyZXR1cm4gVXkoKShuLHQpfWZ1bmN0aW9uIFdsKCl7dmFyIG49ankoWnMsWnMpO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZXAobixXbCgpKX0sUXMuYXBwbHkobixhcmd1bWVudHMpLGZ1bmN0aW9uKG4pe3ZhciB0PW4uZG9tYWluO3JldHVybiBuLnRpY2tzPWZ1bmN0aW9uKGUpe3ZhciBpPXQoKTtyZXR1cm4gTXkoaVswXSxpW2kubGVuZ3RoLTFdLGU/PzEwKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXt2YXIgbyxyPUFkKG4sdCxlKTtzd2l0Y2goKGk9JHUoaT8/IixmIikpLnR5cGUpe2Nhc2UicyI6dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpO3JldHVybiBudWxsPT1pLnByZWNpc2lvbiYmIWlzTmFOKG89ZnVuY3Rpb24obix0KXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihHYyh0KS8zKSkpLUdjKE1hdGguYWJzKG4pKSl9KHIscykpJiYoaS5wcmVjaXNpb249byksd0QoaSxzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsPT1pLnByZWNpc2lvbiYmIWlzTmFOKG89ZnVuY3Rpb24obix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCxHYyh0KS1HYyhuKSkrMX0ocixNYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyh0KSkpKSYmKGkucHJlY2lzaW9uPW8tKCJlIj09PWkudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsPT1pLnByZWNpc2lvbiYmIWlzTmFOKG89ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubWF4KDAsLUdjKE1hdGguYWJzKG4pKSl9KHIpKSYmKGkucHJlY2lzaW9uPW8tMiooIiUiPT09aS50eXBlKSl9cmV0dXJuIFFyKGkpfShyWzBdLHJbci5sZW5ndGgtMV0sZT8/MTAsaSl9LG4ubmljZT1mdW5jdGlvbihlKXtudWxsPT1lJiYoZT0xMCk7dmFyIGwsaT10KCkscj0wLG89aS5sZW5ndGgtMSxzPWlbcl0sYT1pW29dO3JldHVybiBhPHMmJihsPXMscz1hLGE9bCxsPXIscj1vLG89bCksKGw9WmcocyxhLGUpKT4wP2w9Wmcocz1NYXRoLmZsb29yKHMvbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsZSk6bDwwJiYobD1aZyhzPU1hdGguY2VpbChzKmwpL2wsYT1NYXRoLmZsb29yKGEqbCkvbCxlKSksbD4wPyhpW3JdPU1hdGguZmxvb3Iocy9sKSpsLGlbb109TWF0aC5jZWlsKGEvbCkqbCx0KGkpKTpsPDAmJihpW3JdPU1hdGguY2VpbChzKmwpL2wsaVtvXT1NYXRoLmZsb29yKGEqbCkvbCx0KGkpKSxufSxufShuKX1mdW5jdGlvbiBTRChuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIHJKKG4pe3JldHVybiBNYXRoLmxvZyhuKX1mdW5jdGlvbiBvSihuKXtyZXR1cm4gTWF0aC5leHAobil9ZnVuY3Rpb24gSURlKG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gQURlKG4pe3JldHVybi1NYXRoLmV4cCgtbil9ZnVuY3Rpb24gUkRlKG4pe3JldHVybiBpc0Zpbml0ZShuKT8rKCIxZSIrbik6bjwwPzA6bn1mdW5jdGlvbiBzSihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiBHeSgpe3ZhciBuPWZ1bmN0aW9uKG4pe3ZhciByLG8sdD1uKHJKLG9KKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP1JEZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9c0oociksbz1zSihvKSxuKElEZSxBRGUpKTpuKHJKLG9KKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EscygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxzKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgdSxsPWUoKSxjPWxbMF0sZD1sW2wubGVuZ3RoLTFdOyh1PWQ8YykmJihwPWMsYz1kLGQ9cCk7dmFyIG0sYixNLHA9cihjKSxmPXIoZCkseT1udWxsPT1hPzEwOithLHg9W107aWYoIShpJTEpJiZmLXA8eSl7aWYocD1NYXRoLnJvdW5kKHApLTEsZj1NYXRoLnJvdW5kKGYpKzEsYz4wKXtmb3IoO3A8ZjsrK3ApZm9yKGI9MSxtPW8ocCk7YjxpOysrYilpZighKChNPW0qYik8Yykpe2lmKE0+ZClicmVhazt4LnB1c2goTSl9fWVsc2UgZm9yKDtwPGY7KytwKWZvcihiPWktMSxtPW8ocCk7Yj49MTstLWIpaWYoISgoTT1tKmIpPGMpKXtpZihNPmQpYnJlYWs7eC5wdXNoKE0pfX1lbHNlIHg9TXkocCxmLE1hdGgubWluKGYtcCx5KSkubWFwKG8pO3JldHVybiB1P3gucmV2ZXJzZSgpOnh9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKG51bGw9PWwmJihsPTEwPT09aT8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBsJiYobD1RcihsKSksYT09PTEvMClyZXR1cm4gbDtudWxsPT1hJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciB1PWQvbyhNYXRoLnJvdW5kKHIoZCkpKTtyZXR1cm4gdSppPGktLjUmJih1Kj1pKSx1PD1jP2woZCk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShTRChlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBvKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBvKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fShVeSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGVwKG4sR3koKSkuYmFzZShuLmJhc2UoKSl9LFFzLmFwcGx5KG4sYXJndW1lbnRzKSxufXZhciBrTD1uZXcgRGF0ZSxGTD1uZXcgRGF0ZTtmdW5jdGlvbiBpcihuLHQsZSxpKXtmdW5jdGlvbiByKG8pe3JldHVybiBuKG89MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiByLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBuKG89bmV3IERhdGUoK28pKSxvfSxyLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksbihvKSxvfSxyLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBzPXIobyksYT1yLmNlaWwobyk7cmV0dXJuIG8tczxhLW8/czphfSxyLm9mZnNldD1mdW5jdGlvbihvLHMpe3JldHVybiB0KG89bmV3IERhdGUoK28pLG51bGw9PXM/MTpNYXRoLmZsb29yKHMpKSxvfSxyLnJhbmdlPWZ1bmN0aW9uKG8scyxhKXt2YXIgYyxsPVtdO2lmKG89ci5jZWlsKG8pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShvPHMmJmE+MCkpcmV0dXJuIGw7ZG97bC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8sYSksbihvKX13aGlsZShjPG8mJm88cyk7cmV0dXJuIGx9LHIuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBpcihmdW5jdGlvbihzKXtpZihzPj1zKWZvcig7bihzKSwhbyhzKTspcy5zZXRUaW1lKHMtMSl9LGZ1bmN0aW9uKHMsYSl7aWYocz49cylpZihhPDApZm9yKDsrK2E8PTA7KWZvcig7dChzLC0xKSwhbyhzKTspO2Vsc2UgZm9yKDstLWE+PTA7KWZvcig7dChzLDEpLCFvKHMpOyk7fSl9LGUmJihyLmNvdW50PWZ1bmN0aW9uKG8scyl7cmV0dXJuIGtMLnNldFRpbWUoK28pLEZMLnNldFRpbWUoK3MpLG4oa0wpLG4oRkwpLE1hdGguZmxvb3IoZShrTCxGTCkpfSxyLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksaXNGaW5pdGUobykmJm8+MD9vPjE/ci5maWx0ZXIoaT9mdW5jdGlvbihzKXtyZXR1cm4gaShzKSVvPT0wfTpmdW5jdGlvbihzKXtyZXR1cm4gci5jb3VudCgwLHMpJW89PTB9KTpyOm51bGx9KSxyfXZhciBFRD1pcihmdW5jdGlvbigpe30sZnVuY3Rpb24obix0KXtuLnNldFRpbWUoK24rdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQtbn0pO0VELmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGguZmxvb3IobiksaXNGaW5pdGUobikmJm4+MD9uPjE/aXIoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9uKSpuKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpuKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9ufSk6RUQ6bnVsbH07dmFyIFREPUVELGtkPTZlNCxJRD02MDQ4ZTUsbEo9aXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLEFEPWxKLGRKPWlyKGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktMWUzKm4uZ2V0U2Vjb25kcygpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUoK24rdCprZCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikva2R9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1pbnV0ZXMoKX0pLExMPWRKLHVKPWlyKGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktMWUzKm4uZ2V0U2Vjb25kcygpLW4uZ2V0TWludXRlcygpKmtkKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUoK24rMzZlNSp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8zNmU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRIb3VycygpfSksQkw9dUoscEo9aXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqa2QpLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLHMwPXBKO2Z1bmN0aW9uIFpmKG4pe3JldHVybiBpcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1uKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKmtkKS9JRH0pfXZhciBLZj1aZigwKSxhMD1aZigxKSx0cD0oWmYoMiksWmYoMyksWmYoNCkpLGJKPShaZig1KSxaZig2KSxpcihmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsxMioodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSksVkw9YkosSEw9aXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtITC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP2lyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciBGZD1ITCx2Sj1pcihmdW5jdGlvbihuKXtuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRGF0ZShuLmdldFVUQ0RhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS84NjRlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF0ZSgpLTF9KSxSRD12SjtmdW5jdGlvbiBKZihuKXtyZXR1cm4gaXIoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctbiklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9JRH0pfXZhciBXeT1KZigwKSxsMD1KZigxKSxucD0oSmYoMiksSmYoMyksSmYoNCkpLHpMPShKZig1KSxKZig2KSxpcihmdW5jdGlvbihuKXtuLnNldFVUQ01vbnRoKDAsMSksbi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0Z1bGxZZWFyKG4uZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLW4uZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRnVsbFllYXIoKX0pKTt6TC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP2lyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciAkZj16TDtmdW5jdGlvbiBVTChuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCl9ZnVuY3Rpb24gakwobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSl9ZnVuY3Rpb24gcXkobix0LGUpe3JldHVybnt5Om4sbTp0LGQ6ZSxIOjAsTTowLFM6MCxMOjB9fXZhciBjMCxkMCxTSj17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sJERlPS9eJS8sZUllPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBPaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiB0SWUobil7cmV0dXJuIG4ucmVwbGFjZShlSWUsIlxcJCYiKX1mdW5jdGlvbiBZeShuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAodEllKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gWHkobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gbkllKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBySWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb0llKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFSihuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSs0KSk7cmV0dXJuIGk/KG4ueT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUSihuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ueT0raVswXSsoK2lbMF0+Njg/MTkwMDoyZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFJZShuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4ucT0zKmlbMF0tMyxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLm09aVswXS0xLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERKKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGRJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSihuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1SWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLk09K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcEllKG4sdCxlKXt2YXIgaT1Uby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5TPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGZJZShuLHQsZSl7dmFyIGk9VG8uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLkw9TWF0aC5mbG9vcihpWzBdLzFlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaEllKG4sdCxlKXt2YXIgaT0kRGUuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBnSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIGk/KG4uUT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfSWUobix0LGUpe3ZhciBpPVRvLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIGk/KG4ucz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBSihuLHQpe3JldHVybiBPaShuLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIGJJZShuLHQpe3JldHVybiBPaShuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiB2SWUobix0KXtyZXR1cm4gT2kobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHlJZShuLHQpe3JldHVybiBPaSgxK3MwLmNvdW50KEZkKG4pLG4pLHQsMyl9ZnVuY3Rpb24gRkoobix0KXtyZXR1cm4gT2kobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhJZShuLHQpe3JldHVybiBGSihuLHQpKyIwMDAifWZ1bmN0aW9uIENJZShuLHQpe3JldHVybiBPaShuLmdldE1vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIE1JZShuLHQpe3JldHVybiBPaShuLmdldE1pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHdJZShuLHQpe3JldHVybiBPaShuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIFNJZShuKXt2YXIgdD1uLmdldERheSgpO3JldHVybiAwPT09dD83OnR9ZnVuY3Rpb24gRUllKG4sdCl7cmV0dXJuIE9pKEtmLmNvdW50KEZkKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBOSihuKXt2YXIgdD1uLmdldERheSgpO3JldHVybiB0Pj00fHwwPT09dD90cChuKTp0cC5jZWlsKG4pfWZ1bmN0aW9uIFRJZShuLHQpe3JldHVybiBuPU5KKG4pLE9pKHRwLmNvdW50KEZkKG4pLG4pKyg0PT09RmQobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gREllKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIElJZShuLHQpe3JldHVybiBPaShhMC5jb3VudChGZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gQUllKG4sdCl7cmV0dXJuIE9pKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBSSWUobix0KXtyZXR1cm4gT2koKG49TkoobikpLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gUEllKG4sdCl7cmV0dXJuIE9pKG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBPSWUobix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBPaSgobj1lPj00fHwwPT09ZT90cChuKTp0cC5jZWlsKG4pKS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGtJZShuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK09pKHQvNjB8MCwiMCIsMikrT2kodCU2MCwiMCIsMil9ZnVuY3Rpb24gUkoobix0KXtyZXR1cm4gT2kobi5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBGSWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gTkllKG4sdCl7cmV0dXJuIE9pKG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBMSWUobix0KXtyZXR1cm4gT2koMStSRC5jb3VudCgkZihuKSxuKSx0LDMpfWZ1bmN0aW9uIExKKG4sdCl7cmV0dXJuIE9pKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBCSWUobix0KXtyZXR1cm4gTEoobix0KSsiMDAwIn1mdW5jdGlvbiBWSWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBISWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB6SWUobix0KXtyZXR1cm4gT2kobi5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBVSWUobil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIGpJZShuLHQpe3JldHVybiBPaShXeS5jb3VudCgkZihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gQkoobil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8MD09PXQ/bnAobik6bnAuY2VpbChuKX1mdW5jdGlvbiBHSWUobix0KXtyZXR1cm4gbj1CSihuKSxPaShucC5jb3VudCgkZihuKSxuKSsoND09PSRmKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIFdJZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBxSWUobix0KXtyZXR1cm4gT2kobDAuY291bnQoJGYobiktMSxuKSx0LDIpfWZ1bmN0aW9uIFlJZShuLHQpe3JldHVybiBPaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gWEllKG4sdCl7cmV0dXJuIE9pKChuPUJKKG4pKS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFFJZShuLHQpe3JldHVybiBPaShuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gWkllKG4sdCl7dmFyIGU9bi5nZXRVVENEYXkoKTtyZXR1cm4gT2koKG49ZT49NHx8MD09PWU/bnAobik6bnAuY2VpbChuKSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBLSWUoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFBKKCl7cmV0dXJuIiUifWZ1bmN0aW9uIE9KKG4pe3JldHVybitufWZ1bmN0aW9uIGtKKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9YzA9ZnVuY3Rpb24obil7dmFyIHQ9bi5kYXRlVGltZSxlPW4uZGF0ZSxpPW4udGltZSxyPW4ucGVyaW9kcyxvPW4uZGF5cyxzPW4uc2hvcnREYXlzLGE9bi5tb250aHMsbD1uLnNob3J0TW9udGhzLGM9WXkociksZD1YeShyKSx1PVl5KG8pLHA9WHkobyksZj1ZeShzKSxtPVh5KHMpLGI9WXkoYSksTT1YeShhKSx5PVl5KGwpLHg9WHkobCksUj17YTpmdW5jdGlvbih2ZSl7cmV0dXJuIHNbdmUuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHZlKXtyZXR1cm4gb1t2ZS5nZXREYXkoKV19LGI6ZnVuY3Rpb24odmUpe3JldHVybiBsW3ZlLmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHZlKXtyZXR1cm4gYVt2ZS5nZXRNb250aCgpXX0sYzpudWxsLGQ6QUosZTpBSixmOnhJZSxnOlJJZSxHOk9JZSxIOmJJZSxJOnZJZSxqOnlJZSxMOkZKLG06Q0llLE06TUllLHA6ZnVuY3Rpb24odmUpe3JldHVybiByWysodmUuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih2ZSl7cmV0dXJuIDErfn4odmUuZ2V0TW9udGgoKS8zKX0sUTpPSixzOmtKLFM6d0llLHU6U0llLFU6RUllLFY6VEllLHc6REllLFc6SUllLHg6bnVsbCxYOm51bGwseTpBSWUsWTpQSWUsWjprSWUsIiUiOlBKfSxBPXthOmZ1bmN0aW9uKHZlKXtyZXR1cm4gc1t2ZS5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odmUpe3JldHVybiBvW3ZlLmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih2ZSl7cmV0dXJuIGxbdmUuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odmUpe3JldHVybiBhW3ZlLmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpSSixlOlJKLGY6QkllLGc6WEllLEc6WkllLEg6RkllLEk6TkllLGo6TEllLEw6TEosbTpWSWUsTTpISWUscDpmdW5jdGlvbih2ZSl7cmV0dXJuIHJbKyh2ZS5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHZlKXtyZXR1cm4gMSt+fih2ZS5nZXRVVENNb250aCgpLzMpfSxROk9KLHM6a0osUzp6SWUsdTpVSWUsVTpqSWUsVjpHSWUsdzpXSWUsVzpxSWUseDpudWxsLFg6bnVsbCx5OllJZSxZOlFJZSxaOktJZSwiJSI6UEp9LFY9e2E6ZnVuY3Rpb24odmUsbXQsZnQpe3ZhciBvZT1mLmV4ZWMobXQuc2xpY2UoZnQpKTtyZXR1cm4gb2U/KHZlLnc9bVtvZVswXS50b0xvd2VyQ2FzZSgpXSxmdCtvZVswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHZlLG10LGZ0KXt2YXIgb2U9dS5leGVjKG10LnNsaWNlKGZ0KSk7cmV0dXJuIG9lPyh2ZS53PXBbb2VbMF0udG9Mb3dlckNhc2UoKV0sZnQrb2VbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih2ZSxtdCxmdCl7dmFyIG9lPXkuZXhlYyhtdC5zbGljZShmdCkpO3JldHVybiBvZT8odmUubT14W29lWzBdLnRvTG93ZXJDYXNlKCldLGZ0K29lWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odmUsbXQsZnQpe3ZhciBvZT1iLmV4ZWMobXQuc2xpY2UoZnQpKTtyZXR1cm4gb2U/KHZlLm09TVtvZVswXS50b0xvd2VyQ2FzZSgpXSxmdCtvZVswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHZlLG10LGZ0KXtyZXR1cm4geGUodmUsdCxtdCxmdCl9LGQ6REosZTpESixmOm1JZSxnOlRKLEc6RUosSDpJSixJOklKLGo6ZEllLEw6ZkllLG06Y0llLE06dUllLHA6ZnVuY3Rpb24odmUsbXQsZnQpe3ZhciBvZT1jLmV4ZWMobXQuc2xpY2UoZnQpKTtyZXR1cm4gb2U/KHZlLnA9ZFtvZVswXS50b0xvd2VyQ2FzZSgpXSxmdCtvZVswXS5sZW5ndGgpOi0xfSxxOmxJZSxROmdJZSxzOl9JZSxTOnBJZSx1OmlJZSxVOnJJZSxWOm9JZSx3Om5JZSxXOnNJZSx4OmZ1bmN0aW9uKHZlLG10LGZ0KXtyZXR1cm4geGUodmUsZSxtdCxmdCl9LFg6ZnVuY3Rpb24odmUsbXQsZnQpe3JldHVybiB4ZSh2ZSxpLG10LGZ0KX0seTpUSixZOkVKLFo6YUllLCIlIjpoSWV9O2Z1bmN0aW9uIHRlKHZlLG10KXtyZXR1cm4gZnVuY3Rpb24oZnQpe3ZhciB1dCxzbixDbixvZT1bXSxzdD0tMSxZZT0wLF90PXZlLmxlbmd0aDtmb3IoZnQgaW5zdGFuY2VvZiBEYXRlfHwoZnQ9bmV3IERhdGUoK2Z0KSk7KytzdDxfdDspMzc9PT12ZS5jaGFyQ29kZUF0KHN0KSYmKG9lLnB1c2godmUuc2xpY2UoWWUsc3QpKSxudWxsIT0oc249U0pbdXQ9dmUuY2hhckF0KCsrc3QpXSk/dXQ9dmUuY2hhckF0KCsrc3QpOnNuPSJlIj09PXV0PyIgIjoiMCIsKENuPW10W3V0XSkmJih1dD1DbihmdCxzbikpLG9lLnB1c2godXQpLFllPXN0KzEpO3JldHVybiBvZS5wdXNoKHZlLnNsaWNlKFllLHN0KSksb2Uuam9pbigiIil9fWZ1bmN0aW9uIEsodmUsbXQpe3JldHVybiBmdW5jdGlvbihmdCl7dmFyIFllLF90LG9lPXF5KDE5MDAsdm9pZCAwLDEpO2lmKHhlKG9lLHZlLGZ0Kz0iIiwwKSE9ZnQubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG9lKXJldHVybiBuZXcgRGF0ZShvZS5RKTtpZigicyJpbiBvZSlyZXR1cm4gbmV3IERhdGUoMWUzKm9lLnMrKCJMImluIG9lP29lLkw6MCkpO2lmKG10JiYhKCJaImluIG9lKSYmKG9lLlo9MCksInAiaW4gb2UmJihvZS5IPW9lLkglMTIrMTIqb2UucCksdm9pZCAwPT09b2UubSYmKG9lLm09InEiaW4gb2U/b2UucTowKSwiViJpbiBvZSl7aWYob2UuVjwxfHxvZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIG9lfHwob2Uudz0xKSwiWiJpbiBvZT8oX3Q9KFllPWpMKHF5KG9lLnksMCwxKSkpLmdldFVUQ0RheSgpLFllPV90PjR8fDA9PT1fdD9sMC5jZWlsKFllKTpsMChZZSksWWU9UkQub2Zmc2V0KFllLDcqKG9lLlYtMSkpLG9lLnk9WWUuZ2V0VVRDRnVsbFllYXIoKSxvZS5tPVllLmdldFVUQ01vbnRoKCksb2UuZD1ZZS5nZXRVVENEYXRlKCkrKG9lLncrNiklNyk6KF90PShZZT1VTChxeShvZS55LDAsMSkpKS5nZXREYXkoKSxZZT1fdD40fHwwPT09X3Q/YTAuY2VpbChZZSk6YTAoWWUpLFllPXMwLm9mZnNldChZZSw3KihvZS5WLTEpKSxvZS55PVllLmdldEZ1bGxZZWFyKCksb2UubT1ZZS5nZXRNb250aCgpLG9lLmQ9WWUuZ2V0RGF0ZSgpKyhvZS53KzYpJTcpfWVsc2UoIlciaW4gb2V8fCJVImluIG9lKSYmKCJ3ImluIG9lfHwob2Uudz0idSJpbiBvZT9vZS51JTc6IlciaW4gb2U/MTowKSxfdD0iWiJpbiBvZT9qTChxeShvZS55LDAsMSkpLmdldFVUQ0RheSgpOlVMKHF5KG9lLnksMCwxKSkuZ2V0RGF5KCksb2UubT0wLG9lLmQ9IlciaW4gb2U/KG9lLncrNiklNys3Km9lLlctKF90KzUpJTc6b2Uudys3Km9lLlUtKF90KzYpJTcpO3JldHVybiJaImluIG9lPyhvZS5IKz1vZS5aLzEwMHwwLG9lLk0rPW9lLlolMTAwLGpMKG9lKSk6VUwob2UpfX1mdW5jdGlvbiB4ZSh2ZSxtdCxmdCxvZSl7Zm9yKHZhciB1dCxzbixzdD0wLFllPW10Lmxlbmd0aCxfdD1mdC5sZW5ndGg7c3Q8WWU7KXtpZihvZT49X3QpcmV0dXJuLTE7aWYoMzc9PT0odXQ9bXQuY2hhckNvZGVBdChzdCsrKSkpe2lmKHV0PW10LmNoYXJBdChzdCsrKSwhKHNuPVZbdXQgaW4gU0o/bXQuY2hhckF0KHN0KyspOnV0XSl8fChvZT1zbih2ZSxmdCxvZSkpPDApcmV0dXJuLTF9ZWxzZSBpZih1dCE9ZnQuY2hhckNvZGVBdChvZSsrKSlyZXR1cm4tMX1yZXR1cm4gb2V9cmV0dXJuIFIueD10ZShlLFIpLFIuWD10ZShpLFIpLFIuYz10ZSh0LFIpLEEueD10ZShlLEEpLEEuWD10ZShpLEEpLEEuYz10ZSh0LEEpLHtmb3JtYXQ6ZnVuY3Rpb24odmUpe3ZhciBtdD10ZSh2ZSs9IiIsUik7cmV0dXJuIG10LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZlfSxtdH0scGFyc2U6ZnVuY3Rpb24odmUpe3ZhciBtdD1LKHZlKz0iIiwhMSk7cmV0dXJuIG10LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZlfSxtdH0sdXRjRm9ybWF0OmZ1bmN0aW9uKHZlKXt2YXIgbXQ9dGUodmUrPSIiLEEpO3JldHVybiBtdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2ZX0sbXR9LHV0Y1BhcnNlOmZ1bmN0aW9uKHZlKXt2YXIgbXQ9Syh2ZSs9IiIsITApO3JldHVybiBtdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB2ZX0sbXR9fX0oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KSxkMD1jMC5mb3JtYXQ7dmFyIFF5PTFlMyxaeT02MCpReSxLeT02MCpaeSxKeT0yNCpLeSxKSWU9NypKeSxVSj0zMCpKeSxxTD0zNjUqSnk7ZnVuY3Rpb24gJEllKG4pe3JldHVybiBuZXcgRGF0ZShuKX1mdW5jdGlvbiBlQWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gWUwobix0LGUsaSxyLG8scyxhLGwpe3ZhciBjPWp5KFpzLFpzKSxkPWMuaW52ZXJ0LHU9Yy5kb21haW4scD1sKCIuJUwiKSxmPWwoIjolUyIpLG09bCgiJUk6JU0iKSxiPWwoIiVJICVwIiksTT1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksUj1sKCIlWSIpLEE9W1tzLDEsUXldLFtzLDUsNSpReV0sW3MsMTUsMTUqUXldLFtzLDMwLDMwKlF5XSxbbywxLFp5XSxbbyw1LDUqWnldLFtvLDE1LDE1Klp5XSxbbywzMCwzMCpaeV0sW3IsMSxLeV0sW3IsMywzKkt5XSxbciw2LDYqS3ldLFtyLDEyLDEyKkt5XSxbaSwxLEp5XSxbaSwyLDIqSnldLFtlLDEsSkllXSxbdCwxLFVKXSxbdCwzLDMqVUpdLFtuLDEscUxdXTtmdW5jdGlvbiBWKEspe3JldHVybihzKEspPEs/cDpvKEspPEs/ZjpyKEspPEs/bTppKEspPEs/Yjp0KEspPEs/ZShLKTxLP006eTpuKEspPEs/eDpSKShLKX1mdW5jdGlvbiB0ZShLLHhlLFhlLERlKXtpZihudWxsPT1LJiYoSz0xMCksIm51bWJlciI9PXR5cGVvZiBLKXt2YXIgRD1NYXRoLmFicyhYZS14ZSkvSyxyZT1DeShmdW5jdGlvbihjZSl7cmV0dXJuIGNlWzJdfSkucmlnaHQoQSxEKTtyZT09PUEubGVuZ3RoPyhEZT1BZCh4ZS9xTCxYZS9xTCxLKSxLPW4pOnJlPyhEZT0ocmU9QVtEL0FbcmUtMV1bMl08QVtyZV1bMl0vRD9yZS0xOnJlXSlbMV0sSz1yZVswXSk6KERlPU1hdGgubWF4KEFkKHhlLFhlLEspLDEpLEs9YSl9cmV0dXJuIG51bGw9PURlP0s6Sy5ldmVyeShEZSl9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKEspe3JldHVybiBuZXcgRGF0ZShkKEspKX0sYy5kb21haW49ZnVuY3Rpb24oSyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dSh6eS5jYWxsKEssZUFlKSk6dSgpLm1hcCgkSWUpfSxjLnRpY2tzPWZ1bmN0aW9uKEsseGUpe3ZhciBjZSxYZT11KCksRGU9WGVbMF0sRD1YZVtYZS5sZW5ndGgtMV0scmU9RDxEZTtyZXR1cm4gcmUmJihjZT1EZSxEZT1ELEQ9Y2UpLGNlPShjZT10ZShLLERlLEQseGUpKT9jZS5yYW5nZShEZSxEKzEpOltdLHJlP2NlLnJldmVyc2UoKTpjZX0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEsseGUpe3JldHVybiBudWxsPT14ZT9WOmwoeGUpfSxjLm5pY2U9ZnVuY3Rpb24oSyx4ZSl7dmFyIFhlPXUoKTtyZXR1cm4oSz10ZShLLFhlWzBdLFhlW1hlLmxlbmd0aC0xXSx4ZSkpP3UoU0QoWGUsSykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBlcChjLFlMKG4sdCxlLGkscixvLHMsYSxsKSl9LGN9ZnVuY3Rpb24gZW0oKXtyZXR1cm4gUXMuYXBwbHkoWUwoRmQsVkwsS2YsczAsQkwsTEwsQUQsVEQsZDApLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIFhMKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdTAobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1mdW5jdGlvbiAkeShuLHQpe3ZhciBlPXQsaT10LlIscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuUj1pLkwsZS5SJiYoZS5SLlU9ZSksaS5MPWV9ZnVuY3Rpb24gZXgobix0KXt2YXIgZT10LGk9dC5MLHI9ZS5VO3I/ci5MPT09ZT9yLkw9aTpyLlI9aTpuLl89aSxpLlU9cixlLlU9aSxlLkw9aS5SLGUuTCYmKGUuTC5VPWUpLGkuUj1lfWZ1bmN0aW9uIEdKKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1YTC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49R0oodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspZT09PShpPWUuVSkuTD8ocj1pLlIpJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLlImJigkeSh0aGlzLGUpLGU9KG49ZSkuVSksZS5DPSExLGkuQz0hMCxleCh0aGlzLGkpKToocj1pLkwpJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihleCh0aGlzLGUpLGU9KG49ZSkuVSksZS5DPSExLGkuQz0hMCwkeSh0aGlzLGkpKSxlPW4uVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKG4pe24uTiYmKG4uTi5QPW4uUCksbi5QJiYobi5QLk49bi5OKSxuLk49bi5QPW51bGw7dmFyIGUsbyxzLHQ9bi5VLGk9bi5MLHI9bi5SO2lmKG89aT9yP0dKKHIpOmk6cix0P3QuTD09PW4/dC5MPW86dC5SPW86dGhpcy5fPW8saSYmcj8ocz1vLkMsby5DPW4uQyxvLkw9aSxpLlU9byxvIT09cj8odD1vLlUsby5VPW4uVSx0Lkw9bj1vLlIsby5SPXIsci5VPW8pOihvLlU9dCx0PW8sbj1vLlIpKToocz1uLkMsbj1vKSxuJiYobi5VPXQpLCFzKXtpZihuJiZuLkMpcmV0dXJuIHZvaWQobi5DPSExKTtkb3tpZihuPT09dGhpcy5fKWJyZWFrO2lmKG49PT10Lkwpe2lmKChlPXQuUikuQyYmKGUuQz0hMSx0LkM9ITAsJHkodGhpcyx0KSxlPXQuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLlJ8fCFlLlIuQykmJihlLkwuQz0hMSxlLkM9ITAsZXgodGhpcyxlKSxlPXQuUiksZS5DPXQuQyx0LkM9ZS5SLkM9ITEsJHkodGhpcyx0KSxuPXRoaXMuXzticmVha319ZWxzZSBpZigoZT10LkwpLkMmJihlLkM9ITEsdC5DPSEwLGV4KHRoaXMsdCksZT10LkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpeyghZS5MfHwhZS5MLkMpJiYoZS5SLkM9ITEsZS5DPSEwLCR5KHRoaXMsZSksZT10LkwpLGUuQz10LkMsdC5DPWUuTC5DPSExLGV4KHRoaXMsdCksbj10aGlzLl87YnJlYWt9ZS5DPSEwLG49dCx0PXQuVX13aGlsZSghbi5DKTtuJiYobi5DPSExKX19fTt2YXIgUUw9WEw7ZnVuY3Rpb24gcDAobix0LGUsaSl7dmFyIHI9W251bGwsbnVsbF0sbz1Eby5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD1uLHIucmlnaHQ9dCxlJiZ0eChyLG4sdCxlKSxpJiZ0eChyLHQsbixpKSxoc1tuLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxoc1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIGYwKG4sdCxlKXt2YXIgaT1bdCxlXTtyZXR1cm4gaS5sZWZ0PW4saX1mdW5jdGlvbiB0eChuLHQsZSxpKXtuWzBdfHxuWzFdP24ubGVmdD09PWU/blsxXT1pOm5bMF09aTooblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSl9ZnVuY3Rpb24gaUFlKG4sdCxlLGkscil7dmFyIGIsbz1uWzBdLHM9blsxXSxhPW9bMF0sbD1vWzFdLHU9MCxwPTEsZj1zWzBdLWEsbT1zWzFdLWw7aWYoYj10LWEsZnx8IShiPjApKXtpZihiLz1mLGY8MCl7aWYoYjx1KXJldHVybjtiPHAmJihwPWIpfWVsc2UgaWYoZj4wKXtpZihiPnApcmV0dXJuO2I+dSYmKHU9Yil9aWYoYj1pLWEsZnx8IShiPDApKXtpZihiLz1mLGY8MCl7aWYoYj5wKXJldHVybjtiPnUmJih1PWIpfWVsc2UgaWYoZj4wKXtpZihiPHUpcmV0dXJuO2I8cCYmKHA9Yil9aWYoYj1lLWwsbXx8IShiPjApKXtpZihiLz1tLG08MCl7aWYoYjx1KXJldHVybjtiPHAmJihwPWIpfWVsc2UgaWYobT4wKXtpZihiPnApcmV0dXJuO2I+dSYmKHU9Yil9aWYoYj1yLWwsbXx8IShiPDApKXtpZihiLz1tLG08MCl7aWYoYj5wKXJldHVybjtiPnUmJih1PWIpfWVsc2UgaWYobT4wKXtpZihiPHUpcmV0dXJuO2I8cCYmKHA9Yil9cmV0dXJuISh1PjApJiYhKHA8MSl8fCh1PjAmJihuWzBdPVthK3UqZixsK3UqbV0pLHA8MSYmKG5bMV09W2ErcCpmLGwrcCptXSkpLCEwfX19fX1mdW5jdGlvbiByQWUobix0LGUsaSxyKXt2YXIgbz1uWzFdO2lmKG8pcmV0dXJuITA7dmFyIGIsTSxzPW5bMF0sYT1uLmxlZnQsbD1uLnJpZ2h0LGM9YVswXSxkPWFbMV0sdT1sWzBdLHA9bFsxXSxmPShjK3UpLzI7aWYocD09PWQpe2lmKGY8dHx8Zj49aSlyZXR1cm47aWYoYz51KXtpZihzKXtpZihzWzFdPj1yKXJldHVybn1lbHNlIHM9W2YsZV07bz1bZixyXX1lbHNle2lmKHMpe2lmKHNbMV08ZSlyZXR1cm59ZWxzZSBzPVtmLHJdO289W2YsZV19fWVsc2UgaWYoTT0oZCtwKS8yLShiPShjLXUpLyhwLWQpKSpmLGI8LTF8fGI+MSlpZihjPnUpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1bKGUtTSkvYixlXTtvPVsoci1NKS9iLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9WyhyLU0pL2Iscl07bz1bKGUtTSkvYixlXX1lbHNlIGlmKGQ8cCl7aWYocyl7aWYoc1swXT49aSlyZXR1cm59ZWxzZSBzPVt0LGIqdCtNXTtvPVtpLGIqaStNXX1lbHNle2lmKHMpe2lmKHNbMF08dClyZXR1cm59ZWxzZSBzPVtpLGIqaStNXTtvPVt0LGIqdCtNXX1yZXR1cm4gblswXT1zLG5bMV09bywhMH1mdW5jdGlvbiBvQWUobix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBaTChuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gc0FlKG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1uLnNpdGUpXX12YXIgUEQsUUo9W107ZnVuY3Rpb24gYUFlKCl7dTAodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIHRtKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLGQ9b1swXS1zLHU9b1sxXS1hLHA9MioobCp1LWMqZCk7aWYoIShwPj0tWkopKXt2YXIgZj1sKmwrYypjLG09ZCpkK3UqdSxiPSh1KmYtYyptKS9wLE09KGwqbS1kKmYpL3AseT1RSi5wb3AoKXx8bmV3IGFBZTt5LmFyYz1uLHkuc2l0ZT1yLHkueD1iK3MseS55PSh5LmN5PU0rYSkrTWF0aC5zcXJ0KGIqYitNKk0pLG4uY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsUj1tMC5fO1I7KWlmKHkueTxSLnl8fHkueT09PVIueSYmeS54PD1SLngpe2lmKCFSLkwpe3g9Ui5QO2JyZWFrfVI9Ui5MfWVsc2V7aWYoIVIuUil7eD1SO2JyZWFrfVI9Ui5SfW0wLmluc2VydCh4LHkpLHh8fChQRD15KX19fX1mdW5jdGlvbiBubShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoUEQ9dC5OKSxtMC5yZW1vdmUodCksUUoucHVzaCh0KSx1MCh0KSxuLmNpcmNsZT1udWxsKX12YXIgSko9W107ZnVuY3Rpb24gbEFlKCl7dTAodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEtKKG4pe3ZhciB0PUpKLnBvcCgpfHxuZXcgbEFlO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIEtMKG4pe25tKG4pLGltLnJlbW92ZShuKSxKSi5wdXNoKG4pLHUwKG4pfWZ1bmN0aW9uICRKKG4pe3ZhciB0PW4uY2lyY2xlLGU9dC54LGk9dC5jeSxyPVtlLGldLG89bi5QLHM9bi5OLGE9W25dO0tMKG4pO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhlLWwuY2lyY2xlLngpPGVyJiZNYXRoLmFicyhpLWwuY2lyY2xlLmN5KTxlcjspbz1sLlAsYS51bnNoaWZ0KGwpLEtMKGwpLGw9bzthLnVuc2hpZnQobCksbm0obCk7Zm9yKHZhciBjPXM7Yy5jaXJjbGUmJk1hdGguYWJzKGUtYy5jaXJjbGUueCk8ZXImJk1hdGguYWJzKGktYy5jaXJjbGUuY3kpPGVyOylzPWMuTixhLnB1c2goYyksS0woYyksYz1zO2EucHVzaChjKSxubShjKTt2YXIgdSxkPWEubGVuZ3RoO2Zvcih1PTE7dTxkOysrdSl0eCgoYz1hW3VdKS5lZGdlLChsPWFbdS0xXSkuc2l0ZSxjLnNpdGUscik7KGM9YVtkLTFdKS5lZGdlPXAwKChsPWFbMF0pLnNpdGUsYy5zaXRlLG51bGwsciksdG0obCksdG0oYyl9ZnVuY3Rpb24gZSQobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1pbS5fO2E7KWlmKChvPXQkKGEsZSktdCk+ZXIpYT1hLkw7ZWxzZXtpZighKChzPXQtY0FlKGEsZSkpPmVyKSl7bz4tZXI/KGk9YS5QLHI9YSk6cz4tZXI/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfSFmdW5jdGlvbihuKXtoc1tuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19KG4pO3ZhciBsPUtKKG4pO2lmKGltLmluc2VydChpLGwpLGl8fHIpe2lmKGk9PT1yKXJldHVybiBubShpKSxyPUtKKGkuc2l0ZSksaW0uaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1wMChpLnNpdGUsbC5zaXRlKSx0bShpKSx2b2lkIHRtKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1wMChpLnNpdGUsbC5zaXRlKSk7bm0oaSksbm0ocik7dmFyIGM9aS5zaXRlLGQ9Y1swXSx1PWNbMV0scD1uWzBdLWQsZj1uWzFdLXUsbT1yLnNpdGUsYj1tWzBdLWQsTT1tWzFdLXUseT0yKihwKk0tZipiKSx4PXAqcCtmKmYsUj1iKmIrTSpNLEE9WyhNKngtZipSKS95K2QsKHAqUi1iKngpL3krdV07dHgoci5lZGdlLGMsbSxBKSxsLmVkZ2U9cDAoYyxuLG51bGwsQSksci5lZGdlPXAwKG4sbSxudWxsLEEpLHRtKGkpLHRtKHIpfX1mdW5jdGlvbiB0JChuLHQpe3ZhciBlPW4uc2l0ZSxpPWVbMF0scj1lWzFdLG89ci10O2lmKCFvKXJldHVybiBpO3ZhciBzPW4uUDtpZighcylyZXR1cm4tMS8wO3ZhciBhPShlPXMuc2l0ZSlbMF0sbD1lWzFdLGM9bC10O2lmKCFjKXJldHVybiBhO3ZhciBkPWEtaSx1PTEvby0xL2MscD1kL2M7cmV0dXJuIHU/KC1wK01hdGguc3FydChwKnAtMip1KihkKmQvKC0yKmMpLWwrYy8yK3Itby8yKSkpL3UraTooaSthKS8yfWZ1bmN0aW9uIGNBZShuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiB0JChlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIGltLGhzLG0wLERvLGVyPTFlLTYsWko9MWUtMTI7ZnVuY3Rpb24gZEFlKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiB1QWUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gT0Qobix0KXt2YXIgaSxyLG8sZT1uLnNvcnQodUFlKS5wb3AoKTtmb3IoRG89W10saHM9bmV3IEFycmF5KG4ubGVuZ3RoKSxpbT1uZXcgUUwsbTA9bmV3IFFMOzspaWYobz1QRCxlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJihlJChlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZXtpZighbylicmVhazskSihvLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIGUsaSxyLG8sbj0wLHQ9aHMubGVuZ3RoO248dDsrK24paWYoKGU9aHNbbl0pJiYobz0oaT1lLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIHM9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pO2ZvcihyPTA7cjxvOysrcilzW3JdPXIsYVtyXT1vQWUoZSxEb1tpW3JdXSk7Zm9yKHMuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxvOysrcilhW3JdPWlbc1tyXV07Zm9yKHI9MDtyPG87KytyKWlbcl09YVtyXX19KCksdCl7dmFyIHM9K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07KGZ1bmN0aW9uKG4sdCxlLGkpe2Zvcih2YXIgbyxyPURvLmxlbmd0aDtyLS07KXJBZShvPURvW3JdLG4sdCxlLGkpJiZpQWUobyxuLHQsZSxpKSYmKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+ZXJ8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+ZXIpfHxkZWxldGUgRG9bcl19KShzLGEsbCxjKSxmdW5jdGlvbihuLHQsZSxpKXt2YXIgbyxzLGEsbCxjLGQsdSxwLGYsbSxiLE0scj1ocy5sZW5ndGgseT0hMDtmb3Iobz0wO288cjsrK28paWYocz1oc1tvXSl7Zm9yKGE9cy5zaXRlLGw9KGM9cy5oYWxmZWRnZXMpLmxlbmd0aDtsLS07KURvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsZD1jLmxlbmd0aDtsPGQ7KWI9KG09c0FlKHMsRG9bY1tsXV0pKVswXSxNPW1bMV0scD0odT1aTChzLERvW2NbKytsJWRdXSkpWzBdLGY9dVsxXSwoTWF0aC5hYnMoYi1wKT5lcnx8TWF0aC5hYnMoTS1mKT5lcikmJihjLnNwbGljZShsLDAsRG8ucHVzaChmMChhLG0sTWF0aC5hYnMoYi1uKTxlciYmaS1NPmVyP1tuLE1hdGguYWJzKHAtbik8ZXI/ZjppXTpNYXRoLmFicyhNLWkpPGVyJiZlLWI+ZXI/W01hdGguYWJzKGYtaSk8ZXI/cDplLGldOk1hdGguYWJzKGItZSk8ZXImJk0tdD5lcj9bZSxNYXRoLmFicyhwLWUpPGVyP2Y6dF06TWF0aC5hYnMoTS10KTxlciYmYi1uPmVyP1tNYXRoLmFicyhmLXQpPGVyP3A6bix0XTpudWxsKSktMSksKytkKTtkJiYoeT0hMSl9aWYoeSl7dmFyIHgsUixBLFY9MS8wO2ZvcihvPTAseT1udWxsO288cjsrK28pKHM9aHNbb10pJiYoQT0oeD0oYT1zLnNpdGUpWzBdLW4pKngrKFI9YVsxXS10KSpSKTxWJiYoVj1BLHk9cyk7aWYoeSl7dmFyIHRlPVtuLHRdLEs9W24saV0seGU9W2UsaV0sWGU9W2UsdF07eS5oYWxmZWRnZXMucHVzaChEby5wdXNoKGYwKGE9eS5zaXRlLHRlLEspKS0xLERvLnB1c2goZjAoYSxLLHhlKSktMSxEby5wdXNoKGYwKGEseGUsWGUpKS0xLERvLnB1c2goZjAoYSxYZSx0ZSkpLTEpfX1mb3Iobz0wO288cjsrK28pKHM9aHNbb10pJiYocy5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgaHNbb10pfShzLGEsbCxjKX10aGlzLmVkZ2VzPURvLHRoaXMuY2VsbHM9aHMsaW09bTA9RG89aHM9bnVsbH1mdW5jdGlvbiBybShuLHQsZSl7dGhpcy5rPW4sdGhpcy54PXQsdGhpcy55PWV9T0QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPRCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gWkwodCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKGE9KG89ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIG8sYSxsLHI9ZS5zaXRlLHM9LTEsYz10W29bYS0xXV0sZD1jLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0OysrczxhOylsPWQsZD0oYz10W29bc11dKS5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdCxsJiZkJiZpPGwuaW5kZXgmJmk8ZC5pbmRleCYmZEFlKHIsbCxkKTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsZC5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgcixhLGk9dGhpcyxvPWkuX2ZvdW5kfHwwLHM9aS5jZWxscy5sZW5ndGg7IShhPWkuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSxkPWwqbCtjKmM7ZG97YT1pLmNlbGxzW3I9b10sbz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24odSl7dmFyIHA9aS5lZGdlc1t1XSxmPXAubGVmdDtpZihmIT09YS5zaXRlJiZmfHwoZj1wLnJpZ2h0KSl7dmFyIG09bi1mWzBdLGI9dC1mWzFdLE09bSptK2IqYjtNPGQmJihkPU0sbz1mLmluZGV4KX19KX13aGlsZShudWxsIT09byk7cmV0dXJuIGkuX2ZvdW5kPXIsbnVsbD09ZXx8ZDw9ZSplP2Euc2l0ZTpudWxsfX0scm0ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpybSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gMT09PW4/dGhpczpuZXcgcm0odGhpcy5rKm4sdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihuLHQpe3JldHVybiAwPT09biYwPT09dD90aGlzOm5ldyBybSh0aGlzLmssdGhpcy54K3RoaXMuaypuLHRoaXMueSt0aGlzLmsqdCl9LGFwcGx5OmZ1bmN0aW9uKG4pe3JldHVybltuWzBdKnRoaXMuayt0aGlzLngsblsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbihuKXtyZXR1cm4gbip0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24obil7cmV0dXJuWyhuWzBdLXRoaXMueCkvdGhpcy5rLChuWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihuKXtyZXR1cm4obi10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihuKXtyZXR1cm4obi10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24obil7cmV0dXJuIG4uY29weSgpLmRvbWFpbihuLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAobi5pbnZlcnQsbikpfSxyZXNjYWxlWTpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19LG5ldyBybSgxLDAsMCk7dmFyIHMzPTFlNCxhMz0uMDAxLG8kPVFyKCIuMn5lIikscEFlPVFyKCIuNH5yIiksbiQ9UXIoIix+Iik7ZnVuY3Rpb24gaSQobil7aWYoMD09PW4pcmV0dXJuIjAiO2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1zM3x8dDxhMz9vJChuKTpwQWUobil9dmFyIGlwPXtmb3JtYXRUaWNrOmkkLGZvcm1hdFNob3J0OmkkLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1zM3x8dDxhMz9vJChuKTpuJChuKX0sZm9ybWF0TG9uZzpuJH0sZkFlPW5ldyBJbnRsLk51bWJlckZvcm1hdCh2b2lkIDAse21heGltdW1GcmFjdGlvbkRpZ2l0czo0fSk7ZnVuY3Rpb24ga0Qobil7cmV0dXJuIGZBZS5mb3JtYXQobil9dmFyIGcwPXtmb3JtYXRUaWNrOmtELGZvcm1hdFNob3J0OmtELGZvcm1hdFJlYWRhYmxlOmtELGZvcm1hdExvbmc6a0R9LG1BZT1RcigiMC4zfnMiKSxoQWU9UXIoIiwuM35mIik7ZnVuY3Rpb24gRkQobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PXMzfHx0PGEzP21BZShuKTpoQWUobil9dmFyIGwzPXtmb3JtYXRUaWNrOkZELGZvcm1hdFNob3J0OkZELGZvcm1hdFJlYWRhYmxlOkZELGZvcm1hdExvbmc6RkR9LG4zPTFlMyxpMz02MCpuMyxyMz02MCppMyxvMz0yNCpyMyxyJD0zNjUqbzMsaDA9UXIoIi40fiIpO2Z1bmN0aW9uIE5EKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTxuMz9gJHtoMChlKX0gbXNgOmU8aTM/YCR7aDAoZS9uMyl9IHNlY2A6ZTxyMz9gJHtoMChlL2kzKX0gbWluYDplPG8zP2Ake2gwKGUvcjMpfSBocmA6ZTxyJD9gJHtoMChlL28zKX0gZGF5YDpgJHtoMChlL3IkKX0geXJgLHR9dmFyIHQzLF8wPXtmb3JtYXRUaWNrOk5ELGZvcm1hdFNob3J0Ok5ELGZvcm1hdFJlYWRhYmxlOk5ELGZvcm1hdExvbmc6TkR9LGdBZT1lbSgpLnRpY2tGb3JtYXQoKSxzJD17Zm9ybWF0VGljazpuPT5nQWUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHQzLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcodDMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHQzLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIHFsKG4pe3N3aXRjaChuKXtjYXNlIG5yLkxJTkVBUjpyZXR1cm4gbmV3IG54O2Nhc2UgbnIuTE9HMTA6cmV0dXJuIG5ldyBjMztjYXNlIG5yLlRJTUU6cmV0dXJuIG5ldyBpeDtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgbng9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9aXB9dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1XbCgpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIFdsKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sYzM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9aXB9dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLGQ9dGhpcy50cmFuc2Zvcm0obyktbCx1PWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSx1LyhkK051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLGQ9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShkLyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1HeSgpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0saXg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPWVtKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPXMkfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShlKShpKX1yZXZlcnNlKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkuaW52ZXJ0KGkpLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bZS5nZXRUaW1lKCksaS5nZXRUaW1lKCldfXRpY2tzKHQsZSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKGUpLm1hcChpPT5pLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxkMz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PntkMz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7ZDM9Qm9vbGVhbih0KX12YXIgWWxfY29udmVydFJlY3RUb0V4dGVudD1mdW5jdGlvbihuKXtyZXR1cm57eDpbbi54LG4ueCtuLndpZHRoXSx5OltuLnksbi55K24uaGVpZ2h0XX19LFlsX2lzV2ViR2wyU3VwcG9ydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGQzfSxZbF9pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1mdW5jdGlvbigpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9LFlsX2FyZVBvbHlsaW5lc0VxdWFsPWZ1bmN0aW9uKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH0sYjA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1xbChuci5MSU5FQVIpLHRoaXMueVNjYWxlPXFsKG5yLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9WWxfY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTtmdW5jdGlvbiBMRChuLHQsZSxpKXtsZXR7Y29sb3I6cix2aXNpYmxlOm8sb3BhY2l0eTpzfT1pLGE9bjtyZXR1cm4gYXx8bz8oYT1hPz90KCksYT1lKGEpLGEuc3R5bGUuZGlzcGxheT1vPyIiOiJub25lIixhLnN0eWxlLnN0cm9rZT1yLGEuc3R5bGUub3BhY2l0eT1TdHJpbmcocz8/MSksYSk6bnVsbH12YXIgZFY9IjEzNyIsTUFlPTAsYSQ9MSx3QWU9MixqZWU9MSxTQWU9MixteD0zLHl4PTAsZ289MSxxMD0yLHBwPTAsZ3g9MSxsJD0yLGMkPTMsZCQ9NCxFQWU9NSxCMD0xMDAsVEFlPTEwMSxEQWU9MTAyLHUkPTEwMyxwJD0xMDQsSUFlPTIwMCxBQWU9MjAxLFJBZT0yMDIsUEFlPTIwMyxXZWU9MjA0LHFlZT0yMDUsT0FlPTIwNixrQWU9MjA3LEZBZT0yMDgsTkFlPTIwOSxMQWU9MjEwLEJBZT0wLFZBZT0xLEhBZT0yLFozPTMsekFlPTQsVUFlPTUsakFlPTYsR0FlPTcsWUk9MCxXQWU9MSxxQWU9MixmcD0wLFlBZT0xLFhBZT0yLFFBZT0zLFpBZT00LEtBZT01LFd4PTMwMSxxeD0zMDIsSzM9MzAzLEozPTMwNCxYST0zMDYsdVY9MzA3LCQzPTFlMyx5YT0xMDAxLGVCPTEwMDIsX289MTAwMyxmJD0xMDA0LG0kPTEwMDUsJG89MTAwNixKQWU9MTAwNyxRST0xMDA4LG1wPTEwMDksJEFlPTEwMTAsZVJlPTEwMTEseHg9MTAxMix0UmU9MTAxMyxfST0xMDE0LGNtPTEwMTUsVTA9MTAxNixuUmU9MTAxNyxpUmU9MTAxOCxqMD0xMDIwLHJSZT0xMDIxLGdzPTEwMjMsb1JlPTEwMjQsc1JlPTEwMjUsdW09MTAyNixZMD0xMDI3LGFSZT0xMDI4LGxSZT0xMDI5LGNSZT0xMDMwLGRSZT0xMDMxLHVSZT0xMDMzLHUzPTMzNzc2LHAzPTMzNzc3LGYzPTMzNzc4LG0zPTMzNzc5LGgkPTM1ODQwLGckPTM1ODQxLF8kPTM1ODQyLGIkPTM1ODQzLHBSZT0zNjE5Nix2JD0zNzQ5Mix5JD0zNzQ5Nix4JD0zNzgwOCxDJD0zNzgwOSxNJD0zNzgxMCx3JD0zNzgxMSxTJD0zNzgxMixFJD0zNzgxMyxUJD0zNzgxNCxEJD0zNzgxNSxJJD0zNzgxNixBJD0zNzgxNyxSJD0zNzgxOCxQJD0zNzgxOSxPJD0zNzgyMCxrJD0zNzgyMSxGJD0zNjQ5MixWMD0yNDAwLEgwPTI0MDEsX3A9M2UzLEFyPTMwMDEsYlJlPTMyMDEsb189MCx2UmU9MSxDeD0zNTA0NCx4ST0zNTA0OCxOJD0iMzAwIGVzIix0Qj0xMDM1LFVkPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVyczt2b2lkIDA9PT1pW3RdJiYoaVt0XT1bXSksLTE9PT1pW3RdLmluZGV4T2YoZSkmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gdm9pZCAwIT09aVt0XSYmLTEhPT1pW3RdLmluZGV4T2YoZSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHZvaWQgMCE9PXIpe2xldCBvPXIuaW5kZXhPZihlKTstMSE9PW8mJnIuc3BsaWNlKG8sMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZih2b2lkIDAhPT1pKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXJbb10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sVm89W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKVZvW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIF8zPU1hdGguUEkvMTgwLG5CPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIEpsKCl7bGV0IG49NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsdD00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxlPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGk9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKFZvWzI1NSZuXStWb1tuPj44JjI1NV0rVm9bbj4+MTYmMjU1XStWb1tuPj4yNCYyNTVdKyItIitWb1syNTUmdF0rVm9bdD4+OCYyNTVdKyItIitWb1t0Pj4xNiYxNXw2NF0rVm9bdD4+MjQmMjU1XSsiLSIrVm9bNjMmZXwxMjhdK1ZvW2U+PjgmMjU1XSsiLSIrVm9bZT4+MTYmMjU1XStWb1tlPj4yNCYyNTVdK1ZvWzI1NSZpXStWb1tpPj44JjI1NV0rVm9baT4+MTYmMjU1XStWb1tpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEtzKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBiMyhuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gTCQobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIENSZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyICRlPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10Lngscz10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLXMqcit0LngsdGhpcy55PW8qcitzKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19OyRlLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGJvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMpe2xldCBkPXRoaXMuZWxlbWVudHM7cmV0dXJuIGRbMF09dCxkWzFdPXIsZFsyXT1hLGRbM109ZSxkWzRdPW8sZFs1XT1sLGRbNl09aSxkWzddPXMsZFs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLGQ9aVs0XSx1PWlbN10scD1pWzJdLGY9aVs1XSxtPWlbOF0sYj1yWzBdLE09clszXSx5PXJbNl0seD1yWzFdLFI9cls0XSxBPXJbN10sVj1yWzJdLHRlPXJbNV0sSz1yWzhdO3JldHVybiBvWzBdPXMqYithKngrbCpWLG9bM109cypNK2EqUitsKnRlLG9bNl09cyp5K2EqQStsKkssb1sxXT1jKmIrZCp4K3UqVixvWzRdPWMqTStkKlIrdSp0ZSxvWzddPWMqeStkKkErdSpLLG9bMl09cCpiK2YqeCttKlYsb1s1XT1wKk0rZipSK20qdGUsb1s4XT1wKnkrZipBK20qSyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sZD10WzhdO3JldHVybiBlKnMqZC1lKmEqYy1pKm8qZCtpKmEqbCtyKm8qYy1yKnMqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sZD10WzhdLHU9ZCpzLWEqYyxwPWEqbC1kKm8sZj1jKm8tcypsLG09ZSp1K2kqcCtyKmY7aWYoMD09PW0pcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgYj0xL207cmV0dXJuIHRbMF09dSpiLHRbMV09KHIqYy1kKmkpKmIsdFsyXT0oYSppLXIqcykqYix0WzNdPXAqYix0WzRdPShkKmUtcipsKSpiLHRbNV09KHIqby1hKmUpKmIsdFs2XT1mKmIsdFs3XT0oaSpsLWMqZSkqYix0WzhdPShzKmUtaSpvKSpiLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8scyxhKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKnMrYyphKStzK3QsLXIqYyxyKmwsLXIqKC1jKnMrbCphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0scz1yWzNdLGE9cls2XSxsPXJbMV0sYz1yWzRdLGQ9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSpzK2kqYyxyWzZdPWUqYStpKmQsclsxXT0taSpvK2UqbCxyWzRdPS1pKnMrZSpjLHJbN109LWkqYStlKmQsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gUWVlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTXgobil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9Ym8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgQiQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0sWGw9e2g6MCxzOjAsbDowfSxCRD17aDowLHM6MCxsOjB9O2Z1bmN0aW9uIHYzKG4sdCxlKXtyZXR1cm4gZTwwJiYoZSs9MSksZT4xJiYoZS09MSksZTwxLzY/bis2Kih0LW4pKmU6ZTwuNT90OmU8Mi8zP24rNioodC1uKSooMi8zLWUpOm59ZnVuY3Rpb24gRzAobil7cmV0dXJuIG48LjA0MDQ1Py4wNzczOTkzODA4Km46TWF0aC5wb3coLjk0Nzg2NzI5ODYqbisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIHkzKG4pe3JldHVybiBuPC4wMDMxMzA4PzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGFuPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3JldHVybiB2b2lkIDA9PT1pJiZ2b2lkIDA9PT1yP3RoaXMuc2V0KGUpOnRoaXMuc2V0UkdCKGUsaSxyKX1zZXQoZSl7cmV0dXJuIGUmJmUuaXNDb2xvcj90aGlzLmNvcHkoZSk6Im51bWJlciI9PXR5cGVvZiBlP3RoaXMuc2V0SGV4KGUpOiJzdHJpbmciPT10eXBlb2YgZSYmdGhpcy5zZXRTdHlsZShlKSx0aGlzfXNldFNjYWxhcihlKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWUsdGhpcy5iPWUsdGhpc31zZXRIZXgoZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSx0aGlzLnI9KGU+PjE2JjI1NSkvMjU1LHRoaXMuZz0oZT4+OCYyNTUpLzI1NSx0aGlzLmI9KDI1NSZlKS8yNTUsdGhpc31zZXRSR0IoZSxpLHIpe3JldHVybiB0aGlzLnI9ZSx0aGlzLmc9aSx0aGlzLmI9cix0aGlzfXNldEhTTChlLGkscil7aWYoZT1mdW5jdGlvbihuLHQpe3JldHVybihuJTErMSklMX0oZSksaT1LcyhpLDAsMSkscj1LcyhyLDAsMSksMD09PWkpdGhpcy5yPXRoaXMuZz10aGlzLmI9cjtlbHNle2xldCBvPXI8PS41P3IqKDEraSk6citpLXIqaSxzPTIqci1vO3RoaXMucj12MyhzLG8sZSsxLzMpLHRoaXMuZz12MyhzLG8sZSksdGhpcy5iPXYzKHMsbyxlLTEvMyl9cmV0dXJuIHRoaXN9c2V0U3R5bGUoZSl7ZnVuY3Rpb24gaShvKXt2b2lkIDAhPT1vJiZwYXJzZUZsb2F0KG8pPDEmJmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IEFscGhhIGNvbXBvbmVudCBvZiAiK2UrIiB3aWxsIGJlIGlnbm9yZWQuIil9bGV0IHI7aWYocj0vXigoPzpyZ2J8aHNsKWE/KVwoKFteXCldKilcKS8uZXhlYyhlKSl7bGV0IG8sYT1yWzJdO3N3aXRjaChyWzFdKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihvPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1sxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChvWzNdLDEwKSkvMjU1LGkob1s0XSksdGhpcztpZihvPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1sxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChvWzNdLDEwKSkvMTAwLGkob1s0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihvPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXtsZXQgbD1wYXJzZUZsb2F0KG9bMV0pLzM2MCxjPXBhcnNlSW50KG9bMl0sMTApLzEwMCxkPXBhcnNlSW50KG9bM10sMTApLzEwMDtyZXR1cm4gaShvWzRdKSx0aGlzLnNldEhTTChsLGMsZCl9fX1lbHNlIGlmKHI9L15cIyhbQS1GYS1mXGRdKykkLy5leGVjKGUpKXtsZXQgbz1yWzFdLHM9by5sZW5ndGg7aWYoMz09PXMpcmV0dXJuIHRoaXMucj1wYXJzZUludChvLmNoYXJBdCgwKStvLmNoYXJBdCgwKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChvLmNoYXJBdCgxKStvLmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludChvLmNoYXJBdCgyKStvLmNoYXJBdCgyKSwxNikvMjU1LHRoaXM7aWYoNj09PXMpcmV0dXJuIHRoaXMucj1wYXJzZUludChvLmNoYXJBdCgwKStvLmNoYXJBdCgxKSwxNikvMjU1LHRoaXMuZz1wYXJzZUludChvLmNoYXJBdCgyKStvLmNoYXJBdCgzKSwxNikvMjU1LHRoaXMuYj1wYXJzZUludChvLmNoYXJBdCg0KStvLmNoYXJBdCg1KSwxNikvMjU1LHRoaXN9cmV0dXJuIGUmJmUubGVuZ3RoPjA/dGhpcy5zZXRDb2xvck5hbWUoZSk6dGhpc31zZXRDb2xvck5hbWUoZSl7bGV0IGk9QiRbZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gdm9pZCAwIT09aT90aGlzLnNldEhleChpKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weShlKXtyZXR1cm4gdGhpcy5yPWUucix0aGlzLmc9ZS5nLHRoaXMuYj1lLmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKGUpe3JldHVybiB0aGlzLnI9RzAoZS5yKSx0aGlzLmc9RzAoZS5nKSx0aGlzLmI9RzAoZS5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IoZSl7cmV0dXJuIHRoaXMucj15MyhlLnIpLHRoaXMuZz15MyhlLmcpLHRoaXMuYj15MyhlLmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiAyNTUqdGhpcy5yPDwxNl4yNTUqdGhpcy5nPDw4XjI1NSp0aGlzLmI8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKGUpe2xldCBsLGMsaT10aGlzLnIscj10aGlzLmcsbz10aGlzLmIscz1NYXRoLm1heChpLHIsbyksYT1NYXRoLm1pbihpLHIsbyksZD0oYStzKS8yO2lmKGE9PT1zKWw9MCxjPTA7ZWxzZXtsZXQgdT1zLWE7c3dpdGNoKGM9ZDw9LjU/dS8ocythKTp1LygyLXMtYSkscyl7Y2FzZSBpOmw9KHItbykvdSsocjxvPzY6MCk7YnJlYWs7Y2FzZSByOmw9KG8taSkvdSsyO2JyZWFrO2Nhc2UgbzpsPShpLXIpL3UrNH1sLz02fXJldHVybiBlLmg9bCxlLnM9YyxlLmw9ZCxlfWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTChlLGkscil7cmV0dXJuIHRoaXMuZ2V0SFNMKFhsKSxYbC5oKz1lLFhsLnMrPWksWGwubCs9cix0aGlzLnNldEhTTChYbC5oLFhsLnMsWGwubCksdGhpc31hZGQoZSl7cmV0dXJuIHRoaXMucis9ZS5yLHRoaXMuZys9ZS5nLHRoaXMuYis9ZS5iLHRoaXN9YWRkQ29sb3JzKGUsaSl7cmV0dXJuIHRoaXMucj1lLnIraS5yLHRoaXMuZz1lLmcraS5nLHRoaXMuYj1lLmIraS5iLHRoaXN9YWRkU2NhbGFyKGUpe3JldHVybiB0aGlzLnIrPWUsdGhpcy5nKz1lLHRoaXMuYis9ZSx0aGlzfXN1YihlKXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLWUuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLWUuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLWUuYiksdGhpc31tdWx0aXBseShlKXtyZXR1cm4gdGhpcy5yKj1lLnIsdGhpcy5nKj1lLmcsdGhpcy5iKj1lLmIsdGhpc31tdWx0aXBseVNjYWxhcihlKXtyZXR1cm4gdGhpcy5yKj1lLHRoaXMuZyo9ZSx0aGlzLmIqPWUsdGhpc31sZXJwKGUsaSl7cmV0dXJuIHRoaXMucis9KGUuci10aGlzLnIpKmksdGhpcy5nKz0oZS5nLXRoaXMuZykqaSx0aGlzLmIrPShlLmItdGhpcy5iKSppLHRoaXN9bGVycENvbG9ycyhlLGkscil7cmV0dXJuIHRoaXMucj1lLnIrKGkuci1lLnIpKnIsdGhpcy5nPWUuZysoaS5nLWUuZykqcix0aGlzLmI9ZS5iKyhpLmItZS5iKSpyLHRoaXN9bGVycEhTTChlLGkpe3RoaXMuZ2V0SFNMKFhsKSxlLmdldEhTTChCRCk7bGV0IHI9YjMoWGwuaCxCRC5oLGkpLG89YjMoWGwucyxCRC5zLGkpLHM9YjMoWGwubCxCRC5sLGkpO3JldHVybiB0aGlzLnNldEhTTChyLG8scyksdGhpc31lcXVhbHMoZSl7cmV0dXJuIGUucj09PXRoaXMuciYmZS5nPT09dGhpcy5nJiZlLmI9PT10aGlzLmJ9ZnJvbUFycmF5KGUsaT0wKXtyZXR1cm4gdGhpcy5yPWVbaV0sdGhpcy5nPWVbaSsxXSx0aGlzLmI9ZVtpKzJdLHRoaXN9dG9BcnJheShlPVtdLGk9MCl7cmV0dXJuIGVbaV09dGhpcy5yLGVbaSsxXT10aGlzLmcsZVtpKzJdPXRoaXMuYixlfWZyb21CdWZmZXJBdHRyaWJ1dGUoZSxpKXtyZXR1cm4gdGhpcy5yPWUuZ2V0WChpKSx0aGlzLmc9ZS5nZXRZKGkpLHRoaXMuYj1lLmdldFooaSksITA9PT1lLm5vcm1hbGl6ZWQmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19cmV0dXJuIG4uTkFNRVM9QiQsbn0pKCk7YW4ucHJvdG90eXBlLmlzQ29sb3I9ITAsYW4ucHJvdG90eXBlLnI9MSxhbi5wcm90b3R5cGUuZz0xLGFuLnByb3RvdHlwZS5iPTE7dmFyIHYwLGpkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PXYwJiYodjA9TXgoImNhbnZhcyIpKSx2MC53aWR0aD10LndpZHRoLHYwLmhlaWdodD10LmhlaWdodDtsZXQgaT12MC5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9djB9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1NeCgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspb1tzXT0yNTUqRzAob1tzXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqRzAoZVtpXS8yNTUpKTpHMChlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LE1SZT0wLGxvPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IodD1sby5ERUZBVUxUX0lNQUdFLGU9bG8uREVGQVVMVF9NQVBQSU5HLGk9eWEscj15YSxvPSRvLHM9UUksYT1ncyxsPW1wLGM9MSxkPV9wKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOk1SZSsrfSksdGhpcy51dWlkPUpsKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1vLHRoaXMubWluRmlsdGVyPXMsdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3ICRlKDAsMCksdGhpcy5yZXBlYXQ9bmV3ICRlKDEsMSksdGhpcy5jZW50ZXI9bmV3ICRlKDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgYm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPWQsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2lmKCFlJiZ2b2lkIDAhPT10LnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7bGV0IHI9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1yLnV1aWQmJihyLnV1aWQ9SmwoKSksIWUmJnZvaWQgMD09PXQuaW1hZ2VzW3IudXVpZF0pe2xldCBvO2lmKEFycmF5LmlzQXJyYXkocikpe289W107Zm9yKGxldCBzPTAsYT1yLmxlbmd0aDtzPGE7cysrKW8ucHVzaCh4MyhyW3NdLmlzRGF0YVRleHR1cmU/cltzXS5pbWFnZTpyW3NdKSl9ZWxzZSBvPXgzKHIpO3QuaW1hZ2VzW3IudXVpZF09e3V1aWQ6ci51dWlkLHVybDpvfX1pLmltYWdlPXIudXVpZH1yZXR1cm4ie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlICQzOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgeWE6dC54PXQueDwwPzA6MTticmVhaztjYXNlIGVCOnQueD0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpP01hdGguY2VpbCh0LngpLXQueDp0LngtTWF0aC5mbG9vcih0LngpfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAkMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIHlhOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBlQjp0Lnk9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT9NYXRoLmNlaWwodC55KS10Lnk6dC55LU1hdGguZmxvb3IodC55KX1yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O2Z1bmN0aW9uIHgzKG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9qZC5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9bG8uREVGQVVMVF9JTUFHRT12b2lkIDAsbG8uREVGQVVMVF9NQVBQSU5HPTMwMCxsby5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO3ZhciBaaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10aGlzLncscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0qbyx0aGlzLnk9c1sxXSplK3NbNV0qaStzWzldKnIrc1sxM10qbyx0aGlzLno9c1syXSplK3NbNl0qaStzWzEwXSpyK3NbMTRdKm8sdGhpcy53PXNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSpvLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLG8sbD10LmVsZW1lbnRzLGM9bFswXSxkPWxbNF0sdT1sWzhdLHA9bFsxXSxmPWxbNV0sbT1sWzldLGI9bFsyXSxNPWxbNl0seT1sWzEwXTtpZihNYXRoLmFicyhkLXApPC4wMSYmTWF0aC5hYnModS1iKTwuMDEmJk1hdGguYWJzKG0tTSk8LjAxKXtpZihNYXRoLmFicyhkK3ApPC4xJiZNYXRoLmFicyh1K2IpPC4xJiZNYXRoLmFicyhtK00pPC4xJiZNYXRoLmFicyhjK2YreS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IFI9KGMrMSkvMixBPShmKzEpLzIsVj0oeSsxKS8yLHRlPShkK3ApLzQsSz0odStiKS80LHhlPShtK00pLzQ7cmV0dXJuIFI+QSYmUj5WP1I8LjAxPyhpPTAscj0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KFIpLHI9dGUvaSxvPUsvaSk6QT5WP0E8LjAxPyhpPS43MDcxMDY3ODEscj0wLG89LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KEEpLGk9dGUvcixvPXhlL3IpOlY8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KFYpLGk9Sy9vLHI9eGUvbyksdGhpcy5zZXQoaSxyLG8sZSksdGhpc31sZXQgeD1NYXRoLnNxcnQoKE0tbSkqKE0tbSkrKHUtYikqKHUtYikrKHAtZCkqKHAtZCkpO3JldHVybiBNYXRoLmFicyh4KTwuMDAxJiYoeD0xKSx0aGlzLng9KE0tbSkveCx0aGlzLnk9KHUtYikveCx0aGlzLno9KHAtZCkveCx0aGlzLnc9TWF0aC5hY29zKChjK2YreS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtaaS5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBKcz1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFppKDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgWmkoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBsbyh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09aS5nZW5lcmF0ZU1pcG1hcHMmJmkuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD12b2lkIDAhPT1pLmludGVybmFsRm9ybWF0P2kuaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWkubWluRmlsdGVyP2kubWluRmlsdGVyOiRvLHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09aS5kZXB0aEJ1ZmZlcnx8aS5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09aS5zdGVuY2lsQnVmZmVyJiZpLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aS5kZXB0aFRleHR1cmU/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07SnMucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITAsY2xhc3MgZXh0ZW5kcyBKc3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKTtsZXQgcj10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288aTtvKyspdGhpcy50ZXh0dXJlW29dPXIuY2xvbmUoKX1zZXRTaXplKHQsZSxpPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPWk7Zm9yKGxldCByPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO3I8bztyKyspdGhpcy50ZXh0dXJlW3JdLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZVtyXS5pbWFnZS5kZXB0aD1pO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCBlPTAsaT10LnRleHR1cmUubGVuZ3RoO2U8aTtlKyspdGhpcy50ZXh0dXJlW2VdPXQudGV4dHVyZVtlXS5jbG9uZSgpO3JldHVybiB0aGlzfX0ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIHd4PWNsYXNzIGV4dGVuZHMgSnN7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKHQsZSxpKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PXZvaWQgMD09PWkuaWdub3JlRGVwdGh8fGkuaWdub3JlRGVwdGgsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dm9pZCAwIT09aS51c2VSZW5kZXJUb1RleHR1cmUmJmkudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPSExPT09dGhpcy51c2VSZW5kZXJUb1RleHR1cmV9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07d3gucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgdHM9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixvLHMsYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLGQ9aVtyKzJdLHU9aVtyKzNdLHA9b1tzKzBdLGY9b1tzKzFdLG09b1tzKzJdLGI9b1tzKzNdO2lmKDA9PT1hKXJldHVybiB0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09ZCx2b2lkKHRbZSszXT11KTtpZigxPT09YSlyZXR1cm4gdFtlKzBdPXAsdFtlKzFdPWYsdFtlKzJdPW0sdm9pZCh0W2UrM109Yik7aWYodSE9PWJ8fGwhPT1wfHxjIT09Znx8ZCE9PW0pe2xldCBNPTEtYSx5PWwqcCtjKmYrZCptK3UqYix4PXk+PTA/MTotMSxSPTEteSp5O2lmKFI+TnVtYmVyLkVQU0lMT04pe2xldCBWPU1hdGguc3FydChSKSx0ZT1NYXRoLmF0YW4yKFYseSp4KTtNPU1hdGguc2luKE0qdGUpL1YsYT1NYXRoLnNpbihhKnRlKS9WfWxldCBBPWEqeDtpZihsPWwqTStwKkEsYz1jKk0rZipBLGQ9ZCpNK20qQSx1PXUqTStiKkEsTT09PTEtYSl7bGV0IFY9MS9NYXRoLnNxcnQobCpsK2MqYytkKmQrdSp1KTtsKj1WLGMqPVYsZCo9Vix1Kj1WfX10W2VdPWwsdFtlKzFdPWMsdFtlKzJdPWQsdFtlKzNdPXV9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsZSxpLHIsbyxzKXtsZXQgYT1pW3JdLGw9aVtyKzFdLGM9aVtyKzJdLGQ9aVtyKzNdLHU9b1tzXSxwPW9bcysxXSxmPW9bcysyXSxtPW9bcyszXTtyZXR1cm4gdFtlXT1hKm0rZCp1K2wqZi1jKnAsdFtlKzFdPWwqbStkKnArYyp1LWEqZix0W2UrMl09YyptK2QqZithKnAtbCp1LHRbZSszXT1kKm0tYSp1LWwqcC1jKmYsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksZD1hKHIvMiksdT1hKG8vMikscD1sKGkvMiksZj1sKHIvMiksbT1sKG8vMik7c3dpdGNoKHMpe2Nhc2UiWFlaIjp0aGlzLl94PXAqZCp1K2MqZiptLHRoaXMuX3k9YypmKnUtcCpkKm0sdGhpcy5fej1jKmQqbStwKmYqdSx0aGlzLl93PWMqZCp1LXAqZiptO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PXAqZCp1K2MqZiptLHRoaXMuX3k9YypmKnUtcCpkKm0sdGhpcy5fej1jKmQqbS1wKmYqdSx0aGlzLl93PWMqZCp1K3AqZiptO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PXAqZCp1LWMqZiptLHRoaXMuX3k9YypmKnUrcCpkKm0sdGhpcy5fej1jKmQqbStwKmYqdSx0aGlzLl93PWMqZCp1LXAqZiptO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PXAqZCp1LWMqZiptLHRoaXMuX3k9YypmKnUrcCpkKm0sdGhpcy5fej1jKmQqbS1wKmYqdSx0aGlzLl93PWMqZCp1K3AqZiptO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PXAqZCp1K2MqZiptLHRoaXMuX3k9YypmKnUrcCpkKm0sdGhpcy5fej1jKmQqbS1wKmYqdSx0aGlzLl93PWMqZCp1LXAqZiptO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PXAqZCp1LWMqZiptLHRoaXMuX3k9YypmKnUtcCpkKm0sdGhpcy5fej1jKmQqbStwKmYqdSx0aGlzLl93PWMqZCp1K3AqZiptO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitzKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLG89ZVs4XSxzPWVbMV0sYT1lWzVdLGw9ZVs5XSxjPWVbMl0sZD1lWzZdLHU9ZVsxMF0scD1pK2ErdTtpZihwPjApe2xldCBmPS41L01hdGguc3FydChwKzEpO3RoaXMuX3c9LjI1L2YsdGhpcy5feD0oZC1sKSpmLHRoaXMuX3k9KG8tYykqZix0aGlzLl96PShzLXIpKmZ9ZWxzZSBpZihpPmEmJmk+dSl7bGV0IGY9MipNYXRoLnNxcnQoMStpLWEtdSk7dGhpcy5fdz0oZC1sKS9mLHRoaXMuX3g9LjI1KmYsdGhpcy5feT0ocitzKS9mLHRoaXMuX3o9KG8rYykvZn1lbHNlIGlmKGE+dSl7bGV0IGY9MipNYXRoLnNxcnQoMSthLWktdSk7dGhpcy5fdz0oby1jKS9mLHRoaXMuX3g9KHIrcykvZix0aGlzLl95PS4yNSpmLHRoaXMuX3o9KGwrZCkvZn1lbHNle2xldCBmPTIqTWF0aC5zcXJ0KDErdS1pLWEpO3RoaXMuX3c9KHMtcikvZix0aGlzLl94PShvK2MpL2YsdGhpcy5feT0obCtkKS9mLHRoaXMuX3o9LjI1KmZ9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKEtzKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZigwPT09aSlyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll93LGE9ZS5feCxsPWUuX3ksYz1lLl96LGQ9ZS5fdztyZXR1cm4gdGhpcy5feD1pKmQrcyphK3IqYy1vKmwsdGhpcy5feT1yKmQrcypsK28qYS1pKmMsdGhpcy5fej1vKmQrcypjK2kqbC1yKmEsdGhpcy5fdz1zKmQtaSphLXIqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LG89dGhpcy5feixzPXRoaXMuX3csYT1zKnQuX3craSp0Ll94K3IqdC5feStvKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PXMsdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PW8sdGhpcztsZXQgbD0xLWEqYTtpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGY9MS1lO3JldHVybiB0aGlzLl93PWYqcytlKnRoaXMuX3csdGhpcy5feD1mKmkrZSp0aGlzLl94LHRoaXMuX3k9ZipyK2UqdGhpcy5feSx0aGlzLl96PWYqbytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksZD1NYXRoLmF0YW4yKGMsYSksdT1NYXRoLnNpbigoMS1lKSpkKS9jLHA9TWF0aC5zaW4oZSpkKS9jO3JldHVybiB0aGlzLl93PXMqdSt0aGlzLl93KnAsdGhpcy5feD1pKnUrdGhpcy5feCpwLHRoaXMuX3k9cip1K3RoaXMuX3kqcCx0aGlzLl96PW8qdSt0aGlzLl96KnAsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihvKSxpKk1hdGguY29zKG8pLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RzLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyICQ9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTApe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pfXNldCh0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihWJC5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKFYkLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1szXSppK29bNl0qcix0aGlzLnk9b1sxXSplK29bNF0qaStvWzddKnIsdGhpcy56PW9bMl0qZStvWzVdKmkrb1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzLHM9MS8ob1szXSplK29bN10qaStvWzExXSpyK29bMTVdKTtyZXR1cm4gdGhpcy54PShvWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSkqcyx0aGlzLnk9KG9bMV0qZStvWzVdKmkrb1s5XSpyK29bMTNdKSpzLHRoaXMuej0ob1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKSpzLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQueCxzPXQueSxhPXQueixsPXQudyxjPWwqZStzKnItYSppLGQ9bCppK2EqZS1vKnIsdT1sKnIrbyppLXMqZSxwPS1vKmUtcyppLWEqcjtyZXR1cm4gdGhpcy54PWMqbCtwKi1vK2QqLWEtdSotcyx0aGlzLnk9ZCpsK3AqLXMrdSotby1jKi1hLHRoaXMuej11KmwrcCotYStjKi1zLWQqLW8sdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcix0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIsdGhpcy56PW9bMl0qZStvWzZdKmkrb1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9ZS54LGE9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLW8qYSx0aGlzLnk9bypzLWkqbCx0aGlzLno9aSphLXIqcyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIEMzLmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKEMzKX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihDMy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZigwPT09ZSlyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhLcyhpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9MiooTWF0aC5yYW5kb20oKS0uNSksZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLXQqKjIpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07JC5wcm90b3R5cGUuaXNWZWN0b3IzPSEwO3ZhciBDMz1uZXcgJCxWJD1uZXcgdHMseGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCgxLzAsMS8wLDEvMCksZT1uZXcgJCgtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxvPS0xLzAscz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgZD10W2xdLHU9dFtsKzFdLHA9dFtsKzJdO2Q8ZSYmKGU9ZCksdTxpJiYoaT11KSxwPHImJihyPXApLGQ+byYmKG89ZCksdT5zJiYocz11KSxwPmEmJihhPXApfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChvLHMsYSksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxvPS0xLzAscz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IGQ9dC5nZXRYKGwpLHU9dC5nZXRZKGwpLHA9dC5nZXRaKGwpO2Q8ZSYmKGU9ZCksdTxpJiYoaT11KSxwPHImJihyPXApLGQ+byYmKG89ZCksdT5zJiYocz11KSxwPmEmJihhPXApfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChvLHMsYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW9tLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfXNldEZyb21PYmplY3QodCxlPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PXRoaXMubWluLno9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT10aGlzLm1heC56PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fHx0aGlzLm1heC56PHRoaXMubWluLnp9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9ZXhwYW5kQnlPYmplY3QodCxlPSExKXt0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCExKTtsZXQgaT10Lmdlb21ldHJ5O2lmKHZvaWQgMCE9PWkpaWYoZSYmbnVsbCE9aS5hdHRyaWJ1dGVzJiZ2b2lkIDAhPT1pLmF0dHJpYnV0ZXMucG9zaXRpb24pe2xldCBvPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtmb3IobGV0IHM9MCxhPW8uY291bnQ7czxhO3MrKylvbS5mcm9tQnVmZmVyQXR0cmlidXRlKG8scykuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuZXhwYW5kQnlQb2ludChvbSl9ZWxzZSBudWxsPT09aS5ib3VuZGluZ0JveCYmaS5jb21wdXRlQm91bmRpbmdCb3goKSxNMy5jb3B5KGkuYm91bmRpbmdCb3gpLE0zLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKE0zKTtsZXQgcj10LmNoaWxkcmVuO2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl0aGlzLmV4cGFuZEJ5T2JqZWN0KHJbb10sZSk7cmV0dXJuIHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55fHx0Lno8dGhpcy5taW4uenx8dC56PnRoaXMubWF4LnopfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55JiZ0aGlzLm1pbi56PD10Lm1pbi56JiZ0Lm1heC56PD10aGlzLm1heC56fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSksKHQuei10aGlzLm1pbi56KS8odGhpcy5tYXguei10aGlzLm1pbi56KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueXx8dC5tYXguejx0aGlzLm1pbi56fHx0Lm1pbi56PnRoaXMubWF4LnopfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuY2xhbXBQb2ludCh0LmNlbnRlcixvbSksb20uZGlzdGFuY2VUb1NxdWFyZWQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGUsaTtyZXR1cm4gdC5ub3JtYWwueD4wPyhlPXQubm9ybWFsLngqdGhpcy5taW4ueCxpPXQubm9ybWFsLngqdGhpcy5tYXgueCk6KGU9dC5ub3JtYWwueCp0aGlzLm1heC54LGk9dC5ub3JtYWwueCp0aGlzLm1pbi54KSx0Lm5vcm1hbC55PjA/KGUrPXQubm9ybWFsLnkqdGhpcy5taW4ueSxpKz10Lm5vcm1hbC55KnRoaXMubWF4LnkpOihlKz10Lm5vcm1hbC55KnRoaXMubWF4LnksaSs9dC5ub3JtYWwueSp0aGlzLm1pbi55KSx0Lm5vcm1hbC56PjA/KGUrPXQubm9ybWFsLnoqdGhpcy5taW4ueixpKz10Lm5vcm1hbC56KnRoaXMubWF4LnopOihlKz10Lm5vcm1hbC56KnRoaXMubWF4LnosaSs9dC5ub3JtYWwueip0aGlzLm1pbi56KSxlPD0tdC5jb25zdGFudCYmaT49LXQuY29uc3RhbnR9aW50ZXJzZWN0c1RyaWFuZ2xlKHQpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiExO3RoaXMuZ2V0Q2VudGVyKG94KSxWRC5zdWJWZWN0b3JzKHRoaXMubWF4LG94KSx5MC5zdWJWZWN0b3JzKHQuYSxveCkseDAuc3ViVmVjdG9ycyh0LmIsb3gpLEMwLnN1YlZlY3RvcnModC5jLG94KSxycC5zdWJWZWN0b3JzKHgwLHkwKSxvcC5zdWJWZWN0b3JzKEMwLHgwKSxzbS5zdWJWZWN0b3JzKHkwLEMwKTtsZXQgZT1bMCwtcnAueixycC55LDAsLW9wLnosb3AueSwwLC1zbS56LHNtLnkscnAueiwwLC1ycC54LG9wLnosMCwtb3AueCxzbS56LDAsLXNtLngsLXJwLnkscnAueCwwLC1vcC55LG9wLngsMCwtc20ueSxzbS54LDBdO3JldHVybiEoIXczKGUseTAseDAsQzAsVkQpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF3MyhlLHkwLHgwLEMwLFZEKSkpJiYoSEQuY3Jvc3NWZWN0b3JzKHJwLG9wKSxlPVtIRC54LEhELnksSEQuel0sdzMoZSx5MCx4MCxDMCxWRCkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG9tLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPS41KnRoaXMuZ2V0U2l6ZShvbSkubGVuZ3RoKCksdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpfHwoTmRbMF0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbMV0uc2V0KHRoaXMubWluLngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksTmRbMl0uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbM10uc2V0KHRoaXMubWluLngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksTmRbNF0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbNV0uc2V0KHRoaXMubWF4LngsdGhpcy5taW4ueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksTmRbNl0uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1pbi56KS5hcHBseU1hdHJpeDQodCksTmRbN10uc2V0KHRoaXMubWF4LngsdGhpcy5tYXgueSx0aGlzLm1heC56KS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRGcm9tUG9pbnRzKE5kKSksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTt4YS5wcm90b3R5cGUuaXNCb3gzPSEwO3ZhciBOZD1bbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICQsbmV3ICRdLG9tPW5ldyAkLE0zPW5ldyB4YSx5MD1uZXcgJCx4MD1uZXcgJCxDMD1uZXcgJCxycD1uZXcgJCxvcD1uZXcgJCxzbT1uZXcgJCxveD1uZXcgJCxWRD1uZXcgJCxIRD1uZXcgJCxhbT1uZXcgJDtmdW5jdGlvbiB3MyhuLHQsZSxpLHIpe2ZvcihsZXQgbz0wLHM9bi5sZW5ndGgtMztvPD1zO28rPTMpe2FtLmZyb21BcnJheShuLG8pO2xldCBhPXIueCpNYXRoLmFicyhhbS54KStyLnkqTWF0aC5hYnMoYW0ueSkrci56Kk1hdGguYWJzKGFtLnopLGw9dC5kb3QoYW0pLGM9ZS5kb3QoYW0pLGQ9aS5kb3QoYW0pO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsZCksTWF0aC5taW4obCxjLGQpKT5hKXJldHVybiExfXJldHVybiEwfXZhciB3UmU9bmV3IHhhLEgkPW5ldyAkLHpEPW5ldyAkLFMzPW5ldyAkLGJwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9pLmNvcHkoZSk6d1JlLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10Lmxlbmd0aDtvPHM7bysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7UzMuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1TMy5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPS41KihpLXRoaXMucmFkaXVzKTt0aGlzLmNlbnRlci5hZGQoUzMubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuITA9PT10aGlzLmNlbnRlci5lcXVhbHModC5jZW50ZXIpP3pELnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOnpELnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoSCQuY29weSh0LmNlbnRlcikuYWRkKHpEKSksdGhpcy5leHBhbmRCeVBvaW50KEgkLmNvcHkodC5jZW50ZXIpLnN1Yih6RCkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0sTGQ9bmV3ICQsRTM9bmV3ICQsVUQ9bmV3ICQsc3A9bmV3ICQsVDM9bmV3ICQsakQ9bmV3ICQsRDM9bmV3ICQsdnA9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LGUpe3JldHVybiBlLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LExkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7ZS5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBpPWUuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gaTwwP2UuY29weSh0aGlzLm9yaWdpbik6ZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihpKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCBlPUxkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gZTwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihMZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihlKS5hZGQodGhpcy5vcmlnaW4pLExkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQsZSxpLHIpe0UzLmNvcHkodCkuYWRkKGUpLm11bHRpcGx5U2NhbGFyKC41KSxVRC5jb3B5KGUpLnN1Yih0KS5ub3JtYWxpemUoKSxzcC5jb3B5KHRoaXMub3JpZ2luKS5zdWIoRTMpO2xldCB1LHAsZixtLG89LjUqdC5kaXN0YW5jZVRvKGUpLHM9LXRoaXMuZGlyZWN0aW9uLmRvdChVRCksYT1zcC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LXNwLmRvdChVRCksYz1zcC5sZW5ndGhTcSgpLGQ9TWF0aC5hYnMoMS1zKnMpO2lmKGQ+MClpZih1PXMqbC1hLHA9cyphLWwsbT1vKmQsdT49MClpZihwPj0tbSlpZihwPD1tKXtsZXQgYj0xL2Q7dSo9YixwKj1iLGY9dSoodStzKnArMiphKStwKihzKnUrcCsyKmwpK2N9ZWxzZSBwPW8sdT1NYXRoLm1heCgwLC0ocypwK2EpKSxmPS11KnUrcCoocCsyKmwpK2M7ZWxzZSBwPS1vLHU9TWF0aC5tYXgoMCwtKHMqcCthKSksZj0tdSp1K3AqKHArMipsKStjO2Vsc2UgcDw9LW0/KHU9TWF0aC5tYXgoMCwtKC1zKm8rYSkpLHA9dT4wPy1vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxmPS11KnUrcCoocCsyKmwpK2MpOnA8PW0/KHU9MCxwPU1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxmPXAqKHArMipsKStjKToodT1NYXRoLm1heCgwLC0ocypvK2EpKSxwPXU+MD9vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxmPS11KnUrcCoocCsyKmwpK2MpO2Vsc2UgcD1zPjA/LW86byx1PU1hdGgubWF4KDAsLShzKnArYSkpLGY9LXUqdStwKihwKzIqbCkrYztyZXR1cm4gaSYmaS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih1KS5hZGQodGhpcy5vcmlnaW4pLHImJnIuY29weShVRCkubXVsdGlwbHlTY2FsYXIocCkuYWRkKEUzKSxmfWludGVyc2VjdFNwaGVyZSh0LGUpe0xkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBpPUxkLmRvdCh0aGlzLmRpcmVjdGlvbikscj1MZC5kb3QoTGQpLWkqaSxvPXQucmFkaXVzKnQucmFkaXVzO2lmKHI+bylyZXR1cm4gbnVsbDtsZXQgcz1NYXRoLnNxcnQoby1yKSxhPWktcyxsPWkrcztyZXR1cm4gYTwwJiZsPDA/bnVsbDp0aGlzLmF0KGE8MD9sOmEsZSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKDA9PT1lKXJldHVybiAwPT09dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPzA6bnVsbDtsZXQgaT0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gaT49MD9pOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtsZXQgaT10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gbnVsbD09PWk/bnVsbDp0aGlzLmF0KGksZSl9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gMD09PWV8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBpLHIsbyxzLGEsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCxkPTEvdGhpcy5kaXJlY3Rpb24ueSx1PTEvdGhpcy5kaXJlY3Rpb24ueixwPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhpPSh0Lm1pbi54LXAueCkqYyxyPSh0Lm1heC54LXAueCkqYyk6KGk9KHQubWF4LngtcC54KSpjLHI9KHQubWluLngtcC54KSpjKSxkPj0wPyhvPSh0Lm1pbi55LXAueSkqZCxzPSh0Lm1heC55LXAueSkqZCk6KG89KHQubWF4LnktcC55KSpkLHM9KHQubWluLnktcC55KSpkKSxpPnN8fG8+cnx8KChvPml8fGkhPWkpJiYoaT1vKSwoczxyfHxyIT1yKSYmKHI9cyksdT49MD8oYT0odC5taW4uei1wLnopKnUsbD0odC5tYXguei1wLnopKnUpOihhPSh0Lm1heC56LXAueikqdSxsPSh0Lm1pbi56LXAueikqdSksaT5sfHxhPnIpfHwoKGE+aXx8aSE9aSkmJihpPWEpLChsPHJ8fHIhPXIpJiYocj1sKSxyPDApP251bGw6dGhpcy5hdChpPj0wP2k6cixlKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiBudWxsIT09dGhpcy5pbnRlcnNlY3RCb3godCxMZCl9aW50ZXJzZWN0VHJpYW5nbGUodCxlLGkscixvKXtUMy5zdWJWZWN0b3JzKGUsdCksakQuc3ViVmVjdG9ycyhpLHQpLEQzLmNyb3NzVmVjdG9ycyhUMyxqRCk7bGV0IGEscz10aGlzLmRpcmVjdGlvbi5kb3QoRDMpO2lmKHM+MCl7aWYocilyZXR1cm4gbnVsbDthPTF9ZWxzZXtpZighKHM8MCkpcmV0dXJuIG51bGw7YT0tMSxzPS1zfXNwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9YSp0aGlzLmRpcmVjdGlvbi5kb3QoakQuY3Jvc3NWZWN0b3JzKHNwLGpEKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPWEqdGhpcy5kaXJlY3Rpb24uZG90KFQzLmNyb3NzKHNwKSk7aWYoYzwwfHxsK2M+cylyZXR1cm4gbnVsbDtsZXQgZD0tYSpzcC5kb3QoRDMpO3JldHVybiBkPDA/bnVsbDp0aGlzLmF0KGQvcyxvKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSx4bj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09ZSx5WzhdPWkseVsxMl09cix5WzFdPW8seVs1XT1zLHlbOV09YSx5WzEzXT1sLHlbMl09Yyx5WzZdPWQseVsxMF09dSx5WzE0XT1wLHlbM109Zix5WzddPW0seVsxMV09Yix5WzE1XT1NLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgeG4pLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS9NMC5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbz0xL00wLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxzPTEvTTAuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKm8sZVs1XT1pWzVdKm8sZVs2XT1pWzZdKm8sZVs3XT0wLGVbOF09aVs4XSpzLGVbOV09aVs5XSpzLGVbMTBdPWlbMTBdKnMsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LG89dC56LHM9TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhvKSx1PU1hdGguc2luKG8pO2lmKCJYWVoiPT09dC5vcmRlcil7bGV0IHA9cypkLGY9cyp1LG09YSpkLGI9YSp1O2VbMF09bCpkLGVbNF09LWwqdSxlWzhdPWMsZVsxXT1mK20qYyxlWzVdPXAtYipjLGVbOV09LWEqbCxlWzJdPWItcCpjLGVbNl09bStmKmMsZVsxMF09cypsfWVsc2UgaWYoIllYWiI9PT10Lm9yZGVyKXtsZXQgcD1sKmQsZj1sKnUsbT1jKmQsYj1jKnU7ZVswXT1wK2IqYSxlWzRdPW0qYS1mLGVbOF09cypjLGVbMV09cyp1LGVbNV09cypkLGVbOV09LWEsZVsyXT1mKmEtbSxlWzZdPWIrcCphLGVbMTBdPXMqbH1lbHNlIGlmKCJaWFkiPT09dC5vcmRlcil7bGV0IHA9bCpkLGY9bCp1LG09YypkLGI9Yyp1O2VbMF09cC1iKmEsZVs0XT0tcyp1LGVbOF09bStmKmEsZVsxXT1mK20qYSxlWzVdPXMqZCxlWzldPWItcCphLGVbMl09LXMqYyxlWzZdPWEsZVsxMF09cypsfWVsc2UgaWYoIlpZWCI9PT10Lm9yZGVyKXtsZXQgcD1zKmQsZj1zKnUsbT1hKmQsYj1hKnU7ZVswXT1sKmQsZVs0XT1tKmMtZixlWzhdPXAqYytiLGVbMV09bCp1LGVbNV09YipjK3AsZVs5XT1mKmMtbSxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPXMqbH1lbHNlIGlmKCJZWlgiPT09dC5vcmRlcil7bGV0IHA9cypsLGY9cypjLG09YSpsLGI9YSpjO2VbMF09bCpkLGVbNF09Yi1wKnUsZVs4XT1tKnUrZixlWzFdPXUsZVs1XT1zKmQsZVs5XT0tYSpkLGVbMl09LWMqZCxlWzZdPWYqdSttLGVbMTBdPXAtYip1fWVsc2UgaWYoIlhaWSI9PT10Lm9yZGVyKXtsZXQgcD1zKmwsZj1zKmMsbT1hKmwsYj1hKmM7ZVswXT1sKmQsZVs0XT0tdSxlWzhdPWMqZCxlWzFdPXAqdStiLGVbNV09cypkLGVbOV09Zip1LW0sZVsyXT1tKnUtZixlWzZdPWEqZCxlWzEwXT1iKnUrcH1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKFNSZSx0LEVSZSl9bG9va0F0KHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiBiYS5zdWJWZWN0b3JzKHQsZSksMD09PWJhLmxlbmd0aFNxKCkmJihiYS56PTEpLGJhLm5vcm1hbGl6ZSgpLGFwLmNyb3NzVmVjdG9ycyhpLGJhKSwwPT09YXAubGVuZ3RoU3EoKSYmKDE9PT1NYXRoLmFicyhpLnopP2JhLngrPTFlLTQ6YmEueis9MWUtNCxiYS5ub3JtYWxpemUoKSxhcC5jcm9zc1ZlY3RvcnMoaSxiYSkpLGFwLm5vcm1hbGl6ZSgpLEdELmNyb3NzVmVjdG9ycyhiYSxhcCksclswXT1hcC54LHJbNF09R0QueCxyWzhdPWJhLngsclsxXT1hcC55LHJbNV09R0QueSxyWzldPWJhLnksclsyXT1hcC56LHJbNl09R0QueixyWzEwXT1iYS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVs0XSxsPWlbOF0sYz1pWzEyXSxkPWlbMV0sdT1pWzVdLHA9aVs5XSxmPWlbMTNdLG09aVsyXSxiPWlbNl0sTT1pWzEwXSx5PWlbMTRdLHg9aVszXSxSPWlbN10sQT1pWzExXSxWPWlbMTVdLHRlPXJbMF0sSz1yWzRdLHhlPXJbOF0sWGU9clsxMl0sRGU9clsxXSxEPXJbNV0scmU9cls5XSxjZT1yWzEzXSxmZT1yWzJdLGJlPXJbNl0sbmU9clsxMF0sZGU9clsxNF0scGU9clszXSxqZT1yWzddLENlPXJbMTFdLE5lPXJbMTVdO3JldHVybiBvWzBdPXMqdGUrYSpEZStsKmZlK2MqcGUsb1s0XT1zKksrYSpEK2wqYmUrYypqZSxvWzhdPXMqeGUrYSpyZStsKm5lK2MqQ2Usb1sxMl09cypYZSthKmNlK2wqZGUrYypOZSxvWzFdPWQqdGUrdSpEZStwKmZlK2YqcGUsb1s1XT1kKksrdSpEK3AqYmUrZipqZSxvWzldPWQqeGUrdSpyZStwKm5lK2YqQ2Usb1sxM109ZCpYZSt1KmNlK3AqZGUrZipOZSxvWzJdPW0qdGUrYipEZStNKmZlK3kqcGUsb1s2XT1tKksrYipEK00qYmUreSpqZSxvWzEwXT1tKnhlK2IqcmUrTSpuZSt5KkNlLG9bMTRdPW0qWGUrYipjZStNKmRlK3kqTmUsb1szXT14KnRlK1IqRGUrQSpmZStWKnBlLG9bN109eCpLK1IqRCtBKmJlK1YqamUsb1sxMV09eCp4ZStSKnJlK0EqbmUrVipDZSxvWzE1XT14KlhlK1IqY2UrQSpkZStWKk5lLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sZD10WzJdLHU9dFs2XSxwPXRbMTBdLGY9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqdS1yKmMqdS1vKmEqcCtpKmMqcCtyKmEqZi1pKmwqZikrdFs3XSooK2UqbCpmLWUqYypwK28qcypwLXIqcypmK3IqYypkLW8qbCpkKSt0WzExXSooK2UqYyp1LWUqYSpmLW8qcyp1K2kqcypmK28qYSpkLWkqYypkKSt0WzE1XSooLXIqYSpkLWUqbCp1K2UqYSpwK3Iqcyp1LWkqcypwK2kqbCpkKX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLGQ9dFs4XSx1PXRbOV0scD10WzEwXSxmPXRbMTFdLG09dFsxMl0sYj10WzEzXSxNPXRbMTRdLHk9dFsxNV0seD11Kk0qYy1iKnAqYytiKmwqZi1hKk0qZi11KmwqeSthKnAqeSxSPW0qcCpjLWQqTSpjLW0qbCpmK3MqTSpmK2QqbCp5LXMqcCp5LEE9ZCpiKmMtbSp1KmMrbSphKmYtcypiKmYtZCphKnkrcyp1KnksVj1tKnUqbC1kKmIqbC1tKmEqcCtzKmIqcCtkKmEqTS1zKnUqTSx0ZT1lKngraSpSK3IqQStvKlY7aWYoMD09PXRlKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgSz0xL3RlO3JldHVybiB0WzBdPXgqSyx0WzFdPShiKnAqby11Kk0qby1iKnIqZitpKk0qZit1KnIqeS1pKnAqeSkqSyx0WzJdPShhKk0qby1iKmwqbytiKnIqYy1pKk0qYy1hKnIqeStpKmwqeSkqSyx0WzNdPSh1Kmwqby1hKnAqby11KnIqYytpKnAqYythKnIqZi1pKmwqZikqSyx0WzRdPVIqSyx0WzVdPShkKk0qby1tKnAqbyttKnIqZi1lKk0qZi1kKnIqeStlKnAqeSkqSyx0WzZdPShtKmwqby1zKk0qby1tKnIqYytlKk0qYytzKnIqeS1lKmwqeSkqSyx0WzddPShzKnAqby1kKmwqbytkKnIqYy1lKnAqYy1zKnIqZitlKmwqZikqSyx0WzhdPUEqSyx0WzldPShtKnUqby1kKmIqby1tKmkqZitlKmIqZitkKmkqeS1lKnUqeSkqSyx0WzEwXT0ocypiKm8tbSphKm8rbSppKmMtZSpiKmMtcyppKnkrZSphKnkpKkssdFsxMV09KGQqYSpvLXMqdSpvLWQqaSpjK2UqdSpjK3MqaSpmLWUqYSpmKSpLLHRbMTJdPVYqSyx0WzEzXT0oZCpiKnItbSp1KnIrbSppKnAtZSpiKnAtZCppKk0rZSp1Kk0pKkssdFsxNF09KG0qYSpyLXMqYipyLW0qaSpsK2UqYipsK3MqaSpNLWUqYSpNKSpLLHRbMTVdPShzKnUqci1kKmEqcitkKmkqbC1lKnUqbC1zKmkqcCtlKmEqcCkqSyx0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyxkPW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCxkKmEraSxkKmwtcipzLDAsYypsLXIqYSxkKmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyxkPXMrcyx1PWErYSxwPW8qYyxmPW8qZCxtPW8qdSxiPXMqZCxNPXMqdSx5PWEqdSx4PWwqYyxSPWwqZCxBPWwqdSxWPWkueCx0ZT1pLnksSz1pLno7cmV0dXJuIHJbMF09KDEtKGIreSkpKlYsclsxXT0oZitBKSpWLHJbMl09KG0tUikqVixyWzNdPTAscls0XT0oZi1BKSp0ZSxyWzVdPSgxLShwK3kpKSp0ZSxyWzZdPShNK3gpKnRlLHJbN109MCxyWzhdPShtK1IpKksscls5XT0oTS14KSpLLHJbMTBdPSgxLShwK2IpKSpLLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPU0wLnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCkscz1NMC5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9TTAuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxRbC5jb3B5KHRoaXMpO2xldCBjPTEvbyxkPTEvcyx1PTEvYTtyZXR1cm4gUWwuZWxlbWVudHNbMF0qPWMsUWwuZWxlbWVudHNbMV0qPWMsUWwuZWxlbWVudHNbMl0qPWMsUWwuZWxlbWVudHNbNF0qPWQsUWwuZWxlbWVudHNbNV0qPWQsUWwuZWxlbWVudHNbNl0qPWQsUWwuZWxlbWVudHNbOF0qPXUsUWwuZWxlbWVudHNbOV0qPXUsUWwuZWxlbWVudHNbMTBdKj11LGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFFsKSxpLng9byxpLnk9cyxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLG8scyl7dm9pZCAwPT09cyYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxjPTIqby8oaS1yKSxkPShlK3QpLyhlLXQpLHU9KGkrcikvKGktcikscD0tKHMrbykvKHMtbyksZj0tMipzKm8vKHMtbyk7cmV0dXJuIGFbMF09MipvLyhlLXQpLGFbNF09MCxhWzhdPWQsYVsxMl09MCxhWzFdPTAsYVs1XT1jLGFbOV09dSxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09cCxhWzE0XT1mLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscixvLHMpe2xldCBhPXRoaXMuZWxlbWVudHMsbD0xLyhlLXQpLGM9MS8oaS1yKSxkPTEvKHMtbyksdT0oZSt0KSpsLHA9KGkrcikqYyxmPShzK28pKmQ7cmV0dXJuIGFbMF09MipsLGFbNF09MCxhWzhdPTAsYVsxMl09LXUsYVsxXT0wLGFbNV09MipjLGFbOV09MCxhWzEzXT0tcCxhWzJdPTAsYVs2XT0wLGFbMTBdPS0yKmQsYVsxNF09LWYsYVszXT0wLGFbN109MCxhWzExXT0wLGFbMTVdPTEsdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjwxNjtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDE2O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19O3huLnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7dmFyIE0wPW5ldyAkLFFsPW5ldyB4bixTUmU9bmV3ICQoMCwwLDApLEVSZT1uZXcgJCgxLDEsMSksYXA9bmV3ICQsR0Q9bmV3ICQsYmE9bmV3ICQseiQ9bmV3IHhuLFUkPW5ldyB0cyx5cD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPXlwLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLG89clswXSxzPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sZD1yWzldLHU9clsyXSxwPXJbNl0sZj1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEtzKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLWQsZiksdGhpcy5fej1NYXRoLmF0YW4yKC1zLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUtzKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxmKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtdSxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihLcyhwLC0xLDEpKSxNYXRoLmFicyhwKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC11LGYpLHRoaXMuX3o9TWF0aC5hdGFuMigtcyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1Lcyh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsZiksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1zLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oS3MobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtZCxjKSx0aGlzLl95PU1hdGguYXRhbjIoLXUsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZikpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtS3MocywtMSwxKSksTWF0aC5hYnMocyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihwLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC1kLGYpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSwhMD09PWkmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4geiQubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoeiQsZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBVJC5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihVJCx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx2b2lkIDAhPT10WzNdJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyAkKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eXAucHJvdG90eXBlLmlzRXVsZXI9ITAseXAuRGVmYXVsdE9yZGVyPSJYWVoiLHlwLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIENJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxUUmU9MCxqJD1uZXcgJCx3MD1uZXcgdHMsQmQ9bmV3IHhuLFdEPW5ldyAkLHN4PW5ldyAkLERSZT1uZXcgJCxJUmU9bmV3IHRzLEckPW5ldyAkKDEsMCwwKSxXJD1uZXcgJCgwLDEsMCkscSQ9bmV3ICQoMCwwLDEpLEFSZT17dHlwZToiYWRkZWQifSxZJD17dHlwZToicmVtb3ZlZCJ9LEJpPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlRSZSsrfSksdGhpcy51dWlkPUpsKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPUJpLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyAkLGU9bmV3IHlwLGk9bmV3IHRzLHI9bmV3ICQoMSwxLDEpO2UuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9KSxpLl9vbkNoYW5nZShmdW5jdGlvbigpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppfSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgeG59LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGJvfX0pLHRoaXMubWF0cml4PW5ldyB4bix0aGlzLm1hdHJpeFdvcmxkPW5ldyB4bix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9QmkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBDSSx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gdzAuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseSh3MCksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiB3MC5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHcwKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEckLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKFckLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHEkLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBqJC5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGokLm11bHRpcGx5U2NhbGFyKGUpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKEckLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKFckLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHEkLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChCZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxlLGkpe3QuaXNWZWN0b3IzP1dELmNvcHkodCk6V0Quc2V0KHQsZSxpKTtsZXQgcj10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxzeC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P0JkLmxvb2tBdChzeCxXRCx0aGlzLnVwKTpCZC5sb29rQXQoV0Qsc3gsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChCZCksciYmKEJkLmV4dHJhY3RSb3RhdGlvbihyLm1hdHJpeFdvcmxkKSx3MC5zZXRGcm9tUm90YXRpb25NYXRyaXgoQmQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh3MC5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdGhpcy5hZGQoYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8obnVsbCE9PXQucGFyZW50JiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KEFSZSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuLTEhPT1lJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpLHQuZGlzcGF0Y2hFdmVudChZJCkpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2xldCB0PXRoaXMucGFyZW50O3JldHVybiBudWxsIT09dCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtsZXQgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KFkkKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQmQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChCZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShzeCx0LERSZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShzeCxJUmUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsZD1sLmxlbmd0aDtjPGQ7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksZD1zKHQuaW1hZ2VzKSx1PXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksZj1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksZC5sZW5ndGg+MCYmKGkuaW1hZ2VzPWQpLHUubGVuZ3RoPjAmJihpLnNoYXBlcz11KSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksZi5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1mKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCBkPWFbY107ZGVsZXRlIGQubWV0YWRhdGEsbC5wdXNoKGQpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07QmkuRGVmYXVsdFVwPW5ldyAkKDAsMSwwKSxCaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxCaS5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgWmw9bmV3ICQsVmQ9bmV3ICQsSTM9bmV3ICQsSGQ9bmV3ICQsUzA9bmV3ICQsRTA9bmV3ICQsWCQ9bmV3ICQsQTM9bmV3ICQsUjM9bmV3ICQsUDM9bmV3ICQsVnI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkLGk9bmV3ICQpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1pfXN0YXRpYyBnZXROb3JtYWwodCxlLGkscil7ci5zdWJWZWN0b3JzKGksZSksWmwuc3ViVmVjdG9ycyh0LGUpLHIuY3Jvc3MoWmwpO2xldCBvPXIubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP3IubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOnIuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQsZSxpLHIsbyl7Wmwuc3ViVmVjdG9ycyhyLGUpLFZkLnN1YlZlY3RvcnMoaSxlKSxJMy5zdWJWZWN0b3JzKHQsZSk7bGV0IHM9WmwuZG90KFpsKSxhPVpsLmRvdChWZCksbD1abC5kb3QoSTMpLGM9VmQuZG90KFZkKSxkPVZkLmRvdChJMyksdT1zKmMtYSphO2lmKDA9PT11KXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IHA9MS91LGY9KGMqbC1hKmQpKnAsbT0ocypkLWEqbCkqcDtyZXR1cm4gby5zZXQoMS1mLW0sbSxmKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixIZCksSGQueD49MCYmSGQueT49MCYmSGQueCtIZC55PD0xfXN0YXRpYyBnZXRVVih0LGUsaSxyLG8scyxhLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLEhkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sSGQueCksbC5hZGRTY2FsZWRWZWN0b3IocyxIZC55KSxsLmFkZFNjYWxlZFZlY3RvcihhLEhkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLGkscil7cmV0dXJuIFpsLnN1YlZlY3RvcnMoaSxlKSxWZC5zdWJWZWN0b3JzKHQsZSksWmwuY3Jvc3MoVmQpLmRvdChyKTwwfXNldCh0LGUsaSl7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KGkpLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbaV0pLHRoaXMuYy5jb3B5KHRbcl0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hLmNvcHkodC5hKSx0aGlzLmIuY29weSh0LmIpLHRoaXMuYy5jb3B5KHQuYyksdGhpc31nZXRBcmVhKCl7cmV0dXJuIFpsLnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYiksVmQuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpabC5jcm9zcyhWZCkubGVuZ3RoKCl9Z2V0TWlkcG9pbnQodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gVnIuZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB0LnNldEZyb21Db3BsYW5hclBvaW50cyh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9Z2V0QmFyeWNvb3JkKHQsZSl7cmV0dXJuIFZyLmdldEJhcnljb29yZCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfWdldFVWKHQsZSxpLHIsbyl7cmV0dXJuIFZyLmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxpLHIsbyl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gVnIuY29udGFpbnNQb2ludCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1pc0Zyb250RmFjaW5nKHQpe3JldHVybiBWci5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtsZXQgcyxhLGk9dGhpcy5hLHI9dGhpcy5iLG89dGhpcy5jO1MwLnN1YlZlY3RvcnMocixpKSxFMC5zdWJWZWN0b3JzKG8saSksQTMuc3ViVmVjdG9ycyh0LGkpO2xldCBsPVMwLmRvdChBMyksYz1FMC5kb3QoQTMpO2lmKGw8PTAmJmM8PTApcmV0dXJuIGUuY29weShpKTtSMy5zdWJWZWN0b3JzKHQscik7bGV0IGQ9UzAuZG90KFIzKSx1PUUwLmRvdChSMyk7aWYoZD49MCYmdTw9ZClyZXR1cm4gZS5jb3B5KHIpO2xldCBwPWwqdS1kKmM7aWYocDw9MCYmbD49MCYmZDw9MClyZXR1cm4gcz1sLyhsLWQpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoUzAscyk7UDMuc3ViVmVjdG9ycyh0LG8pO2xldCBmPVMwLmRvdChQMyksbT1FMC5kb3QoUDMpO2lmKG0+PTAmJmY8PW0pcmV0dXJuIGUuY29weShvKTtsZXQgYj1mKmMtbCptO2lmKGI8PTAmJmM+PTAmJm08PTApcmV0dXJuIGE9Yy8oYy1tKSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKEUwLGEpO2xldCBNPWQqbS1mKnU7aWYoTTw9MCYmdS1kPj0wJiZmLW0+PTApcmV0dXJuIFgkLnN1YlZlY3RvcnMobyxyKSxhPSh1LWQpLyh1LWQrKGYtbSkpLGUuY29weShyKS5hZGRTY2FsZWRWZWN0b3IoWCQsYSk7bGV0IHk9MS8oTStiK3ApO3JldHVybiBzPWIqeSxhPXAqeSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFMwLHMpLmFkZFNjYWxlZFZlY3RvcihFMCxhKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxSUmU9MCxBbz1jbGFzcyBleHRlbmRzIFVke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpSUmUrK30pLHRoaXMudXVpZD1KbCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPWd4LHRoaXMuc2lkZT15eCx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9V2VlLHRoaXMuYmxlbmREc3Q9cWVlLHRoaXMuYmxlbmRFcXVhdGlvbj1CMCx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPVozLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWkZhaWw9NzY4MCx0aGlzLnN0ZW5jaWxaUGFzcz03NjgwLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYodm9pZCAwPT09aSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKCJzaGFkaW5nIj09PWUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PWk7Y29udGludWV9bGV0IHI9dGhpc1tlXTt2b2lkIDAhPT1yP3ImJnIuaXNDb2xvcj9yLnNldChpKTpyJiZyLmlzVmVjdG9yMyYmaSYmaS5pc1ZlY3RvcjM/ci5jb3B5KGkpOnRoaXNbZV09aTpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19dG9KU09OKHQpe2xldCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtlJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gcihvKXtsZXQgcz1bXTtmb3IobGV0IGEgaW4gbyl7bGV0IGw9b1thXTtkZWxldGUgbC5tZXRhZGF0YSxzLnB1c2gobCl9cmV0dXJuIHN9aWYoaS51dWlkPXRoaXMudXVpZCxpLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYoaS5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoaS5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGkucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGkubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx2b2lkIDAhPT10aGlzLnNoZWVuJiYoaS5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYoaS5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGVlblJvdWdobmVzcyYmKGkuc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYoaS5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYxIT09dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYoaS5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNwZWN1bGFySW50ZW5zaXR5JiYoaS5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYoaS5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihpLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihpLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihpLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYoaS5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihpLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihpLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoaS5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLGkubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihpLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsaS5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihpLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLGkuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxpLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYoaS5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsaS5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLGkuZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKGkubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKGkuZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYoaS5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdm9pZCAwIT09dGhpcy5jb21iaW5lJiYoaS5jb21iaW5lPXRoaXMuY29tYmluZSkpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYoaS5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXRoaXMucmVmbGVjdGl2aXR5JiYoaS5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHZvaWQgMCE9PXRoaXMucmVmcmFjdGlvblJhdGlvJiYoaS5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYoaS5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRyYW5zbWlzc2lvbiYmKGkudHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYoaS50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMudGhpY2tuZXNzJiYoaS50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihpLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlJiYoaS5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkNvbG9yJiYoaS5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaXplJiYoaS5zaXplPXRoaXMuc2l6ZSksbnVsbCE9PXRoaXMuc2hhZG93U2lkZSYmKGkuc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoaS5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1neCYmKGkuYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09eXgmJihpLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKGkudmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKGkub3BhY2l0eT10aGlzLm9wYWNpdHkpLCEwPT09dGhpcy50cmFuc3BhcmVudCYmKGkudHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksaS5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsaS5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3QsaS5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxpLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLGkuYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsaS5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsaS5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxpLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsaS5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixpLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxpLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsaS5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsaS5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmMCE9PXRoaXMucm90YXRpb24mJihpLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLCEwPT09dGhpcy5wb2x5Z29uT2Zmc2V0JiYoaS5wb2x5Z29uT2Zmc2V0PSEwKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yJiYoaS5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksMCE9PXRoaXMucG9seWdvbk9mZnNldFVuaXRzJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiYxIT09dGhpcy5saW5ld2lkdGgmJihpLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdm9pZCAwIT09dGhpcy5kYXNoU2l6ZSYmKGkuZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdm9pZCAwIT09dGhpcy5nYXBTaXplJiYoaS5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdm9pZCAwIT09dGhpcy5zY2FsZSYmKGkuc2NhbGU9dGhpcy5zY2FsZSksITA9PT10aGlzLmRpdGhlcmluZyYmKGkuZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYoaS5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLCEwPT09dGhpcy5hbHBoYVRvQ292ZXJhZ2UmJihpLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksITA9PT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSYmKGkucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSwhMD09PXRoaXMud2lyZWZyYW1lJiYoaS53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWNhcCYmKGkud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVqb2luJiYoaS53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSwhMD09PXRoaXMuZmxhdFNoYWRpbmcmJihpLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLCExPT09dGhpcy52aXNpYmxlJiYoaS52aXNpYmxlPSExKSwhMT09PXRoaXMudG9uZU1hcHBlZCYmKGkudG9uZU1hcHBlZD0hMSksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxlKXtsZXQgbz1yKHQudGV4dHVyZXMpLHM9cih0LmltYWdlcyk7by5sZW5ndGg+MCYmKGkudGV4dHVyZXM9bykscy5sZW5ndGg+MCYmKGkuaW1hZ2VzPXMpfXJldHVybiBpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYobnVsbCE9PWUpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgbz0wO28hPT1yOysrbylpW29dPWVbb10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9fTtBby5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIgcG09Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPVlJLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BtLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBkcj1uZXcgJCxxRD1uZXcgJGUsUHI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiBhcnJheSBzaG91bGQgYmUgYSBUeXBlZCBBcnJheS4iKTt0aGlzLm5hbWU9IiIsdGhpcy5hcnJheT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLmNvdW50PXZvaWQgMCE9PXQ/dC5sZW5ndGgvZTowLHRoaXMubm9ybWFsaXplZD0hMD09PWksdGhpcy51c2FnZT1DeCx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTB9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuaXRlbVNpemU9dC5pdGVtU2l6ZSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5ub3JtYWxpemVkPXQubm9ybWFsaXplZCx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuaXRlbVNpemUsaSo9ZS5pdGVtU2l6ZTtmb3IobGV0IHI9MCxvPXRoaXMuaXRlbVNpemU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfWNvcHlBcnJheSh0KXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCksdGhpc31jb3B5Q29sb3JzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtsZXQgcz10W3JdO3ZvaWQgMD09PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5Q29sb3JzQXJyYXkoKTogY29sb3IgaXMgdW5kZWZpbmVkIixyKSxzPW5ldyBhbiksZVtpKytdPXMucixlW2krK109cy5nLGVbaSsrXT1zLmJ9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjJzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtsZXQgcz10W3JdO3ZvaWQgMD09PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yMnNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixyKSxzPW5ldyAkZSksZVtpKytdPXMueCxlW2krK109cy55fXJldHVybiB0aGlzfWNvcHlWZWN0b3Izc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgJCksZVtpKytdPXMueCxlW2krK109cy55LGVbaSsrXT1zLnp9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjRzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyPG87cisrKXtsZXQgcz10W3JdO3ZvaWQgMD09PXMmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixyKSxzPW5ldyBaaSksZVtpKytdPXMueCxlW2krK109cy55LGVbaSsrXT1zLnosZVtpKytdPXMud31yZXR1cm4gdGhpc31hcHBseU1hdHJpeDModCl7aWYoMj09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspcUQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLHFELmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZKGUscUQueCxxRC55KTtlbHNlIGlmKDM9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWRyLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxkci5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSxkci54LGRyLnksZHIueik7cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWRyLng9dGhpcy5nZXRYKGUpLGRyLnk9dGhpcy5nZXRZKGUpLGRyLno9dGhpcy5nZXRaKGUpLGRyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLGRyLngsZHIueSxkci56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylkci54PXRoaXMuZ2V0WChlKSxkci55PXRoaXMuZ2V0WShlKSxkci56PXRoaXMuZ2V0WihlKSxkci5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLGRyLngsZHIueSxkci56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZHIueD10aGlzLmdldFgoZSksZHIueT10aGlzLmdldFkoZSksZHIuej10aGlzLmdldFooZSksZHIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsZHIueCxkci55LGRyLnopO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV19c2V0WCh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfWdldFkodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfXNldFkodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV09ZSx0aGlzfWdldFoodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfXNldFoodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfWdldFcodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdfXNldFcodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfXNldFhZKHQsZSxpKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixvKXtyZXR1cm4gdGhpcy5hcnJheVswKyh0Kj10aGlzLml0ZW1TaXplKV09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzLmFycmF5W3QrM109byx0aGlzfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH07cmV0dXJuIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSx0aGlzLnVzYWdlIT09Q3gmJih0LnVzYWdlPXRoaXMudXNhZ2UpLCgwIT09dGhpcy51cGRhdGVSYW5nZS5vZmZzZXR8fC0xIT09dGhpcy51cGRhdGVSYW5nZS5jb3VudCkmJih0LnVwZGF0ZVJhbmdlPXRoaXMudXBkYXRlUmFuZ2UpLHR9fTtQci5wcm90b3R5cGUuaXNCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIE1JPWNsYXNzIGV4dGVuZHMgUHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0sd0k9Y2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fTsoY2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fSkucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgTnI9Y2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxlLGkpfX0sUFJlPTAsb2w9bmV3IHhuLE8zPW5ldyBCaSxUMD1uZXcgJCx2YT1uZXcgeGEsYXg9bmV3IHhhLElvPW5ldyAkLFVpPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlBSZSsrfSksdGhpcy51dWlkPUpsKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiB0aGlzLmluZGV4PUFycmF5LmlzQXJyYXkodCk/bmV3KFFlZSh0KT93STpNSSkodCwxKTp0LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLmF0dHJpYnV0ZXNbdF19YWRkR3JvdXAodCxlLGk9MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6aX0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247dm9pZCAwIT09ZSYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2xldCBpPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYodm9pZCAwIT09aSl7bGV0IG89KG5ldyBibykuZ2V0Tm9ybWFsTWF0cml4KHQpO2kuYXBwbHlOb3JtYWxNYXRyaXgobyksaS5uZWVkc1VwZGF0ZT0hMH1sZXQgcj10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gdm9pZCAwIT09ciYmKHIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHIubmVlZHNVcGRhdGU9ITApLG51bGwhPT10aGlzLmJvdW5kaW5nQm94JiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLG51bGwhPT10aGlzLmJvdW5kaW5nU3BoZXJlJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBvbC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChvbCksdGhpc31yb3RhdGVYKHQpe3JldHVybiBvbC5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KG9sKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIG9sLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQob2wpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gb2wubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChvbCksdGhpc310cmFuc2xhdGUodCxlLGkpe3JldHVybiBvbC5tYWtlVHJhbnNsYXRpb24odCxlLGkpLHRoaXMuYXBwbHlNYXRyaXg0KG9sKSx0aGlzfXNjYWxlKHQsZSxpKXtyZXR1cm4gb2wubWFrZVNjYWxlKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChvbCksdGhpc31sb29rQXQodCl7cmV0dXJuIE8zLmxvb2tBdCh0KSxPMy51cGRhdGVNYXRyaXgoKSx0aGlzLmFwcGx5TWF0cml4NChPMy5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoVDApLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKFQwLngsVDAueSxUMC56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgbz10W2ldO2UucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKGUsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7bnVsbD09PXRoaXMuYm91bmRpbmdCb3gmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB4YSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgJCgtMS8wLC0xLzAsLTEvMCksbmV3ICQoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspdmEuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW2ldKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhJby5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLHZhLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KElvKSxJby5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LHZhLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KElvKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCh2YS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludCh2YS5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBicCk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgJCwxLzApO2lmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKHZhLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspYXguc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW29dKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhJby5hZGRWZWN0b3JzKHZhLm1pbixheC5taW4pLHZhLmV4cGFuZEJ5UG9pbnQoSW8pLElvLmFkZFZlY3RvcnModmEubWF4LGF4Lm1heCksdmEuZXhwYW5kQnlQb2ludChJbykpOih2YS5leHBhbmRCeVBvaW50KGF4Lm1pbiksdmEuZXhwYW5kQnlQb2ludChheC5tYXgpKTt2YS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IG89MCxzPXQuY291bnQ7bzxzO28rKylJby5mcm9tQnVmZmVyQXR0cmlidXRlKHQsbykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoSW8pKTtpZihlKWZvcihsZXQgbz0wLHM9ZS5sZW5ndGg7bzxzO28rKyl7bGV0IGE9ZVtvXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsZD1hLmNvdW50O2M8ZDtjKyspSW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihUMC5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksSW8uYWRkKFQwKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoSW8pKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZihudWxsPT09dHx8dm9pZCAwPT09ZS5wb3NpdGlvbnx8dm9pZCAwPT09ZS5ub3JtYWx8fHZvaWQgMD09PWUudXYpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7bGV0IGk9dC5hcnJheSxyPWUucG9zaXRpb24uYXJyYXksbz1lLm5vcm1hbC5hcnJheSxzPWUudXYuYXJyYXksYT1yLmxlbmd0aC8zO3ZvaWQgMD09PWUudGFuZ2VudCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBQcihuZXcgRmxvYXQzMkFycmF5KDQqYSksNCkpO2xldCBsPWUudGFuZ2VudC5hcnJheSxjPVtdLGQ9W107Zm9yKGxldCBEZT0wO0RlPGE7RGUrKyljW0RlXT1uZXcgJCxkW0RlXT1uZXcgJDtsZXQgdT1uZXcgJCxwPW5ldyAkLGY9bmV3ICQsbT1uZXcgJGUsYj1uZXcgJGUsTT1uZXcgJGUseT1uZXcgJCx4PW5ldyAkO2Z1bmN0aW9uIFIoRGUsRCxyZSl7dS5mcm9tQXJyYXkociwzKkRlKSxwLmZyb21BcnJheShyLDMqRCksZi5mcm9tQXJyYXkociwzKnJlKSxtLmZyb21BcnJheShzLDIqRGUpLGIuZnJvbUFycmF5KHMsMipEKSxNLmZyb21BcnJheShzLDIqcmUpLHAuc3ViKHUpLGYuc3ViKHUpLGIuc3ViKG0pLE0uc3ViKG0pO2xldCBjZT0xLyhiLngqTS55LU0ueCpiLnkpOyFpc0Zpbml0ZShjZSl8fCh5LmNvcHkocCkubXVsdGlwbHlTY2FsYXIoTS55KS5hZGRTY2FsZWRWZWN0b3IoZiwtYi55KS5tdWx0aXBseVNjYWxhcihjZSkseC5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKGIueCkuYWRkU2NhbGVkVmVjdG9yKHAsLU0ueCkubXVsdGlwbHlTY2FsYXIoY2UpLGNbRGVdLmFkZCh5KSxjW0RdLmFkZCh5KSxjW3JlXS5hZGQoeSksZFtEZV0uYWRkKHgpLGRbRF0uYWRkKHgpLGRbcmVdLmFkZCh4KSl9bGV0IEE9dGhpcy5ncm91cHM7MD09PUEubGVuZ3RoJiYoQT1be3N0YXJ0OjAsY291bnQ6aS5sZW5ndGh9XSk7Zm9yKGxldCBEZT0wLEQ9QS5sZW5ndGg7RGU8RDsrK0RlKXtsZXQgcmU9QVtEZV0sY2U9cmUuc3RhcnQ7Zm9yKGxldCBiZT1jZSxuZT1jZStyZS5jb3VudDtiZTxuZTtiZSs9MylSKGlbYmUrMF0saVtiZSsxXSxpW2JlKzJdKX1sZXQgVj1uZXcgJCx0ZT1uZXcgJCxLPW5ldyAkLHhlPW5ldyAkO2Z1bmN0aW9uIFhlKERlKXtLLmZyb21BcnJheShvLDMqRGUpLHhlLmNvcHkoSyk7bGV0IEQ9Y1tEZV07Vi5jb3B5KEQpLFYuc3ViKEsubXVsdGlwbHlTY2FsYXIoSy5kb3QoRCkpKS5ub3JtYWxpemUoKSx0ZS5jcm9zc1ZlY3RvcnMoeGUsRCk7bGV0IGNlPXRlLmRvdChkW0RlXSk8MD8tMToxO2xbNCpEZV09Vi54LGxbNCpEZSsxXT1WLnksbFs0KkRlKzJdPVYueixsWzQqRGUrM109Y2V9Zm9yKGxldCBEZT0wLEQ9QS5sZW5ndGg7RGU8RDsrK0RlKXtsZXQgcmU9QVtEZV0sY2U9cmUuc3RhcnQ7Zm9yKGxldCBiZT1jZSxuZT1jZStyZS5jb3VudDtiZTxuZTtiZSs9MylYZShpW2JlKzBdKSxYZShpW2JlKzFdKSxYZShpW2JlKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgUHIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsZj1pLmNvdW50O3A8ZjtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3ICQsbz1uZXcgJCxzPW5ldyAkLGE9bmV3ICQsbD1uZXcgJCxjPW5ldyAkLGQ9bmV3ICQsdT1uZXcgJDtpZih0KWZvcihsZXQgcD0wLGY9dC5jb3VudDtwPGY7cCs9Myl7bGV0IG09dC5nZXRYKHArMCksYj10LmdldFgocCsxKSxNPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGIpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLE0pLGQuc3ViVmVjdG9ycyhzLG8pLHUuc3ViVmVjdG9ycyhyLG8pLGQuY3Jvc3ModSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksYiksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksTSksYS5hZGQoZCksbC5hZGQoZCksYy5hZGQoZCksaS5zZXRYWVoobSxhLngsYS55LGEueiksaS5zZXRYWVooYixsLngsbC55LGwueiksaS5zZXRYWVooTSxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxmPWUuY291bnQ7cDxmO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksZC5zdWJWZWN0b3JzKHMsbyksdS5zdWJWZWN0b3JzKHIsbyksZC5jcm9zcyh1KSxpLnNldFhZWihwKzAsZC54LGQueSxkLnopLGkuc2V0WFlaKHArMSxkLngsZC55LGQueiksaS5zZXRYWVoocCsyLGQueCxkLnksZC56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IHM9aVtyXS5hcnJheSxhPXQuYXR0cmlidXRlc1tyXSxsPWEuYXJyYXksYz1hLml0ZW1TaXplKmUsZD1NYXRoLm1pbihsLmxlbmd0aCxzLmxlbmd0aC1jKTtmb3IobGV0IHU9MCxwPWM7dTxkO3UrKyxwKyspc1twXT1sW3VdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKUlvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxJby5ub3JtYWxpemUoKSx0LnNldFhZWihlLElvLngsSW8ueSxJby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsbCl7bGV0IGM9YS5hcnJheSxkPWEuaXRlbVNpemUsdT1hLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCpkKSxmPTAsbT0wO2ZvcihsZXQgYj0wLE09bC5sZW5ndGg7YjxNO2IrKyl7Zj1hLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFtiXSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0OmxbYl0qZDtmb3IobGV0IHk9MDt5PGQ7eSsrKXBbbSsrXT1jW2YrK119cmV0dXJuIG5ldyBQcihwLGQsdSl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgVWksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgYz10KHJbYV0saSk7ZS5zZXRBdHRyaWJ1dGUoYSxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGEgaW4gbyl7bGV0IGw9W10sYz1vW2FdO2ZvcihsZXQgZD0wLHU9Yy5sZW5ndGg7ZDx1O2QrKyl7bGV0IGY9dChjW2RdLGkpO2wucHVzaChmKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgcz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2E8bDthKyspe2xldCBjPXNbYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSxkPVtdO2ZvcihsZXQgdT0wLHA9Yy5sZW5ndGg7dTxwO3UrKylkLnB1c2goY1t1XS50b0pTT04odC5kYXRhKSk7ZC5sZW5ndGg+MCYmKHJbbF09ZCxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgcz10aGlzLmdyb3VwcztzLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWEmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCBkPVtdLHU9b1tjXTtmb3IobGV0IHA9MCxmPXUubGVuZ3RoO3A8ZjtwKyspZC5wdXNoKHVbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPWR9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLGQ9cy5sZW5ndGg7YzxkO2MrKyl7bGV0IHU9c1tjXTt0aGlzLmFkZEdyb3VwKHUuc3RhcnQsdS5jb3VudCx1Lm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7bnVsbCE9PWEmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O1VpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBRJD1uZXcgeG4sRDA9bmV3IHZwLGszPW5ldyBicCxscD1uZXcgJCxjcD1uZXcgJCxkcD1uZXcgJCxGMz1uZXcgJCxOMz1uZXcgJCxMMz1uZXcgJCxZRD1uZXcgJCxYRD1uZXcgJCxRRD1uZXcgJCxaRD1uZXcgJGUsS0Q9bmV3ICRlLEpEPW5ldyAkZSxCMz1uZXcgJCwkRD1uZXcgJCxhbz1jbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQ9bmV3IFVpLGU9bmV3IHBtKXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaCIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdm9pZCAwIT09dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sdC5tb3JwaFRhcmdldERpY3Rpb25hcnkpKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19cmF5Y2FzdCh0LGUpe2xldCBzLGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0ZXJpYWwsbz10aGlzLm1hdHJpeFdvcmxkO2lmKHZvaWQgMCE9PXImJihudWxsPT09aS5ib3VuZGluZ1NwaGVyZSYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxrMy5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLGszLmFwcGx5TWF0cml4NChvKSwhMSE9PXQucmF5LmludGVyc2VjdHNTcGhlcmUoazMpKSYmKFEkLmNvcHkobykuaW52ZXJ0KCksRDAuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KFEkKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1EMC5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixkPWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsdT1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGY9aS5ncm91cHMsbT1pLmRyYXdSYW5nZTtpZihudWxsIT09YSlpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgYj0wLE09Zi5sZW5ndGg7YjxNO2IrKyl7bGV0IHk9ZltiXSx4PXJbeS5tYXRlcmlhbEluZGV4XTtmb3IobGV0IFY9TWF0aC5tYXgoeS5zdGFydCxtLnN0YXJ0KSx0ZT1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKHkuc3RhcnQreS5jb3VudCxtLnN0YXJ0K20uY291bnQpKTtWPHRlO1YrPTMpe2xldCBLPWEuZ2V0WChWKSx4ZT1hLmdldFgoVisxKSxYZT1hLmdldFgoVisyKTtzPWVJKHRoaXMseCx0LEQwLGwsYyxkLHUscCxLLHhlLFhlKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihWLzMpLHMuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxlLnB1c2gocykpfX1lbHNlIGZvcihsZXQgeT1NYXRoLm1heCgwLG0uc3RhcnQpLHg9TWF0aC5taW4oYS5jb3VudCxtLnN0YXJ0K20uY291bnQpO3k8eDt5Kz0zKXtsZXQgUj1hLmdldFgoeSksQT1hLmdldFgoeSsxKSxWPWEuZ2V0WCh5KzIpO3M9ZUkodGhpcyxyLHQsRDAsbCxjLGQsdSxwLFIsQSxWKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLGUucHVzaChzKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBiPTAsTT1mLmxlbmd0aDtiPE07YisrKXtsZXQgeT1mW2JdLHg9clt5Lm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgVj1NYXRoLm1heCh5LnN0YXJ0LG0uc3RhcnQpLHRlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LG0uc3RhcnQrbS5jb3VudCkpO1Y8dGU7Vis9MylzPWVJKHRoaXMseCx0LEQwLGwsYyxkLHUscCxWLFYrMSxWKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKFYvMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9eS5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IHk9TWF0aC5tYXgoMCxtLnN0YXJ0KSx4PU1hdGgubWluKGwuY291bnQsbS5zdGFydCttLmNvdW50KTt5PHg7eSs9MylzPWVJKHRoaXMscix0LEQwLGwsYyxkLHUscCx5LHkrMSx5KzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKHkvMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIGVJKG4sdCxlLGkscixvLHMsYSxsLGMsZCx1KXtscC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksY3AuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGQpLGRwLmZyb21CdWZmZXJBdHRyaWJ1dGUocix1KTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXtZRC5zZXQoMCwwLDApLFhELnNldCgwLDAsMCksUUQuc2V0KDAsMCwwKTtmb3IobGV0IG09MCxiPW8ubGVuZ3RoO208YjttKyspe2xldCBNPXBbbV0seT1vW21dOzAhPT1NJiYoRjMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLE4zLmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxkKSxMMy5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSkscz8oWUQuYWRkU2NhbGVkVmVjdG9yKEYzLE0pLFhELmFkZFNjYWxlZFZlY3RvcihOMyxNKSxRRC5hZGRTY2FsZWRWZWN0b3IoTDMsTSkpOihZRC5hZGRTY2FsZWRWZWN0b3IoRjMuc3ViKGxwKSxNKSxYRC5hZGRTY2FsZWRWZWN0b3IoTjMuc3ViKGNwKSxNKSxRRC5hZGRTY2FsZWRWZWN0b3IoTDMuc3ViKGRwKSxNKSkpfWxwLmFkZChZRCksY3AuYWRkKFhEKSxkcC5hZGQoUUQpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLGxwKSxuLmJvbmVUcmFuc2Zvcm0oZCxjcCksbi5ib25lVHJhbnNmb3JtKHUsZHApKTtsZXQgZj1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9dC5zaWRlPT09Z28/aS5pbnRlcnNlY3RUcmlhbmdsZShzLG8sciwhMCxhKTppLmludGVyc2VjdFRyaWFuZ2xlKHIsbyxzLHQuc2lkZSE9PXEwLGEpLG51bGw9PT1sKXJldHVybiBudWxsOyRELmNvcHkoYSksJEQuYXBwbHlNYXRyaXg0KG4ubWF0cml4V29ybGQpO2xldCBjPWUucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKCREKTtyZXR1cm4gYzxlLm5lYXJ8fGM+ZS5mYXI/bnVsbDp7ZGlzdGFuY2U6Yyxwb2ludDokRC5jbG9uZSgpLG9iamVjdDpufX0obix0LGUsaSxscCxjcCxkcCxCMyk7aWYoZil7YSYmKFpELmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxLRC5mcm9tQnVmZmVyQXR0cmlidXRlKGEsZCksSkQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLGYudXY9VnIuZ2V0VVYoQjMsbHAsY3AsZHAsWkQsS0QsSkQsbmV3ICRlKSksbCYmKFpELmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxLRC5mcm9tQnVmZmVyQXR0cmlidXRlKGwsZCksSkQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLGYudXYyPVZyLmdldFVWKEIzLGxwLGNwLGRwLFpELEtELEpELG5ldyAkZSkpO2xldCBtPXthOmMsYjpkLGM6dSxub3JtYWw6bmV3ICQsbWF0ZXJpYWxJbmRleDowfTtWci5nZXROb3JtYWwobHAsY3AsZHAsbS5ub3JtYWwpLGYuZmFjZT1tfXJldHVybiBmfWFvLnByb3RvdHlwZS5pc01lc2g9ITA7dmFyIGZtPWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xLG89MSxzPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOmksd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czpzfTtsZXQgYT10aGlzO3I9TWF0aC5mbG9vcihyKSxvPU1hdGguZmxvb3Iobykscz1NYXRoLmZsb29yKHMpO2xldCBsPVtdLGM9W10sZD1bXSx1PVtdLHA9MCxmPTA7ZnVuY3Rpb24gbShiLE0seSx4LFIsQSxWLHRlLEsseGUsWGUpe2xldCBEZT1BL0ssRD1WL3hlLHJlPUEvMixjZT1WLzIsZmU9dGUvMixiZT1LKzEsbmU9eGUrMSxkZT0wLHBlPTAsamU9bmV3ICQ7Zm9yKGxldCBDZT0wO0NlPG5lO0NlKyspe2xldCBOZT1DZSpELWNlO2ZvcihsZXQgbHQ9MDtsdDxiZTtsdCsrKWplW2JdPShsdCpEZS1yZSkqeCxqZVtNXT1OZSpSLGplW3ldPWZlLGMucHVzaChqZS54LGplLnksamUueiksamVbYl09MCxqZVtNXT0wLGplW3ldPXRlPjA/MTotMSxkLnB1c2goamUueCxqZS55LGplLnopLHUucHVzaChsdC9LKSx1LnB1c2goMS1DZS94ZSksZGUrPTF9Zm9yKGxldCBDZT0wO0NlPHhlO0NlKyspZm9yKGxldCBOZT0wO05lPEs7TmUrKyl7bGV0IE10PXArTmUrYmUqKENlKzEpLHB0PXArKE5lKzEpK2JlKihDZSsxKSxPZT1wKyhOZSsxKStiZSpDZTtsLnB1c2gocCtOZStiZSpDZSxNdCxPZSksbC5wdXNoKE10LHB0LE9lKSxwZSs9Nn1hLmFkZEdyb3VwKGYscGUsWGUpLGYrPXBlLHArPWRlfW0oInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQscyxvLDApLG0oInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQscyxvLDEpLG0oIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIscywyKSxtKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIscywzKSxtKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixvLDQpLG0oIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIsbyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBOcihkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBOcih1LDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBmbSh0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5kZXB0aFNlZ21lbnRzKX19O2Z1bmN0aW9uIFgwKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKXt0W2VdPXt9O2ZvcihsZXQgaSBpbiBuW2VdKXtsZXQgcj1uW2VdW2ldO3RbZV1baV09ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3IuY2xvbmUoKTpBcnJheS5pc0FycmF5KHIpP3Iuc2xpY2UoKTpyfX1yZXR1cm4gdH1mdW5jdGlvbiBKbyhuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9WDAobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBrUmU9e2Nsb25lOlgwLG1lcmdlOkpvfSxHZD1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCIsdGhpcy5kZWZpbmVzPXt9LHRoaXMudW5pZm9ybXM9e30sdGhpcy52ZXJ0ZXhTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsdGhpcy5mcmFnbWVudFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTtcbn0iLHRoaXMubGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmxpZ2h0cz0hMSx0aGlzLmNsaXBwaW5nPSExLHRoaXMuZXh0ZW5zaW9ucz17ZGVyaXZhdGl2ZXM6ITEsZnJhZ0RlcHRoOiExLGRyYXdCdWZmZXJzOiExLHNoYWRlclRleHR1cmVMT0Q6ITF9LHRoaXMuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcz17Y29sb3I6WzEsMSwxXSx1djpbMCwwXSx1djI6WzAsMF19LHRoaXMuaW5kZXgwQXR0cmlidXRlTmFtZT12b2lkIDAsdGhpcy51bmlmb3Jtc05lZWRVcGRhdGU9ITEsdGhpcy5nbHNsVmVyc2lvbj1udWxsLHZvaWQgMCE9PXQmJih2b2lkIDAhPT10LmF0dHJpYnV0ZXMmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlNoYWRlck1hdGVyaWFsOiBhdHRyaWJ1dGVzIHNob3VsZCBub3cgYmUgZGVmaW5lZCBpbiBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpLHRoaXMuc2V0VmFsdWVzKHQpKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZnJhZ21lbnRTaGFkZXI9dC5mcmFnbWVudFNoYWRlcix0aGlzLnZlcnRleFNoYWRlcj10LnZlcnRleFNoYWRlcix0aGlzLnVuaWZvcm1zPVgwKHQudW5pZm9ybXMpLHRoaXMuZGVmaW5lcz1PYmplY3QuYXNzaWduKHt9LHQuZGVmaW5lcyksdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5saWdodHM9dC5saWdodHMsdGhpcy5jbGlwcGluZz10LmNsaXBwaW5nLHRoaXMuZXh0ZW5zaW9ucz1PYmplY3QuYXNzaWduKHt9LHQuZXh0ZW5zaW9ucyksdGhpcy5nbHNsVmVyc2lvbj10Lmdsc2xWZXJzaW9uLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtlLmdsc2xWZXJzaW9uPXRoaXMuZ2xzbFZlcnNpb24sZS51bmlmb3Jtcz17fTtmb3IobGV0IHIgaW4gdGhpcy51bmlmb3Jtcyl7bGV0IHM9dGhpcy51bmlmb3Jtc1tyXS52YWx1ZTtlLnVuaWZvcm1zW3JdPXMmJnMuaXNUZXh0dXJlP3t0eXBlOiJ0Iix2YWx1ZTpzLnRvSlNPTih0KS51dWlkfTpzJiZzLmlzQ29sb3I/e3R5cGU6ImMiLHZhbHVlOnMuZ2V0SGV4KCl9OnMmJnMuaXNWZWN0b3IyP3t0eXBlOiJ2MiIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNWZWN0b3IzP3t0eXBlOiJ2MyIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNWZWN0b3I0P3t0eXBlOiJ2NCIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNNYXRyaXgzP3t0eXBlOiJtMyIsdmFsdWU6cy50b0FycmF5KCl9OnMmJnMuaXNNYXRyaXg0P3t0eXBlOiJtNCIsdmFsdWU6cy50b0FycmF5KCl9Ont2YWx1ZTpzfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBpPXt9O2ZvcihsZXQgciBpbiB0aGlzLmV4dGVuc2lvbnMpITA9PT10aGlzLmV4dGVuc2lvbnNbcl0mJihpW3JdPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJihlLmV4dGVuc2lvbnM9aSksZX19O0dkLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBTeD1jbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IHhuLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgeG4sdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgeG59Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtTeC5wcm90b3R5cGUuaXNDYW1lcmE9ITA7dmFyIGVzPWNsYXNzIGV4dGVuZHMgU3h7Y29uc3RydWN0b3IodD01MCxlPTEsaT0uMSxyPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9IlBlcnNwZWN0aXZlQ2FtZXJhIix0aGlzLmZvdj10LHRoaXMuem9vbT0xLHRoaXMubmVhcj1pLHRoaXMuZmFyPXIsdGhpcy5mb2N1cz0xMCx0aGlzLmFzcGVjdD1lLHRoaXMudmlldz1udWxsLHRoaXMuZmlsbUdhdWdlPTM1LHRoaXMuZmlsbU9mZnNldD0wLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMuZm92PXQuZm92LHRoaXMuem9vbT10Lnpvb20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLmZvY3VzPXQuZm9jdXMsdGhpcy5hc3BlY3Q9dC5hc3BlY3QsdGhpcy52aWV3PW51bGw9PT10LnZpZXc/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpcy5maWxtR2F1Z2U9dC5maWxtR2F1Z2UsdGhpcy5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCx0aGlzfXNldEZvY2FsTGVuZ3RoKHQpe2xldCBlPS41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3Q7dGhpcy5mb3Y9MipuQipNYXRoLmF0YW4oZSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Z2V0Rm9jYWxMZW5ndGgoKXtsZXQgdD1NYXRoLnRhbiguNSpfMyp0aGlzLmZvdik7cmV0dXJuLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gMipuQipNYXRoLmF0YW4oTWF0aC50YW4oLjUqXzMqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7dGhpcy5hc3BlY3Q9dC9lLG51bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbiguNSpfMyp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxvPS0uNSpyLHM9dGhpcy52aWV3O2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1zLmZ1bGxXaWR0aCxjPXMuZnVsbEhlaWdodDtvKz1zLm9mZnNldFgqci9sLGUtPXMub2Zmc2V0WSppL2Mscio9cy53aWR0aC9sLGkqPXMuaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0OzAhPT1hJiYobys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUobyxvK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCxudWxsIT09dGhpcy52aWV3JiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07ZXMucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIEV4PWNsYXNzIGV4dGVuZHMgQml7Y29uc3RydWN0b3IodCxlLGkpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJDdWJlQ2FtZXJhIiwhMCE9PWkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7dGhpcy5yZW5kZXJUYXJnZXQ9aTtsZXQgcj1uZXcgZXMoOTAsMSx0LGUpO3IubGF5ZXJzPXRoaXMubGF5ZXJzLHIudXAuc2V0KDAsLTEsMCksci5sb29rQXQobmV3ICQoMSwwLDApKSx0aGlzLmFkZChyKTtsZXQgbz1uZXcgZXMoOTAsMSx0LGUpO28ubGF5ZXJzPXRoaXMubGF5ZXJzLG8udXAuc2V0KDAsLTEsMCksby5sb29rQXQobmV3ICQoLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IHM9bmV3IGVzKDkwLDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsMSkscy5sb29rQXQobmV3ICQoMCwxLDApKSx0aGlzLmFkZChzKTtsZXQgYT1uZXcgZXMoOTAsMSx0LGUpO2EubGF5ZXJzPXRoaXMubGF5ZXJzLGEudXAuc2V0KDAsMCwtMSksYS5sb29rQXQobmV3ICQoMCwtMSwwKSksdGhpcy5hZGQoYSk7bGV0IGw9bmV3IGVzKDkwLDEsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyAkKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IGVzKDkwLDEsdCxlKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyAkKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LGUpe251bGw9PT10aGlzLnBhcmVudCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBpPXRoaXMucmVuZGVyVGFyZ2V0LFtyLG8scyxhLGwsY109dGhpcy5jaGlsZHJlbixkPXQueHIuZW5hYmxlZCx1PXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBwPWkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChpLDApLHQucmVuZGVyKGUsciksdC5zZXRSZW5kZXJUYXJnZXQoaSwxKSx0LnJlbmRlcihlLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KGksMiksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDMpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQoaSw0KSx0LnJlbmRlcihlLGwpLGkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9cCx0LnNldFJlbmRlclRhcmdldChpLDUpLHQucmVuZGVyKGUsYyksdC5zZXRSZW5kZXJUYXJnZXQodSksdC54ci5lbmFibGVkPWQsaS50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxRMD1jbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLGQpe3N1cGVyKHQ9dm9pZCAwIT09dD90OltdLGU9dm9pZCAwIT09ZT9lOld4LGkscixvLHMsYSxsLGMsZCksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fTtRMC5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDt2YXIgU0k9Y2xhc3MgZXh0ZW5kcyBKc3tjb25zdHJ1Y3Rvcih0LGUsaSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1pKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyBRMCh2b2lkIDAsKGU9ZXx8e30pLm1hcHBpbmcsZS53cmFwUyxlLndyYXBULGUubWFnRmlsdGVyLGUubWluRmlsdGVyLGUuZm9ybWF0LGUudHlwZSxlLmFuaXNvdHJvcHksZS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWUuZ2VuZXJhdGVNaXBtYXBzJiZlLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWUubWluRmlsdGVyP2UubWluRmlsdGVyOiRvfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9Z3MsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGlfdW5pZm9ybXM9e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LGlfdmVydGV4U2hhZGVyPSJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsaV9mcmFnbWVudFNoYWRlcj0iXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHI9bmV3IGZtKDUsNSw1KSxvPW5ldyBHZCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6WDAoaV91bmlmb3JtcyksdmVydGV4U2hhZGVyOmlfdmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmlfZnJhZ21lbnRTaGFkZXIsc2lkZTpnbyxibGVuZGluZzpwcH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IHM9bmV3IGFvKHIsbyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1RSSYmKGUubWluRmlsdGVyPSRvKSxuZXcgRXgoMSwxMCx0aGlzKS51cGRhdGUodCxzKSxlLm1pbkZpbHRlcj1hLHMuZ2VvbWV0cnkuZGlzcG9zZSgpLHMubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHM9MDtzPDY7cysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMscyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtTSS5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIFYzPW5ldyAkLExSZT1uZXcgJCxCUmU9bmV3IGJvLEtsPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9VjMuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKExSZS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoVjMpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKDA9PT1yKXJldHVybiAwPT09dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCk/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gbzwwfHxvPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8QlJlLmdldE5vcm1hbE1hdHJpeCh0KSxyPXRoaXMuY29wbGFuYXJQb2ludChWMykuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1yLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O0tsLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBSMD1uZXcgYnAsdEk9bmV3ICQsWjA9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgS2wsZT1uZXcgS2wsaT1uZXcgS2wscj1uZXcgS2wsbz1uZXcgS2wscz1uZXcgS2wpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sZD1pWzZdLHU9aVs3XSxwPWlbOF0sZj1pWzldLG09aVsxMF0sYj1pWzExXSxNPWlbMTJdLHk9aVsxM10seD1pWzE0XSxSPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLHUtbCxiLXAsUi1NKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLHUrbCxiK3AsUitNKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLHUrYyxiK2YsUit5KS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLHUtYyxiLWYsUi15KS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLHUtZCxiLW0sUi14KS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLHUrZCxiK20sUit4KS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksUjAuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFIwKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBSMC5jZW50ZXIuc2V0KDAsMCwwKSxSMC5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsUjAuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShSMCl9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYodEkueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHRJLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx0SS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQodEkpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBaZWUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIFZSZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IGQ9aS5nZXQoYyk7ZCYmKG4uZGVsZXRlQnVmZmVyKGQuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLGQpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgdT1pLmdldChjKTt2b2lkIDA9PT11P2kuc2V0KGMsZnVuY3Rpb24oYyxkKXtsZXQgdT1jLmFycmF5LHA9Yy51c2FnZSxmPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKGQsZiksbi5idWZmZXJEYXRhKGQsdSxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgbT01MTI2O3JldHVybiB1IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P209NTEyNjp1IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTp1IGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9tPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOm09NTEyMzp1IGluc3RhbmNlb2YgSW50MTZBcnJheT9tPTUxMjI6dSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P209NTEyNTp1IGluc3RhbmNlb2YgSW50MzJBcnJheT9tPTUxMjQ6dSBpbnN0YW5jZW9mIEludDhBcnJheT9tPTUxMjA6KHUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx1IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYobT01MTIxKSx7YnVmZmVyOmYsdHlwZTptLGJ5dGVzUGVyRWxlbWVudDp1LkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyxkKSk6dS52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsZCx1KXtsZXQgcD1kLmFycmF5LGY9ZC51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIodSxjKSwtMT09PWYuY291bnQ/bi5idWZmZXJTdWJEYXRhKHUsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEodSxmLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsZi5vZmZzZXQsZi5jb3VudCk6bi5idWZmZXJTdWJEYXRhKHUsZi5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGYub2Zmc2V0LGYub2Zmc2V0K2YuY291bnQpKSxmLmNvdW50PS0xKX0odS5idWZmZXIsYyxkKSx1LnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBUeD1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsZD1sKzEsdT10L2EscD1lL2wsZj1bXSxtPVtdLGI9W10sTT1bXTtmb3IobGV0IHk9MDt5PGQ7eSsrKXtsZXQgeD15KnAtcztmb3IobGV0IFI9MDtSPGM7UisrKW0ucHVzaChSKnUtbywteCwwKSxiLnB1c2goMCwwLDEpLE0ucHVzaChSL2EpLE0ucHVzaCgxLXkvbCl9Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PGE7eCsrKXtsZXQgQT14K2MqKHkrMSksVj14KzErYyooeSsxKSx0ZT14KzErYyp5O2YucHVzaCh4K2MqeSxBLHRlKSxmLnB1c2goQSxWLHRlKX10aGlzLnNldEluZGV4KGYpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IE5yKG0sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBOcihiLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBOcihNLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBUeCh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LGJpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sSXQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGJvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBib30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3ICRlKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGJvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyAkZSguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgYm99fX0scWM9e2Jhc2ljOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LnNwZWN1bGFybWFwLEl0LmVudm1hcCxJdC5hb21hcCxJdC5saWdodG1hcCxJdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuc3BlY3VsYXJtYXAsSXQuZW52bWFwLEl0LmFvbWFwLEl0LmxpZ2h0bWFwLEl0LmVtaXNzaXZlbWFwLEl0LmZvZyxJdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LnNwZWN1bGFybWFwLEl0LmVudm1hcCxJdC5hb21hcCxJdC5saWdodG1hcCxJdC5lbWlzc2l2ZW1hcCxJdC5idW1wbWFwLEl0Lm5vcm1hbG1hcCxJdC5kaXNwbGFjZW1lbnRtYXAsSXQuZm9nLEl0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBhbigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6Sm8oW0l0LmNvbW1vbixJdC5lbnZtYXAsSXQuYW9tYXAsSXQubGlnaHRtYXAsSXQuZW1pc3NpdmVtYXAsSXQuYnVtcG1hcCxJdC5ub3JtYWxtYXAsSXQuZGlzcGxhY2VtZW50bWFwLEl0LnJvdWdobmVzc21hcCxJdC5tZXRhbG5lc3NtYXAsSXQuZm9nLEl0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LmFvbWFwLEl0LmxpZ2h0bWFwLEl0LmVtaXNzaXZlbWFwLEl0LmJ1bXBtYXAsSXQubm9ybWFsbWFwLEl0LmRpc3BsYWNlbWVudG1hcCxJdC5ncmFkaWVudG1hcCxJdC5mb2csSXQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuYnVtcG1hcCxJdC5ub3JtYWxtYXAsSXQuZGlzcGxhY2VtZW50bWFwLEl0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpKbyhbSXQucG9pbnRzLEl0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpKbyhbSXQuY29tbW9uLEl0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpiaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6Sm8oW0l0LmNvbW1vbixJdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6YmkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuYnVtcG1hcCxJdC5ub3JtYWxtYXAsSXQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpKbyhbSXQuc3ByaXRlLEl0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgYm99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpiaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpKbyhbSXQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YmkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOkpvKFtJdC5jb21tb24sSXQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3ICR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOkpvKFtJdC5saWdodHMsSXQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IGFuKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6Ymkuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6Ymkuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiBwa2Uobix0LGUsaSxyLG8pe2xldCBsLGMscz1uZXcgYW4oMCksYT0hMD09PXI/MDoxLGQ9bnVsbCx1PTAscD1udWxsO2Z1bmN0aW9uIG0oYixNKXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoYi5yLGIuZyxiLmIsTSxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGIsTT0xKXtzLnNldChiKSxhPU0sbShzLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oYil7YT1iLG0ocyxhKX0scmVuZGVyOmZ1bmN0aW9uKGIsTSl7bGV0IHk9ITEseD0hMD09PU0uaXNTY2VuZT9NLmJhY2tncm91bmQ6bnVsbDt4JiZ4LmlzVGV4dHVyZSYmKHg9dC5nZXQoeCkpO2xldCBSPW4ueHIsQT1SLmdldFNlc3Npb24mJlIuZ2V0U2Vzc2lvbigpO0EmJiJhZGRpdGl2ZSI9PT1BLmVudmlyb25tZW50QmxlbmRNb2RlJiYoeD1udWxsKSxudWxsPT09eD9tKHMsYSk6eCYmeC5pc0NvbG9yJiYobSh4LDEpLHk9ITApLChuLmF1dG9DbGVhcnx8eSkmJm4uY2xlYXIobi5hdXRvQ2xlYXJDb2xvcixuLmF1dG9DbGVhckRlcHRoLG4uYXV0b0NsZWFyU3RlbmNpbCkseCYmKHguaXNDdWJlVGV4dHVyZXx8eC5tYXBwaW5nPT09WEkpPyh2b2lkIDA9PT1jJiYoYz1uZXcgYW8obmV3IGZtKDEsMSwxKSxuZXcgR2Qoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOlgwKHFjLmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpxYy5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpxYy5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6Z28sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKFYsdGUsSyl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oSy5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXgsYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXguaXNDdWJlVGV4dHVyZSYmITE9PT14LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLChkIT09eHx8dSE9PXgudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCxkPXgsdT14LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxiLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTp4JiZ4LmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyBhbyhuZXcgVHgoMiwyKSxuZXcgR2Qoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6WDAocWMuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOnFjLmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOnFjLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTp5eCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksbC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksaS51cGRhdGUobCkpLGwubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPXgsITA9PT14Lm1hdHJpeEF1dG9VcGRhdGUmJngudXBkYXRlTWF0cml4KCksbC5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHgubWF0cml4KSwoZCE9PXh8fHUhPT14LnZlcnNpb258fHAhPT1uLnRvbmVNYXBwaW5nKSYmKGwubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsZD14LHU9eC52ZXJzaW9uLHA9bi50b25lTWFwcGluZyksYi51bnNoaWZ0KGwsbC5nZW9tZXRyeSxsLm1hdGVyaWFsLDAsMCxudWxsKSl9fX1mdW5jdGlvbiBma2Uobix0LGUsaSl7bGV0IHI9bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG89aS5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHM9aS5pc1dlYkdMMnx8bnVsbCE9PW8sYT17fSxsPWIobnVsbCksYz1sO2Z1bmN0aW9uIHAoY2Upe3JldHVybiBpLmlzV2ViR0wyP24uYmluZFZlcnRleEFycmF5KGNlKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhjZSl9ZnVuY3Rpb24gZihjZSl7cmV0dXJuIGkuaXNXZWJHTDI/bi5kZWxldGVWZXJ0ZXhBcnJheShjZSk6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhjZSl9ZnVuY3Rpb24gYihjZSl7bGV0IGZlPVtdLGJlPVtdLG5lPVtdO2ZvcihsZXQgZGU9MDtkZTxyO2RlKyspZmVbZGVdPTAsYmVbZGVdPTAsbmVbZGVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmZlLGVuYWJsZWRBdHRyaWJ1dGVzOmJlLGF0dHJpYnV0ZURpdmlzb3JzOm5lLG9iamVjdDpjZSxhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIHgoKXtsZXQgY2U9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgZmU9MCxiZT1jZS5sZW5ndGg7ZmU8YmU7ZmUrKyljZVtmZV09MH1mdW5jdGlvbiBSKGNlKXtBKGNlLDApfWZ1bmN0aW9uIEEoY2UsZmUpe2xldCBuZT1jLmVuYWJsZWRBdHRyaWJ1dGVzLGRlPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW2NlXT0xLDA9PT1uZVtjZV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNlKSxuZVtjZV09MSksZGVbY2VdIT09ZmUmJigoaS5pc1dlYkdMMj9uOnQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpW2kuaXNXZWJHTDI/InZlcnRleEF0dHJpYkRpdmlzb3IiOiJ2ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUiXShjZSxmZSksZGVbY2VdPWZlKX1mdW5jdGlvbiBWKCl7bGV0IGNlPWMubmV3QXR0cmlidXRlcyxmZT1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgYmU9MCxuZT1mZS5sZW5ndGg7YmU8bmU7YmUrKylmZVtiZV0hPT1jZVtiZV0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShiZSksZmVbYmVdPTApfWZ1bmN0aW9uIHRlKGNlLGZlLGJlLG5lLGRlLHBlKXshMCE9PWkuaXNXZWJHTDJ8fDUxMjQhPT1iZSYmNTEyNSE9PWJlP24udmVydGV4QXR0cmliUG9pbnRlcihjZSxmZSxiZSxuZSxkZSxwZSk6bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihjZSxmZSxiZSxkZSxwZSl9ZnVuY3Rpb24gRCgpe3JlKCksYyE9PWwmJihjPWwscChjLm9iamVjdCkpfWZ1bmN0aW9uIHJlKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDpmdW5jdGlvbihjZSxmZSxiZSxuZSxkZSl7bGV0IHBlPSExO2lmKHMpe2xldCBqZT1mdW5jdGlvbihjZSxmZSxiZSl7bGV0IG5lPSEwPT09YmUud2lyZWZyYW1lLGRlPWFbY2UuaWRdO3ZvaWQgMD09PWRlJiYoZGU9e30sYVtjZS5pZF09ZGUpO2xldCBwZT1kZVtmZS5pZF07dm9pZCAwPT09cGUmJihwZT17fSxkZVtmZS5pZF09cGUpO2xldCBqZT1wZVtuZV07cmV0dXJuIHZvaWQgMD09PWplJiYoamU9YihpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpLHBlW25lXT1qZSksamV9KG5lLGJlLGZlKTtjIT09amUmJihjPWplLHAoYy5vYmplY3QpKSxwZT1mdW5jdGlvbihjZSxmZSl7bGV0IGJlPWMuYXR0cmlidXRlcyxuZT1jZS5hdHRyaWJ1dGVzLGRlPTA7Zm9yKGxldCBwZSBpbiBuZSl7bGV0IGplPWJlW3BlXSxDZT1uZVtwZV07aWYodm9pZCAwPT09amV8fGplLmF0dHJpYnV0ZSE9PUNlfHxqZS5kYXRhIT09Q2UuZGF0YSlyZXR1cm4hMDtkZSsrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1kZXx8Yy5pbmRleCE9PWZlfShuZSxkZSkscGUmJmZ1bmN0aW9uKGNlLGZlKXtsZXQgYmU9e30sbmU9Y2UuYXR0cmlidXRlcyxkZT0wO2ZvcihsZXQgcGUgaW4gbmUpe2xldCBqZT1uZVtwZV0sQ2U9e307Q2UuYXR0cmlidXRlPWplLGplLmRhdGEmJihDZS5kYXRhPWplLmRhdGEpLGJlW3BlXT1DZSxkZSsrfWMuYXR0cmlidXRlcz1iZSxjLmF0dHJpYnV0ZXNOdW09ZGUsYy5pbmRleD1mZX0obmUsZGUpfWVsc2V7bGV0IGplPSEwPT09ZmUud2lyZWZyYW1lOyhjLmdlb21ldHJ5IT09bmUuaWR8fGMucHJvZ3JhbSE9PWJlLmlkfHxjLndpcmVmcmFtZSE9PWplKSYmKGMuZ2VvbWV0cnk9bmUuaWQsYy5wcm9ncmFtPWJlLmlkLGMud2lyZWZyYW1lPWplLHBlPSEwKX0hMD09PWNlLmlzSW5zdGFuY2VkTWVzaCYmKHBlPSEwKSxudWxsIT09ZGUmJmUudXBkYXRlKGRlLDM0OTYzKSxwZSYmKGZ1bmN0aW9uKGNlLGZlLGJlLG5lKXtpZighMT09PWkuaXNXZWJHTDImJihjZS5pc0luc3RhbmNlZE1lc2h8fG5lLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZudWxsPT09dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlyZXR1cm47eCgpO2xldCBkZT1uZS5hdHRyaWJ1dGVzLHBlPWJlLmdldEF0dHJpYnV0ZXMoKSxqZT1mZS5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO2ZvcihsZXQgQ2UgaW4gcGUpe2xldCBOZT1wZVtDZV07aWYoTmUubG9jYXRpb24+PTApe2xldCBsdD1kZVtDZV07aWYodm9pZCAwPT09bHQmJigiaW5zdGFuY2VNYXRyaXgiPT09Q2UmJmNlLmluc3RhbmNlTWF0cml4JiYobHQ9Y2UuaW5zdGFuY2VNYXRyaXgpLCJpbnN0YW5jZUNvbG9yIj09PUNlJiZjZS5pbnN0YW5jZUNvbG9yJiYobHQ9Y2UuaW5zdGFuY2VDb2xvcikpLHZvaWQgMCE9PWx0KXtsZXQgTXQ9bHQubm9ybWFsaXplZCxwdD1sdC5pdGVtU2l6ZSxPZT1lLmdldChsdCk7aWYodm9pZCAwPT09T2UpY29udGludWU7bGV0IEFuPU9lLmJ1ZmZlcix3dD1PZS50eXBlLG9uPU9lLmJ5dGVzUGVyRWxlbWVudDtpZihsdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgdmU9bHQuZGF0YSxtdD12ZS5zdHJpZGUsZnQ9bHQub2Zmc2V0O2lmKHZlJiZ2ZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IG9lPTA7b2U8TmUubG9jYXRpb25TaXplO29lKyspQShOZS5sb2NhdGlvbitvZSx2ZS5tZXNoUGVyQXR0cmlidXRlKTshMCE9PWNlLmlzSW5zdGFuY2VkTWVzaCYmdm9pZCAwPT09bmUuX21heEluc3RhbmNlQ291bnQmJihuZS5fbWF4SW5zdGFuY2VDb3VudD12ZS5tZXNoUGVyQXR0cmlidXRlKnZlLmNvdW50KX1lbHNlIGZvcihsZXQgb2U9MDtvZTxOZS5sb2NhdGlvblNpemU7b2UrKylSKE5lLmxvY2F0aW9uK29lKTtuLmJpbmRCdWZmZXIoMzQ5NjIsQW4pO2ZvcihsZXQgb2U9MDtvZTxOZS5sb2NhdGlvblNpemU7b2UrKyl0ZShOZS5sb2NhdGlvbitvZSxwdC9OZS5sb2NhdGlvblNpemUsd3QsTXQsbXQqb24sKGZ0K3B0L05lLmxvY2F0aW9uU2l6ZSpvZSkqb24pfWVsc2V7aWYobHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgdmU9MDt2ZTxOZS5sb2NhdGlvblNpemU7dmUrKylBKE5lLmxvY2F0aW9uK3ZlLGx0Lm1lc2hQZXJBdHRyaWJ1dGUpOyEwIT09Y2UuaXNJbnN0YW5jZWRNZXNoJiZ2b2lkIDA9PT1uZS5fbWF4SW5zdGFuY2VDb3VudCYmKG5lLl9tYXhJbnN0YW5jZUNvdW50PWx0Lm1lc2hQZXJBdHRyaWJ1dGUqbHQuY291bnQpfWVsc2UgZm9yKGxldCB2ZT0wO3ZlPE5lLmxvY2F0aW9uU2l6ZTt2ZSsrKVIoTmUubG9jYXRpb24rdmUpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCB2ZT0wO3ZlPE5lLmxvY2F0aW9uU2l6ZTt2ZSsrKXRlKE5lLmxvY2F0aW9uK3ZlLHB0L05lLmxvY2F0aW9uU2l6ZSx3dCxNdCxwdCpvbixwdC9OZS5sb2NhdGlvblNpemUqdmUqb24pfX1lbHNlIGlmKHZvaWQgMCE9PWplKXtsZXQgTXQ9amVbQ2VdO2lmKHZvaWQgMCE9PU10KXN3aXRjaChNdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihOZS5sb2NhdGlvbixNdCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KE5lLmxvY2F0aW9uLE10KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoTmUubG9jYXRpb24sTXQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoTmUubG9jYXRpb24sTXQpfX19fVYoKX0oY2UsZmUsYmUsbmUpLG51bGwhPT1kZSYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KGRlKS5idWZmZXIpKX0scmVzZXQ6RCxyZXNldERlZmF1bHRTdGF0ZTpyZSxkaXNwb3NlOmZ1bmN0aW9uKCl7RCgpO2ZvcihsZXQgY2UgaW4gYSl7bGV0IGZlPWFbY2VdO2ZvcihsZXQgYmUgaW4gZmUpe2xldCBuZT1mZVtiZV07Zm9yKGxldCBkZSBpbiBuZSlmKG5lW2RlXS5vYmplY3QpLGRlbGV0ZSBuZVtkZV07ZGVsZXRlIGZlW2JlXX1kZWxldGUgYVtjZV19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbihjZSl7aWYodm9pZCAwPT09YVtjZS5pZF0pcmV0dXJuO2xldCBmZT1hW2NlLmlkXTtmb3IobGV0IGJlIGluIGZlKXtsZXQgbmU9ZmVbYmVdO2ZvcihsZXQgZGUgaW4gbmUpZihuZVtkZV0ub2JqZWN0KSxkZWxldGUgbmVbZGVdO2RlbGV0ZSBmZVtiZV19ZGVsZXRlIGFbY2UuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKGNlKXtmb3IobGV0IGZlIGluIGEpe2xldCBiZT1hW2ZlXTtpZih2b2lkIDA9PT1iZVtjZS5pZF0pY29udGludWU7bGV0IG5lPWJlW2NlLmlkXTtmb3IobGV0IGRlIGluIG5lKWYobmVbZGVdLm9iamVjdCksZGVsZXRlIG5lW2RlXTtkZWxldGUgYmVbY2UuaWRdfX0saW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6UixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpWfX1mdW5jdGlvbiBta2Uobix0LGUsaSl7bGV0IG8scj1pLmlzV2ViR0wyO3RoaXMuc2V0TW9kZT1mdW5jdGlvbihjKXtvPWN9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKGMsZCl7bi5kcmF3QXJyYXlzKG8sYyxkKSxlLnVwZGF0ZShkLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKGMsZCx1KXtpZigwPT09dSlyZXR1cm47bGV0IHAsZjtpZihyKXA9bixmPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKHA9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxmPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1wKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3BbZl0obyxjLGQsdSksZS51cGRhdGUoZCxvLHUpfX1mdW5jdGlvbiBoa2Uobix0LGUpe2xldCBpO2Z1bmN0aW9uIG8oSyl7aWYoImhpZ2hwIj09PUspe2lmKG4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMzLDM2MzM4KS5wcmVjaXNpb24+MCYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzIsMzYzMzgpLnByZWNpc2lvbj4wKXJldHVybiJoaWdocCI7Sz0ibWVkaXVtcCJ9cmV0dXJuIm1lZGl1bXAiPT09SyYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgcz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQ8InUiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT12b2lkIDAhPT1lLnByZWNpc2lvbj9lLnByZWNpc2lvbjoiaGlnaHAiLGw9byhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9c3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLGQ9ITA9PT1lLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsdT1uLmdldFBhcmFtZXRlcigzNDkzMCkscD1uLmdldFBhcmFtZXRlcigzNTY2MCksZj1uLmdldFBhcmFtZXRlcigzMzc5KSxtPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSxiPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxNPW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSx5PW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSx4PW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxSPXA+MCxBPXN8fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpO3JldHVybntpc1dlYkdMMjpzLGRyYXdCdWZmZXJzOmMsZ2V0TWF4QW5pc290cm9weTpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWkpcmV0dXJuIGk7aWYoITA9PT10LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2xldCBLPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpPW4uZ2V0UGFyYW1ldGVyKEsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIGk9MDtyZXR1cm4gaX0sZ2V0TWF4UHJlY2lzaW9uOm8scHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpkLG1heFRleHR1cmVzOnUsbWF4VmVydGV4VGV4dHVyZXM6cCxtYXhUZXh0dXJlU2l6ZTpmLG1heEN1YmVtYXBTaXplOm0sbWF4QXR0cmlidXRlczpiLG1heFZlcnRleFVuaWZvcm1zOk0sbWF4VmFyeWluZ3M6eSxtYXhGcmFnbWVudFVuaWZvcm1zOngsdmVydGV4VGV4dHVyZXM6UixmbG9hdEZyYWdtZW50VGV4dHVyZXM6QSxmbG9hdFZlcnRleFRleHR1cmVzOlImJkEsbWF4U2FtcGxlczpzP24uZ2V0UGFyYW1ldGVyKDM2MTgzKTowfX1mdW5jdGlvbiBna2Uobil7bGV0IHQ9dGhpcyxlPW51bGwsaT0wLHI9ITEsbz0hMSxzPW5ldyBLbCxhPW5ldyBibyxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PWUmJihsLnZhbHVlPWUsbC5uZWVkc1VwZGF0ZT1pPjApLHQubnVtUGxhbmVzPWksdC5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiBkKHUscCxmLG0pe2xldCBiPW51bGwhPT11P3UubGVuZ3RoOjAsTT1udWxsO2lmKDAhPT1iKXtpZihNPWwudmFsdWUsITAhPT1tfHxudWxsPT09TSl7bGV0IHk9Zis0KmIseD1wLm1hdHJpeFdvcmxkSW52ZXJzZTthLmdldE5vcm1hbE1hdHJpeCh4KSwobnVsbD09PU18fE0ubGVuZ3RoPHkpJiYoTT1uZXcgRmxvYXQzMkFycmF5KHkpKTtmb3IobGV0IFI9MCxBPWY7UiE9PWI7KytSLEErPTQpcy5jb3B5KHVbUl0pLmFwcGx5TWF0cml4NCh4LGEpLHMubm9ybWFsLnRvQXJyYXkoTSxBKSxNW0ErM109cy5jb25zdGFudH1sLnZhbHVlPU0sbC5uZWVkc1VwZGF0ZT0hMH1yZXR1cm4gdC5udW1QbGFuZXM9Yix0Lm51bUludGVyc2VjdGlvbj0wLE19dGhpcy51bmlmb3JtPWwsdGhpcy5udW1QbGFuZXM9MCx0aGlzLm51bUludGVyc2VjdGlvbj0wLHRoaXMuaW5pdD1mdW5jdGlvbih1LHAsZil7bGV0IG09MCE9PXUubGVuZ3RofHxwfHwwIT09aXx8cjtyZXR1cm4gcj1wLGU9ZCh1LGYsMCksaT11Lmxlbmd0aCxtfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe289ITAsZChudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24odSxwLGYpe2xldCBtPXUuY2xpcHBpbmdQbGFuZXMsYj11LmNsaXBJbnRlcnNlY3Rpb24sTT11LmNsaXBTaGFkb3dzLHk9bi5nZXQodSk7aWYoIXJ8fG51bGw9PT1tfHwwPT09bS5sZW5ndGh8fG8mJiFNKW8/ZChudWxsKTpjKCk7ZWxzZXtsZXQgeD1vPzA6aSxSPTQqeCxBPXkuY2xpcHBpbmdTdGF0ZXx8bnVsbDtsLnZhbHVlPUEsQT1kKG0scCxSLGYpO2ZvcihsZXQgVj0wO1YhPT1SOysrVilBW1ZdPWVbVl07eS5jbGlwcGluZ1N0YXRlPUEsdGhpcy5udW1JbnRlcnNlY3Rpb249Yj90aGlzLm51bVBsYW5lczowLHRoaXMubnVtUGxhbmVzKz14fX19ZnVuY3Rpb24gX2tlKG4pe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGUocyxhKXtyZXR1cm4gYT09PUszP3MubWFwcGluZz1XeDphPT09SjMmJihzLm1hcHBpbmc9cXgpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKGE9PT1LM3x8YT09PUozKXtpZih0LmhhcyhzKSlyZXR1cm4gZSh0LmdldChzKS50ZXh0dXJlLHMubWFwcGluZyk7e2xldCBsPXMuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFNJKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKG4scyksdC5zZXQocyxjKSxzLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpLGUoYy50ZXh0dXJlLHMubWFwcGluZyl9cmV0dXJuIG51bGx9fX1yZXR1cm4gc30sZGlzcG9zZTpmdW5jdGlvbigpe3Q9bmV3IFdlYWtNYXB9fX1xYy5waHlzaWNhbD17dW5pZm9ybXM6Sm8oW3FjLnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgJGUoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IGFuKDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3ICRlfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGFuKDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBhbigxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNocGh5c2ljYWxfZnJhZ307dmFyIG1tPWNsYXNzIGV4dGVuZHMgU3h7Y29uc3RydWN0b3IodD0tMSxlPTEsaT0xLHI9LTEsbz0uMSxzPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1lLHRoaXMudG9wPWksdGhpcy5ib3R0b209cix0aGlzLm5lYXI9byx0aGlzLmZhcj1zLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxlLGkscixvLHMpe251bGw9PT10aGlzLnZpZXcmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7bnVsbCE9PXRoaXMudmlldyYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLGU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLGk9KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLHI9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89aS10LHM9aSt0LGE9citlLGw9ci1lO2lmKG51bGwhPT10aGlzLnZpZXcmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLGQ9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxzPW8rYyp0aGlzLnZpZXcud2lkdGgsYS09ZCp0aGlzLnZpZXcub2Zmc2V0WSxsPWEtZCp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8scyxhLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxlLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LGUub2JqZWN0LnRvcD10aGlzLnRvcCxlLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZX19O21tLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgSzA9Y2xhc3MgZXh0ZW5kcyBHZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O0swLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBXMD00LGhwPTgsV2M9TWF0aC5wb3coMixocCksS2VlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxKZWU9aHAtVzArMStLZWUubGVuZ3RoLEgzPW5ldyBtbSx7X2xvZFBsYW5lczpseCxfc2l6ZUxvZHM6WiQsX3NpZ21hczpuSX09YmtlKCksSyQ9bmV3IGFuLHozPW51bGwsbG09KDErTWF0aC5zcXJ0KDUpKS8yLE8wPTEvbG0sSiQ9W25ldyAkKDEsMSwxKSxuZXcgJCgtMSwxLDEpLG5ldyAkKDEsMSwtMSksbmV3ICQoLTEsMSwtMSksbmV3ICQoMCxsbSxPMCksbmV3ICQoMCxsbSwtTzApLG5ldyAkKE8wLDAsbG0pLG5ldyAkKC1PMCwwLGxtKSxuZXcgJChsbSxPMCwwKSxuZXcgJCgtbG0sTzAsMCldLEVJPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheSgyMCksZT1uZXcgJCgwLDEsMCk7cmV0dXJuIG5ldyBLMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOjIwfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSBpbnQgc2FtcGxlcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdO1xuXHRcdFx0dW5pZm9ybSBib29sIGxhdGl0dWRpbmFsO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBkVGhldGE7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1pcEludDtcblx0XHRcdHVuaWZvcm0gdmVjMyBwb2xlQXhpcztcblxuXHRcdFx0I2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0XHQjaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuXG5cdFx0XHR2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHtcblxuXHRcdFx0XHRmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTtcblx0XHRcdFx0Ly8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uXG5cdFx0XHRcdHZlYzMgc2FtcGxlRGlyZWN0aW9uID0gdk91dHB1dERpcmVjdGlvbiAqIGNvc1RoZXRhXG5cdFx0XHRcdFx0KyBjcm9zcyggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogc2luKCB0aGV0YSApXG5cdFx0XHRcdFx0KyBheGlzICogZG90KCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiAoIDEuMCAtIGNvc1RoZXRhICk7XG5cblx0XHRcdFx0cmV0dXJuIGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpcmVjdGlvbiwgbWlwSW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdHZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHtcblxuXHRcdFx0XHRcdGF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7XG5cblx0XHRcdFx0Zm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBpID49IHNhbXBsZXMgKSB7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmxvYXQgdGhldGEgPSBkVGhldGEgKiBmbG9hdCggaSApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCAtMS4wICogdGhldGEsIGF4aXMgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggdGhldGEsIGF4aXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOnBwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9KCksdGhpcy5fZXF1aXJlY3RTaGFkZXI9bnVsbCx0aGlzLl9jdWJlbWFwU2hhZGVyPW51bGwsdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2JsdXJNYXRlcmlhbCl9ZnJvbVNjZW5lKHQsZT0wLGk9LjEscj0xMDApe3ozPXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBvPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsaSxyLG8pLGU+MCYmdGhpcy5fYmx1cihvLDAsMCxlKSx0aGlzLl9hcHBseVBNUkVNKG8pLHRoaXMuX2NsZWFudXAobyksb31mcm9tRXF1aXJlY3Rhbmd1bGFyKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1mcm9tQ3ViZW1hcCh0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXtudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9dGVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7bnVsbD09PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9ZWVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2N1YmVtYXBTaGFkZXImJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9lcXVpcmVjdFNoYWRlciYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8bHgubGVuZ3RoO3QrKylseFt0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHozKSx0LnNjaXNzb3JUZXN0PSExLGlJKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe3ozPXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOiRvLG1pbkZpbHRlcjokbyxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVMCxmb3JtYXQ6Z3MsZW5jb2Rpbmc6X3AsZGVwdGhCdWZmZXI6ITF9LGk9JCQoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsbnVsbD09PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9JCQoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgYW8obHhbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLEgzKX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgZXMoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLGQ9dGhpcy5fcmVuZGVyZXIsdT1kLmF1dG9DbGVhcixwPWQudG9uZU1hcHBpbmc7ZC5nZXRDbGVhckNvbG9yKEskKSxkLnRvbmVNYXBwaW5nPWZwLGQuYXV0b0NsZWFyPSExO2xldCBmPW5ldyBwbSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpnbyxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLG09bmV3IGFvKG5ldyBmbSxmKSxiPSExLE09dC5iYWNrZ3JvdW5kO00/TS5pc0NvbG9yJiYoZi5jb2xvci5jb3B5KE0pLHQuYmFja2dyb3VuZD1udWxsLGI9ITApOihmLmNvbG9yLmNvcHkoSyQpLGI9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzswPT09eD8oYS51cC5zZXQoMCxsW3ldLDApLGEubG9va0F0KGNbeV0sMCwwKSk6MT09PXg/KGEudXAuc2V0KDAsMCxsW3ldKSxhLmxvb2tBdCgwLGNbeV0sMCkpOihhLnVwLnNldCgwLGxbeV0sMCksYS5sb29rQXQoMCwwLGNbeV0pKSxpSShyLHgqV2MseT4yP1djOjAsV2MsV2MpLGQuc2V0UmVuZGVyVGFyZ2V0KHIpLGImJmQucmVuZGVyKG0sYSksZC5yZW5kZXIodCxhKX1tLmdlb21ldHJ5LmRpc3Bvc2UoKSxtLm1hdGVyaWFsLmRpc3Bvc2UoKSxkLnRvbmVNYXBwaW5nPXAsZC5hdXRvQ2xlYXI9dSx0LmJhY2tncm91bmQ9TX1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1XeHx8dC5tYXBwaW5nPT09cXg7cj8obnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXRlZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9ITE9PT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxKTpudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1lZWUoKSk7bGV0IG89cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLHM9bmV3IGFvKGx4WzBdLG8pLGE9by51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksaUkoZSwwLDAsMypXYywyKldjKSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihzLEgzKX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8SmVlO3IrKyl7bGV0IG89TWF0aC5zcXJ0KG5JW3JdKm5JW3JdLW5JW3ItMV0qbklbci0xXSk7dGhpcy5fYmx1cih0LHItMSxyLG8sSiRbKHItMSklSiQubGVuZ3RoXSl9ZS5hdXRvQ2xlYXI9aX1fYmx1cih0LGUsaSxyLG8pe2xldCBzPXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0O3RoaXMuX2hhbGZCbHVyKHQscyxlLGksciwibGF0aXR1ZGluYWwiLG8pLHRoaXMuX2hhbGZCbHVyKHMsdCxpLGksciwibG9uZ2l0dWRpbmFsIixvKX1faGFsZkJsdXIodCxlLGkscixvLHMsYSl7bGV0IGw9dGhpcy5fcmVuZGVyZXIsYz10aGlzLl9ibHVyTWF0ZXJpYWw7ImxhdGl0dWRpbmFsIiE9PXMmJiJsb25naXR1ZGluYWwiIT09cyYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2xldCB1PW5ldyBhbyhseFtyXSxjKSxwPWMudW5pZm9ybXMsZj1aJFtpXS0xLG09aXNGaW5pdGUobyk/TWF0aC5QSS8oMipmKToyKk1hdGguUEkvMzksYj1vL20sTT1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IoMypiKToyMDtNPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke019IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCB0ZT0wO3RlPDIwOysrdGUpe2xldCBLPXRlL2IseGU9TWF0aC5leHAoLUsqSy8yKTt5LnB1c2goeGUpLDA9PT10ZT94Kz14ZTp0ZTxNJiYoeCs9Mip4ZSl9Zm9yKGxldCB0ZT0wO3RlPHkubGVuZ3RoO3RlKyspeVt0ZV09eVt0ZV0veDtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPU0scC53ZWlnaHRzLnZhbHVlPXkscC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1tLHAubWlwSW50LnZhbHVlPWhwLWk7bGV0IFI9WiRbcl07aUkoZSwzKk1hdGgubWF4KDAsV2MtMipSKSwoMD09PXI/MDoyKldjKSsyKlIqKHI+aHAtVzA/ci1ocCtXMDowKSwzKlIsMipSKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcih1LEgzKX19O2Z1bmN0aW9uIGJrZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPWhwO2ZvcihsZXQgcj0wO3I8SmVlO3IrKyl7bGV0IG89TWF0aC5wb3coMixpKTt0LnB1c2gobyk7bGV0IHM9MS9vO3I+aHAtVzA/cz1LZWVbci1ocCtXMC0xXTowPT09ciYmKHM9MCksZS5wdXNoKHMpO2xldCBhPTEvKG8tMSksbD0tYS8yLGM9MSthLzIsZD1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLHU9NixwPTYsZj0zLG09MixiPTEsTT1uZXcgRmxvYXQzMkFycmF5KGYqcCp1KSx5PW5ldyBGbG9hdDMyQXJyYXkobSpwKnUpLHg9bmV3IEZsb2F0MzJBcnJheShiKnAqdSk7Zm9yKGxldCBBPTA7QTx1O0ErKyl7bGV0IFY9QSUzKjIvMy0xLHRlPUE+Mj8wOi0xO00uc2V0KFtWLHRlLDAsVisyLzMsdGUsMCxWKzIvMyx0ZSsxLDAsVix0ZSwwLFYrMi8zLHRlKzEsMCxWLHRlKzEsMF0sZipwKkEpLHkuc2V0KGQsbSpwKkEpLHguc2V0KFtBLEEsQSxBLEEsQV0sYipwKkEpfWxldCBSPW5ldyBVaTtSLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBQcihNLGYpKSxSLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBQcih5LG0pKSxSLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUHIoeCxiKSksbi5wdXNoKFIpLGk+VzAmJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24gJCQobil7bGV0IHQ9bmV3IEpzKDMqV2MsMypXYyxuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9WEksdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIGlJKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBlZWUoKXtsZXQgbj1uZXcgJGUoMSwxKTtyZXR1cm4gbmV3IEswKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpufX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzpwcCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIHRlZSgpe3JldHVybiBuZXcgSzAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTtcblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6cHAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiB5a2Uobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIG8oYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTt2b2lkIDAhPT1jJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24oYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1LM3x8bD09PUozLGQ9bD09PVd4fHxsPT09cXg7aWYoY3x8ZCl7aWYoYS5pc1JlbmRlclRhcmdldFRleHR1cmUmJiEwPT09YS5uZWVkc1BNUkVNVXBkYXRlKXthLm5lZWRzUE1SRU1VcGRhdGU9ITE7bGV0IHU9dC5nZXQoYSk7cmV0dXJuIG51bGw9PT1lJiYoZT1uZXcgRUkobikpLHU9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSx1KTplLmZyb21DdWJlbWFwKGEsdSksdC5zZXQoYSx1KSx1LnRleHR1cmV9aWYodC5oYXMoYSkpcmV0dXJuIHQuZ2V0KGEpLnRleHR1cmU7e2xldCB1PWEuaW1hZ2U7aWYoYyYmdSYmdS5oZWlnaHQ+MHx8ZCYmdSYmZnVuY3Rpb24oYSl7bGV0IGw9MDtmb3IobGV0IGQ9MDtkPDY7ZCsrKXZvaWQgMCE9PWFbZF0mJmwrKztyZXR1cm4gNj09PWx9KHUpKXtudWxsPT09ZSYmKGU9bmV3IEVJKG4pKTtsZXQgcD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhKTplLmZyb21DdWJlbWFwKGEpO3JldHVybiB0LnNldChhLHApLGEuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykscC50ZXh0dXJlfXJldHVybiBudWxsfX19cmV0dXJuIGF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0PW5ldyBXZWFrTWFwLG51bGwhPT1lJiYoZS5kaXNwb3NlKCksZT1udWxsKX19fWZ1bmN0aW9uIHhrZShuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHZvaWQgMCE9PXRbaV0pcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIG51bGwhPT1lKGkpfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gbnVsbD09PXImJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIENrZShuLHQsZSxpKXtsZXQgcj17fSxvPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHModSl7bGV0IHA9dS50YXJnZXQ7bnVsbCE9PXAuaW5kZXgmJnQucmVtb3ZlKHAuaW5kZXgpO2ZvcihsZXQgbSBpbiBwLmF0dHJpYnV0ZXMpdC5yZW1vdmUocC5hdHRyaWJ1dGVzW21dKTtwLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLGRlbGV0ZSByW3AuaWRdO2xldCBmPW8uZ2V0KHApO2YmJih0LnJlbW92ZShmKSxvLmRlbGV0ZShwKSksaS5yZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeShwKSwhMD09PXAuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSYmZGVsZXRlIHAuX21heEluc3RhbmNlQ291bnQsZS5tZW1vcnkuZ2VvbWV0cmllcy0tfWZ1bmN0aW9uIGModSl7bGV0IHA9W10sZj11LmluZGV4LG09dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGI9MDtpZihudWxsIT09Zil7bGV0IHg9Zi5hcnJheTtiPWYudmVyc2lvbjtmb3IobGV0IFI9MCxBPXgubGVuZ3RoO1I8QTtSKz0zKXtsZXQgVj14W1IrMF0sdGU9eFtSKzFdLEs9eFtSKzJdO3AucHVzaChWLHRlLHRlLEssSyxWKX19ZWxzZXtiPW0udmVyc2lvbjtmb3IobGV0IFI9MCxBPW0uYXJyYXkubGVuZ3RoLzMtMTtSPEE7Uis9Myl7bGV0IFY9UiswLHRlPVIrMSxLPVIrMjtwLnB1c2goVix0ZSx0ZSxLLEssVil9fWxldCBNPW5ldyhRZWUocCk/d0k6TUkpKHAsMSk7TS52ZXJzaW9uPWI7bGV0IHk9by5nZXQodSk7eSYmdC5yZW1vdmUoeSksby5zZXQodSxNKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKHUscCl7cmV0dXJuITA9PT1yW3AuaWRdfHwocC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxyW3AuaWRdPSEwLGUubWVtb3J5Lmdlb21ldHJpZXMrKykscH0sdXBkYXRlOmZ1bmN0aW9uKHUpe2xldCBwPXUuYXR0cmlidXRlcztmb3IobGV0IG0gaW4gcCl0LnVwZGF0ZShwW21dLDM0OTYyKTtsZXQgZj11Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IG0gaW4gZil7bGV0IGI9ZlttXTtmb3IobGV0IE09MCx5PWIubGVuZ3RoO008eTtNKyspdC51cGRhdGUoYltNXSwzNDk2Mil9fSxnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6ZnVuY3Rpb24odSl7bGV0IHA9by5nZXQodSk7aWYocCl7bGV0IGY9dS5pbmRleDtudWxsIT09ZiYmcC52ZXJzaW9uPGYudmVyc2lvbiYmYyh1KX1lbHNlIGModSk7cmV0dXJuIG8uZ2V0KHUpfX19ZnVuY3Rpb24gTWtlKG4sdCxlLGkpe2xldCBvLGEsbCxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKHApe289cH0sdGhpcy5zZXRJbmRleD1mdW5jdGlvbihwKXthPXAudHlwZSxsPXAuYnl0ZXNQZXJFbGVtZW50fSx0aGlzLnJlbmRlcj1mdW5jdGlvbihwLGYpe24uZHJhd0VsZW1lbnRzKG8sZixhLHAqbCksZS51cGRhdGUoZixvLDEpfSx0aGlzLnJlbmRlckluc3RhbmNlcz1mdW5jdGlvbihwLGYsbSl7aWYoMD09PW0pcmV0dXJuO2xldCBiLE07aWYociliPW4sTT0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKGI9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxNPSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PWIpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO2JbTV0obyxmLGEscCpsLG0pLGUudXBkYXRlKGYsbyxtKX19ZnVuY3Rpb24gd2tlKG4pe2xldCBlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07cmV0dXJue21lbW9yeTp7Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHJlbmRlcjplLHByb2dyYW1zOm51bGwsYXV0b1Jlc2V0OiEwLHJlc2V0OmZ1bmN0aW9uKCl7ZS5mcmFtZSsrLGUuY2FsbHM9MCxlLnRyaWFuZ2xlcz0wLGUucG9pbnRzPTAsZS5saW5lcz0wfSx1cGRhdGU6ZnVuY3Rpb24obyxzLGEpe3N3aXRjaChlLmNhbGxzKysscyl7Y2FzZSA0OmUudHJpYW5nbGVzKz1hKihvLzMpO2JyZWFrO2Nhc2UgMTplLmxpbmVzKz1hKihvLzIpO2JyZWFrO2Nhc2UgMzplLmxpbmVzKz1hKihvLTEpO2JyZWFrO2Nhc2UgMjplLmxpbmVzKz1hKm87YnJlYWs7Y2FzZSAwOmUucG9pbnRzKz1hKm87YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZm86IFVua25vd24gZHJhdyBtb2RlOiIscyl9fX19dmFyIER4PWNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1fbyx0aGlzLm1pbkZpbHRlcj1fbyx0aGlzLndyYXBSPXlhLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2Z1bmN0aW9uIFNrZShuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gRWtlKG4sdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKG5bMV0pfWZ1bmN0aW9uIG5lZShuLHQpe2xldCBlPTEsaT10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7aSBpbnN0YW5jZW9mIEludDhBcnJheT9lPTEyNzppIGluc3RhbmNlb2YgSW50MTZBcnJheT9lPTMyNzY3OmkgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2U9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixpKSxuLmRpdmlkZVNjYWxhcihlKX1mdW5jdGlvbiBUa2Uobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLHM9bmV3ICQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihjLGQsdSxwKXtsZXQgZj1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZighMD09PXQuaXNXZWJHTDIpe2xldCBtPWQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxiPW8uZ2V0KGQpO2lmKHZvaWQgMD09PWJ8fGIuY291bnQhPT1tKXtsZXQgcmU9ZnVuY3Rpb24oKXtEZS5kaXNwb3NlKCksby5kZWxldGUoZCksZC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyZSl9O3ZvaWQgMCE9PWImJmIudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dm9pZCAwIT09ZC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLFI9ZC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sQT1kLm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLHRlPSEwPT09eD8yOjEsSz1kLmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQqdGUseGU9MTtLPnQubWF4VGV4dHVyZVNpemUmJih4ZT1NYXRoLmNlaWwoSy90Lm1heFRleHR1cmVTaXplKSxLPXQubWF4VGV4dHVyZVNpemUpO2xldCBYZT1uZXcgRmxvYXQzMkFycmF5KEsqeGUqNCptKSxEZT1uZXcgRHgoWGUsSyx4ZSxtKTtEZS5mb3JtYXQ9Z3MsRGUudHlwZT1jbSxEZS5uZWVkc1VwZGF0ZT0hMDtsZXQgRD00KnRlO2ZvcihsZXQgY2U9MDtjZTxtO2NlKyspe2xldCBmZT1SW2NlXSxiZT1BW2NlXSxuZT1LKnhlKjQqY2U7Zm9yKGxldCBkZT0wO2RlPGZlLmNvdW50O2RlKyspe3MuZnJvbUJ1ZmZlckF0dHJpYnV0ZShmZSxkZSksITA9PT1mZS5ub3JtYWxpemVkJiZuZWUocyxmZSk7bGV0IHBlPWRlKkQ7WGVbbmUrcGUrMF09cy54LFhlW25lK3BlKzFdPXMueSxYZVtuZStwZSsyXT1zLnosWGVbbmUrcGUrM109MCwhMD09PXgmJihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYmUsZGUpLCEwPT09YmUubm9ybWFsaXplZCYmbmVlKHMsYmUpLFhlW25lK3BlKzRdPXMueCxYZVtuZStwZSs1XT1zLnksWGVbbmUrcGUrNl09cy56LFhlW25lK3BlKzddPTApfX1iPXtjb3VudDptLHRleHR1cmU6RGUsc2l6ZTpuZXcgJGUoSyx4ZSl9LG8uc2V0KGQsYiksZC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyZSl9bGV0IE09MDtmb3IobGV0IHg9MDt4PGYubGVuZ3RoO3grKylNKz1mW3hdO2xldCB5PWQubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLU07cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsZikscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGIudGV4dHVyZSxlKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGIuc2l6ZSl9ZWxzZXtsZXQgbT12b2lkIDA9PT1mPzA6Zi5sZW5ndGgsYj1pW2QuaWRdO2lmKHZvaWQgMD09PWJ8fGIubGVuZ3RoIT09bSl7Yj1bXTtmb3IobGV0IEE9MDtBPG07QSsrKWJbQV09W0EsMF07aVtkLmlkXT1ifWZvcihsZXQgQT0wO0E8bTtBKyspe2xldCBWPWJbQV07VlswXT1BLFZbMV09ZltBXX1iLnNvcnQoRWtlKTtmb3IobGV0IEE9MDtBPDg7QSsrKUE8bSYmYltBXVsxXT8oYVtBXVswXT1iW0FdWzBdLGFbQV1bMV09YltBXVsxXSk6KGFbQV1bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtBXVsxXT0wKTthLnNvcnQoU2tlKTtsZXQgTT1kLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PWQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBBPTA7QTw4O0ErKyl7bGV0IFY9YVtBXSx0ZT1WWzBdLEs9VlsxXTt0ZSE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZLPyhNJiZkLmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EpIT09TVt0ZV0mJmQuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSxNW3RlXSkseSYmZC5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBKSE9PXlbdGVdJiZkLnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EseVt0ZV0pLHJbQV09Syx4Kz1LKTooTSYmITA9PT1kLmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EpJiZkLmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK0EpLHkmJiEwPT09ZC5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBKSYmZC5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitBKSxyW0FdPTApfWxldCBSPWQubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsUikscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscil9fX19ZnVuY3Rpb24gRGtlKG4sdCxlLGkpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEobCl7bGV0IGM9bC50YXJnZXQ7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnJlbW92ZShjLmluc3RhbmNlTWF0cml4KSxudWxsIT09Yy5pbnN0YW5jZUNvbG9yJiZlLnJlbW92ZShjLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24obCl7bGV0IGM9aS5yZW5kZXIuZnJhbWUsdT10LmdldChsLGwuZ2VvbWV0cnkpO3JldHVybiByLmdldCh1KSE9PWMmJih0LnVwZGF0ZSh1KSxyLnNldCh1LGMpKSxsLmlzSW5zdGFuY2VkTWVzaCYmKCExPT09bC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSYmbC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnVwZGF0ZShsLmluc3RhbmNlTWF0cml4LDM0OTYyKSxudWxsIT09bC5pbnN0YW5jZUNvbG9yJiZlLnVwZGF0ZShsLmluc3RhbmNlQ29sb3IsMzQ5NjIpKSx1fSxkaXNwb3NlOmZ1bmN0aW9uKCl7cj1uZXcgV2Vha01hcH19fUR4LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDt2YXIgVEk9Y2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPV9vLHRoaXMubWluRmlsdGVyPV9vLHRoaXMud3JhcFI9eWEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07VEkucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgJGVlPW5ldyBsbyxldGU9bmV3IER4LHR0ZT1uZXcgVEksbnRlPW5ldyBRMCxpZWU9W10scmVlPVtdLG9lZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxzZWU9bmV3IEZsb2F0MzJBcnJheSg5KSxhZWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBzXyhuLHQsZSl7bGV0IGk9blswXTtpZihpPD0wfHxpPjApcmV0dXJuIG47bGV0IHI9dCplLG89aWVlW3JdO2lmKHZvaWQgMD09PW8mJihvPW5ldyBGbG9hdDMyQXJyYXkociksaWVlW3JdPW8pLDAhPT10KXtpLnRvQXJyYXkobywwKTtmb3IobGV0IHM9MSxhPTA7cyE9PXQ7KytzKWErPWUsbltzXS50b0FycmF5KG8sYSl9cmV0dXJuIG99ZnVuY3Rpb24gX3Mobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBucyhuLHQpe2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyluW2VdPXRbZV19ZnVuY3Rpb24gWkkobix0KXtsZXQgZT1yZWVbdF07dm9pZCAwPT09ZSYmKGU9bmV3IEludDMyQXJyYXkodCkscmVlW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIElrZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBBa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueSkmJihuLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksZVswXT10LngsZVsxXT10LnkpO2Vsc2V7aWYoX3MoZSx0KSlyZXR1cm47bi51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxucyhlLHQpfX1mdW5jdGlvbiBSa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHZvaWQgMCE9PXQucikoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKF9zKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksbnMoZSx0KX19ZnVuY3Rpb24gUGtlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10Lnl8fGVbMl0hPT10Lnp8fGVbM10hPT10LncpJiYobi51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksZVswXT10LngsZVsxXT10LnksZVsyXT10LnosZVszXT10LncpO2Vsc2V7aWYoX3MoZSx0KSlyZXR1cm47bi51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxucyhlLHQpfX1mdW5jdGlvbiBPa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfcyhlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLG5zKGUsdCl9ZWxzZXtpZihfcyhlLGkpKXJldHVybjthZWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsYWVlKSxucyhlLGkpfX1mdW5jdGlvbiBra2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfcyhlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLG5zKGUsdCl9ZWxzZXtpZihfcyhlLGkpKXJldHVybjtzZWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsc2VlKSxucyhlLGkpfX1mdW5jdGlvbiBGa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfcyhlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLG5zKGUsdCl9ZWxzZXtpZihfcyhlLGkpKXJldHVybjtvZWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsb2VlKSxucyhlLGkpfX1mdW5jdGlvbiBOa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gTGtlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtfcyhlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBCa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLG5zKGUsdCkpfWZ1bmN0aW9uIFZrZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7X3MoZSx0KXx8KG4udW5pZm9ybTRpdih0aGlzLmFkZHIsdCksbnMoZSx0KSl9ZnVuY3Rpb24gSGtlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB6a2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBVa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBqa2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19zKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxucyhlLHQpKX1mdW5jdGlvbiBHa2Uobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmUyRCh0fHwkZWUscil9ZnVuY3Rpb24gV2tlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx0dGUscil9ZnVuY3Rpb24gcWtlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxudGUscil9ZnVuY3Rpb24gWWtlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUyREFycmF5KHR8fGV0ZSxyKX1mdW5jdGlvbiBRa2Uobix0KXtuLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFprZShuLHQpe2xldCBlPXNfKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gS2tlKG4sdCl7bGV0IGU9c18odCx0aGlzLnNpemUsMyk7bi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBKa2Uobix0KXtsZXQgZT1zXyh0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uICRrZShuLHQpe2xldCBlPXNfKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gZUZlKG4sdCl7bGV0IGU9c18odCx0aGlzLnNpemUsOSk7bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB0RmUobix0KXtsZXQgZT1zXyh0LHRoaXMuc2l6ZSwxNik7bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBuRmUobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGlGZShuLHQpe24udW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gckZlKG4sdCl7bi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBvRmUobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHNGZShuLHQpe24udW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGFGZShuLHQpe24udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGxGZShuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGNGZShuLHQpe24udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGRGZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1aSShlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmUyRCh0W29dfHwkZWUscltvXSl9ZnVuY3Rpb24gdUZlKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVpJKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zZXRUZXh0dXJlM0QodFtvXXx8dHRlLHJbb10pfWZ1bmN0aW9uIHBGZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1aSShlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fG50ZSxyW29dKX1mdW5jdGlvbiBmRmUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9WkkoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUyREFycmF5KHRbb118fGV0ZSxyW29dKX1mdW5jdGlvbiBoRmUobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gSWtlO2Nhc2UgMzU2NjQ6cmV0dXJuIEFrZTtjYXNlIDM1NjY1OnJldHVybiBSa2U7Y2FzZSAzNTY2NjpyZXR1cm4gUGtlO2Nhc2UgMzU2NzQ6cmV0dXJuIE9rZTtjYXNlIDM1Njc1OnJldHVybiBra2U7Y2FzZSAzNTY3NjpyZXR1cm4gRmtlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBOa2U7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBMa2U7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBCa2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBWa2U7Y2FzZSA1MTI1OnJldHVybiBIa2U7Y2FzZSAzNjI5NDpyZXR1cm4gemtlO2Nhc2UgMzYyOTU6cmV0dXJuIFVrZTtjYXNlIDM2Mjk2OnJldHVybiBqa2U7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBHa2U7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIFdrZTtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBxa2U7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gWWtlfX0odC50eXBlKX1mdW5jdGlvbiBpdGUobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBRa2U7Y2FzZSAzNTY2NDpyZXR1cm4gWmtlO2Nhc2UgMzU2NjU6cmV0dXJuIEtrZTtjYXNlIDM1NjY2OnJldHVybiBKa2U7Y2FzZSAzNTY3NDpyZXR1cm4gJGtlO2Nhc2UgMzU2NzU6cmV0dXJuIGVGZTtjYXNlIDM1Njc2OnJldHVybiB0RmU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIG5GZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIGlGZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIHJGZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIG9GZTtjYXNlIDUxMjU6cmV0dXJuIHNGZTtjYXNlIDM2Mjk0OnJldHVybiBhRmU7Y2FzZSAzNjI5NTpyZXR1cm4gbEZlO2Nhc2UgMzYyOTY6cmV0dXJuIGNGZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIGRGZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gdUZlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIHBGZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBmRmV9fSh0LnR5cGUpfWZ1bmN0aW9uIHJ0ZShuKXt0aGlzLmlkPW4sdGhpcy5zZXE9W10sdGhpcy5tYXA9e319aXRlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihuKXtsZXQgdD10aGlzLmNhY2hlO24gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09bi5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkobi5sZW5ndGgpKSxucyh0LG4pfSxydGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10aGlzLnNlcTtmb3IobGV0IHI9MCxvPWkubGVuZ3RoO3IhPT1vOysrcil7bGV0IHM9aVtyXTtzLnNldFZhbHVlKG4sdFtzLmlkXSxlKX19O3ZhciBVMz0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gbGVlKG4sdCl7bi5zZXEucHVzaCh0KSxuLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGdGZShuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKFUzLmxhc3RJbmRleD0wOzspe2xldCBvPVUzLmV4ZWMoaSksYT1vWzFdLGM9b1szXTtpZigiXSI9PT1vWzJdJiYoYXw9MCksdm9pZCAwPT09Y3x8IlsiPT09YyYmVTMubGFzdEluZGV4KzI9PT1yKXtsZWUoZSx2b2lkIDA9PT1jP25ldyBoRmUoYSxuLHQpOm5ldyBpdGUoYSxuLHQpKTticmVha317bGV0IHU9ZS5tYXBbYV07dm9pZCAwPT09dSYmKHU9bmV3IHJ0ZShhKSxsZWUoZSx1KSksZT11fX19ZnVuY3Rpb24gZ3Aobix0KXt0aGlzLnNlcT1bXSx0aGlzLm1hcD17fTtsZXQgZT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcxOCk7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHI9bi5nZXRBY3RpdmVVbmlmb3JtKHQsaSk7Z0ZlKHIsbi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBjZWUobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfWdwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTt2b2lkIDAhPT1yJiZyLnNldFZhbHVlKG4sZSxpKX0sZ3AucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO3ZvaWQgMCE9PWkmJnRoaXMuc2V0VmFsdWUobixlLGkpfSxncC51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyIT09bzsrK3Ipe2xldCBzPXRbcl0sYT1lW3MuaWRdOyExIT09YS5uZWVkc1VwZGF0ZSYmcy5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fSxncC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IG89bltpXTtvLmlkIGluIHQmJmUucHVzaChvKX1yZXR1cm4gZX07dmFyIF9GZT0wO2Z1bmN0aW9uIGRlZShuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6ZS50b1VwcGVyQ2FzZSgpKyJcblxuIityKyJcblxuIitmdW5jdGlvbihuKXtsZXQgdD1uLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKCJcbiIpfShuLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24geUZlKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgX3A6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEFyOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fSh0KTtyZXR1cm4idmVjNCAiK24rIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24geEZlKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgWUFlOmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBYQWU6ZT0iUmVpbmhhcmQiO2JyZWFrO2Nhc2UgUUFlOmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSBaQWU6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBLQWU6ZT0iQ3VzdG9tIjticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCB0b25lTWFwcGluZzoiLHQpLGU9IkxpbmVhciJ9cmV0dXJuInZlYzMgIituKyIoIHZlYzMgY29sb3IgKSB7IHJldHVybiAiK2UrIlRvbmVNYXBwaW5nKCBjb2xvciApOyB9In1mdW5jdGlvbiBoeChuKXtyZXR1cm4iIiE9PW59ZnVuY3Rpb24gdWVlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyx0Lm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csdC5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLHQubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyx0Lm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyx0Lm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLHQubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csdC5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLHQubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIHBlZShuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIFNGZT0vXlsgXHRdKiNpbmNsdWRlICs8KFtcd1xkLi9dKyk+L2dtO2Z1bmN0aW9uIG9CKG4pe3JldHVybiBuLnJlcGxhY2UoU0ZlLEVGZSl9ZnVuY3Rpb24gRUZlKG4sdCl7bGV0IGU9YmlbdF07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIG9CKGUpfXZhciBURmU9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxERmU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBmZWUobil7cmV0dXJuIG4ucmVwbGFjZShERmUsb3RlKS5yZXBsYWNlKFRGZSxJRmUpfWZ1bmN0aW9uIElGZShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksb3RlKDAsdCxlLGkpfWZ1bmN0aW9uIG90ZShuLHQsZSxpKXtsZXQgcj0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChlKTtvKyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIHJ9ZnVuY3Rpb24gbWVlKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrbi5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT1uLnByZWNpc2lvbiYmKHQrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLHR9ZnVuY3Rpb24ga0ZlKG4sdCxlLGkpe2xldCBiLE0scj1uLmdldENvbnRleHQoKSxvPWUuZGVmaW5lcyxzPWUudmVydGV4U2hhZGVyLGE9ZS5mcmFnbWVudFNoYWRlcixsPWZ1bmN0aW9uKG4pe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIG4uc2hhZG93TWFwVHlwZT09PWplZT90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOm4uc2hhZG93TWFwVHlwZT09PVNBZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09bXgmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fShlKSxjPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIFd4OmNhc2UgcXg6dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBYSTpjYXNlIHVWOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYifXJldHVybiB0fShlKSxkPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIHF4OmNhc2UgdVY6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiJ9cmV0dXJuIHR9KGUpLHU9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIFlJOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBXQWU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBxQWU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCJ9cmV0dXJuIHR9KGUpLHA9ZS5pc1dlYkdMMj8iIjpmdW5jdGlvbihuKXtyZXR1cm5bbi5leHRlbnNpb25EZXJpdmF0aXZlc3x8bi5lbnZNYXBDdWJlVVZ8fG4uYnVtcE1hcHx8bi50YW5nZW50U3BhY2VOb3JtYWxNYXB8fG4uY2xlYXJjb2F0Tm9ybWFsTWFwfHxuLmZsYXRTaGFkaW5nfHwicGh5c2ljYWwiPT09bi5zaGFkZXJJRD8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChuLmV4dGVuc2lvbkZyYWdEZXB0aHx8bi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmbi5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsbi5leHRlbnNpb25EcmF3QnVmZmVycyYmbi5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwobi5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxuLmVudk1hcHx8bi50cmFuc21pc3Npb24pJiZuLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDogZW5hYmxlIjoiIl0uZmlsdGVyKGh4KS5qb2luKCJcbiIpfShlKSxmPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBpbiBuKXtsZXQgaT1uW2VdOyExIT09aSYmdC5wdXNoKCIjZGVmaW5lICIrZSsiICIraSl9cmV0dXJuIHQuam9pbigiXG4iKX0obyksbT1yLmNyZWF0ZVByb2dyYW0oKSx5PWUuZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrZS5nbHNsVmVyc2lvbisiXG4iOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oYj1bZl0uZmlsdGVyKGh4KS5qb2luKCJcbiIpLGIubGVuZ3RoPjAmJihiKz0iXG4iKSxNPVtwLGZdLmZpbHRlcihoeCkuam9pbigiXG4iKSxNLmxlbmd0aD4wJiYoTSs9IlxuIikpOihiPVttZWUoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZixlLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIitlLm1heEJvbmVzLGUudXNlRm9nJiZlLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixlLnVzZUZvZyYmZS5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixlLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSAiK2Q6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuZGlzcGxhY2VtZW50TWFwJiZlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZS5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixlLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLGUucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGUubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGUuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLGUudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsZS52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixlLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZS51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZS5tb3JwaE5vcm1hbHMmJiExPT09ZS5mbGF0U2hhZGluZz8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixlLm1vcnBoVGFyZ2V0cyYmZS5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrZS5tb3JwaFRhcmdldHNDb3VudDoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiXHRhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCJcdGF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIlx0YXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCJcdGF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiXHRhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCJcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCJcdCNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCJcdCNlbHNlIiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCJcdCNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCJcdGF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIiwiXG4iXS5maWx0ZXIoaHgpLmpvaW4oIlxuIiksTT1bcCxtZWUoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZixlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrZDoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsZS5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLGUuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsZS5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLGUudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLGUudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLGUudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLGUuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9yc3x8ZS5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLGUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLGUuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixlLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixlLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixlLnRvbmVNYXBwaW5nIT09ZnA/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixlLnRvbmVNYXBwaW5nIT09ZnA/YmkudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixlLnRvbmVNYXBwaW5nIT09ZnA/eEZlKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixiaS5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx5RmUoImxpbmVhclRvT3V0cHV0VGV4ZWwiLGUub3V0cHV0RW5jb2RpbmcpLGUuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIitlLmRlcHRoUGFja2luZzoiIiwiXG4iXS5maWx0ZXIoaHgpLmpvaW4oIlxuIikpLHM9b0Iocykscz11ZWUocyxlKSxzPXBlZShzLGUpLGE9b0IoYSksYT11ZWUoYSxlKSxhPXBlZShhLGUpLHM9ZmVlKHMpLGE9ZmVlKGEpLGUuaXNXZWJHTDImJiEwIT09ZS5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoeT0iI3ZlcnNpb24gMzAwIGVzXG4iLGI9WyJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsiLCIjZGVmaW5lIGF0dHJpYnV0ZSBpbiIsIiNkZWZpbmUgdmFyeWluZyBvdXQiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIl0uam9pbigiXG4iKSsiXG4iK2IsTT1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PU4kPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09TiQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oIlxuIikrIlxuIitNKTtsZXQgdGUsSyxSPXkrTSthLEE9Y2VlKHIsMzU2MzMseStiK3MpLFY9Y2VlKHIsMzU2MzIsUik7aWYoci5hdHRhY2hTaGFkZXIobSxBKSxyLmF0dGFjaFNoYWRlcihtLFYpLHZvaWQgMCE9PWUuaW5kZXgwQXR0cmlidXRlTmFtZT9yLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsZS5pbmRleDBBdHRyaWJ1dGVOYW1lKTohMD09PWUubW9ycGhUYXJnZXRzJiZyLmJpbmRBdHRyaWJMb2NhdGlvbihtLDAsInBvc2l0aW9uIiksci5saW5rUHJvZ3JhbShtKSxuLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgeGU9ci5nZXRQcm9ncmFtSW5mb0xvZyhtKS50cmltKCksWGU9ci5nZXRTaGFkZXJJbmZvTG9nKEEpLnRyaW0oKSxEZT1yLmdldFNoYWRlckluZm9Mb2coVikudHJpbSgpLEQ9ITAscmU9ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIobSwzNTcxNCkpe0Q9ITE7bGV0IGNlPWRlZShyLEEsInZlcnRleCIpLGZlPWRlZShyLFYsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihtLDM1NzE1KSsiXG5cblByb2dyYW0gSW5mbyBMb2c6ICIreGUrIlxuIitjZSsiXG4iK2ZlKX1lbHNlIiIhPT14ZT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogUHJvZ3JhbSBJbmZvIExvZzoiLHhlKTooIiI9PT1YZXx8IiI9PT1EZSkmJihyZT0hMSk7cmUmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpELHByb2dyYW1Mb2c6eGUsdmVydGV4U2hhZGVyOntsb2c6WGUscHJlZml4OmJ9LGZyYWdtZW50U2hhZGVyOntsb2c6RGUscHJlZml4Ok19fSl9cmV0dXJuIHIuZGVsZXRlU2hhZGVyKEEpLHIuZGVsZXRlU2hhZGVyKFYpLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGUmJih0ZT1uZXcgZ3AocixtKSksdGV9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1LJiYoSz1mdW5jdGlvbihuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBvPW4uZ2V0QWN0aXZlQXR0cmliKHQscikscz1vLm5hbWUsYT0xOzM1Njc0PT09by50eXBlJiYoYT0yKSwzNTY3NT09PW8udHlwZSYmKGE9MyksMzU2NzY9PT1vLnR5cGUmJihhPTQpLGVbc109e3R5cGU6by50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxzKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9KHIsbSkpLEt9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0obSksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPV9GZSsrLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT1tLHRoaXMudmVydGV4U2hhZGVyPUEsdGhpcy5mcmFnbWVudFNoYWRlcj1WLHRoaXN9dmFyIEZGZT0wLHNCPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSkscz10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09cy5oYXMocikmJihzLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PXMuaGFzKG8pJiYocy5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IGFCO2Uuc2V0KHQsaSl9cmV0dXJuIGUuZ2V0KHQpfX0sYUI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPUZGZSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBORmUobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IENJLGw9bmV3IHNCLGM9W10sZD1yLmlzV2ViR0wyLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHA9ci5mbG9hdFZlcnRleFRleHR1cmVzLGY9ci5tYXhWZXJ0ZXhVbmlmb3JtcyxtPXIudmVydGV4VGV4dHVyZXMsYj1yLnByZWNpc2lvbixNPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24oRCxyZSxjZSxmZSxiZSl7bGV0IE5lLGx0LE10LHB0LG5lPWZlLmZvZyxwZT0oRC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KEQuZW52TWFwfHwoRC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2ZlLmVudmlyb25tZW50Om51bGwpKSxqZT1NW0QudHlwZV0sQ2U9YmUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihEKXtsZXQgY2U9RC5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgYmU9TWF0aC5mbG9vcigoZi0yMCkvNCksbmU9TWF0aC5taW4oYmUsY2UubGVuZ3RoKTtyZXR1cm4gbmU8Y2UubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK2NlLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK25lKyIuIiksMCk6bmV9fShiZSk6MDtpZihudWxsIT09RC5wcmVjaXNpb24mJihiPXIuZ2V0TWF4UHJlY2lzaW9uKEQucHJlY2lzaW9uKSxiIT09RC5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6IixELnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLGIsImluc3RlYWQuIikpLGplKXtsZXQgdmU9cWNbamVdO05lPXZlLnZlcnRleFNoYWRlcixsdD12ZS5mcmFnbWVudFNoYWRlcn1lbHNlIE5lPUQudmVydGV4U2hhZGVyLGx0PUQuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoRCksTXQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRChEKSxwdD1sLmdldEZyYWdtZW50U2hhZGVySUQoRCk7bGV0IE9lPW4uZ2V0UmVuZGVyVGFyZ2V0KCksd3Q9RC5jbGVhcmNvYXQ+MDtyZXR1cm57aXNXZWJHTDI6ZCxzaGFkZXJJRDpqZSxzaGFkZXJOYW1lOkQudHlwZSx2ZXJ0ZXhTaGFkZXI6TmUsZnJhZ21lbnRTaGFkZXI6bHQsZGVmaW5lczpELmRlZmluZXMsY3VzdG9tVmVydGV4U2hhZGVySUQ6TXQsY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDpwdCxpc1Jhd1NoYWRlck1hdGVyaWFsOiEwPT09RC5pc1Jhd1NoYWRlck1hdGVyaWFsLGdsc2xWZXJzaW9uOkQuZ2xzbFZlcnNpb24scHJlY2lzaW9uOmIsaW5zdGFuY2luZzohMD09PWJlLmlzSW5zdGFuY2VkTWVzaCxpbnN0YW5jaW5nQ29sb3I6ITA9PT1iZS5pc0luc3RhbmNlZE1lc2gmJm51bGwhPT1iZS5pbnN0YW5jZUNvbG9yLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6bSxvdXRwdXRFbmNvZGluZzpudWxsPT09T2U/bi5vdXRwdXRFbmNvZGluZzohMD09PU9lLmlzWFJSZW5kZXJUYXJnZXQ/T2UudGV4dHVyZS5lbmNvZGluZzpfcCxtYXA6ISFELm1hcCxtYXRjYXA6ISFELm1hdGNhcCxlbnZNYXA6ISFwZSxlbnZNYXBNb2RlOnBlJiZwZS5tYXBwaW5nLGVudk1hcEN1YmVVVjohIXBlJiYocGUubWFwcGluZz09PVhJfHxwZS5tYXBwaW5nPT09dVYpLGxpZ2h0TWFwOiEhRC5saWdodE1hcCxhb01hcDohIUQuYW9NYXAsZW1pc3NpdmVNYXA6ISFELmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISFELmJ1bXBNYXAsbm9ybWFsTWFwOiEhRC5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6RC5ub3JtYWxNYXBUeXBlPT09dlJlLHRhbmdlbnRTcGFjZU5vcm1hbE1hcDpELm5vcm1hbE1hcFR5cGU9PT1vXyxkZWNvZGVWaWRlb1RleHR1cmU6ISFELm1hcCYmITA9PT1ELm1hcC5pc1ZpZGVvVGV4dHVyZSYmRC5tYXAuZW5jb2Rpbmc9PT1BcixjbGVhcmNvYXQ6d3QsY2xlYXJjb2F0TWFwOnd0JiYhIUQuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDp3dCYmISFELmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6d3QmJiEhRC5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhRC5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhRC5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhRC5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISFELnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEhRC5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEhRC5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEhRC5hbHBoYU1hcCxhbHBoYVRlc3Q6RC5hbHBoYVRlc3Q+MCxhbHBoYVdyaXRlOkQuYWxwaGFXcml0ZXx8RC50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIUQuZ3JhZGllbnRNYXAsc2hlZW46RC5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISFELnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISFELnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjpELnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIUQudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIUQudGhpY2tuZXNzTWFwLGNvbWJpbmU6RC5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhRC5ub3JtYWxNYXAmJiEhYmUuZ2VvbWV0cnkmJiEhYmUuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpELnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6ITA9PT1ELnZlcnRleENvbG9ycyYmISFiZS5nZW9tZXRyeSYmISFiZS5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09YmUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSx2ZXJ0ZXhVdnM6ISEoRC5tYXB8fEQuYnVtcE1hcHx8RC5ub3JtYWxNYXB8fEQuc3BlY3VsYXJNYXB8fEQuYWxwaGFNYXB8fEQuZW1pc3NpdmVNYXB8fEQucm91Z2huZXNzTWFwfHxELm1ldGFsbmVzc01hcHx8RC5jbGVhcmNvYXRNYXB8fEQuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHxELmNsZWFyY29hdE5vcm1hbE1hcHx8RC5kaXNwbGFjZW1lbnRNYXB8fEQudHJhbnNtaXNzaW9uTWFwfHxELnRoaWNrbmVzc01hcHx8RC5zcGVjdWxhckludGVuc2l0eU1hcHx8RC5zcGVjdWxhckNvbG9yTWFwfHxELnNoZWVuQ29sb3JNYXB8fEQuc2hlZW5Sb3VnaG5lc3NNYXApLHV2c1ZlcnRleE9ubHk6IShELm1hcHx8RC5idW1wTWFwfHxELm5vcm1hbE1hcHx8RC5zcGVjdWxhck1hcHx8RC5hbHBoYU1hcHx8RC5lbWlzc2l2ZU1hcHx8RC5yb3VnaG5lc3NNYXB8fEQubWV0YWxuZXNzTWFwfHxELmNsZWFyY29hdE5vcm1hbE1hcHx8RC50cmFuc21pc3Npb24+MHx8RC50cmFuc21pc3Npb25NYXB8fEQudGhpY2tuZXNzTWFwfHxELnNwZWN1bGFySW50ZW5zaXR5TWFwfHxELnNwZWN1bGFyQ29sb3JNYXB8fEQuc2hlZW4+MHx8RC5zaGVlbkNvbG9yTWFwfHxELnNoZWVuUm91Z2huZXNzTWFwfHwhRC5kaXNwbGFjZW1lbnRNYXApLGZvZzohIW5lLHVzZUZvZzpELmZvZyxmb2dFeHAyOm5lJiZuZS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFELmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpELnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsc2tpbm5pbmc6ITA9PT1iZS5pc1NraW5uZWRNZXNoJiZDZT4wLG1heEJvbmVzOkNlLHVzZVZlcnRleFRleHR1cmU6cCxtb3JwaFRhcmdldHM6ISFiZS5nZW9tZXRyeSYmISFiZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhYmUuZ2VvbWV0cnkmJiEhYmUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDpiZS5nZW9tZXRyeSYmYmUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP2JlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6cmUuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOnJlLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOnJlLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOnJlLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOnJlLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpyZS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6cmUucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6cmUuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6cy5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpzLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6RC5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZjZS5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOm4uc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6RC50b25lTWFwcGVkP24udG9uZU1hcHBpbmc6ZnAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6RC5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6RC5zaWRlPT09cTAsZmxpcFNpZGVkOkQuc2lkZT09PWdvLGRlcHRoUGFja2luZzp2b2lkIDAhPT1ELmRlcHRoUGFja2luZyYmRC5kZXB0aFBhY2tpbmcsaW5kZXgwQXR0cmlidXRlTmFtZTpELmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6RC5leHRlbnNpb25zJiZELmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOkQuZXh0ZW5zaW9ucyYmRC5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczpELmV4dGVuc2lvbnMmJkQuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOkQuZXh0ZW5zaW9ucyYmRC5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6ZHx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczpkfHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOmR8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OkQuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fSxnZXRQcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24oRCl7bGV0IHJlPVtdO2lmKEQuc2hhZGVySUQ/cmUucHVzaChELnNoYWRlcklEKToocmUucHVzaChELmN1c3RvbVZlcnRleFNoYWRlcklEKSxyZS5wdXNoKEQuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHZvaWQgMCE9PUQuZGVmaW5lcylmb3IobGV0IGNlIGluIEQuZGVmaW5lcylyZS5wdXNoKGNlKSxyZS5wdXNoKEQuZGVmaW5lc1tjZV0pO3JldHVybiExPT09RC5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoZnVuY3Rpb24oRCxyZSl7RC5wdXNoKHJlLnByZWNpc2lvbiksRC5wdXNoKHJlLm91dHB1dEVuY29kaW5nKSxELnB1c2gocmUuZW52TWFwTW9kZSksRC5wdXNoKHJlLmNvbWJpbmUpLEQucHVzaChyZS52ZXJ0ZXhVdnMpLEQucHVzaChyZS5mb2dFeHAyKSxELnB1c2gocmUuc2l6ZUF0dGVudWF0aW9uKSxELnB1c2gocmUubWF4Qm9uZXMpLEQucHVzaChyZS5tb3JwaFRhcmdldHNDb3VudCksRC5wdXNoKHJlLm51bURpckxpZ2h0cyksRC5wdXNoKHJlLm51bVBvaW50TGlnaHRzKSxELnB1c2gocmUubnVtU3BvdExpZ2h0cyksRC5wdXNoKHJlLm51bUhlbWlMaWdodHMpLEQucHVzaChyZS5udW1SZWN0QXJlYUxpZ2h0cyksRC5wdXNoKHJlLm51bURpckxpZ2h0U2hhZG93cyksRC5wdXNoKHJlLm51bVBvaW50TGlnaHRTaGFkb3dzKSxELnB1c2gocmUubnVtU3BvdExpZ2h0U2hhZG93cyksRC5wdXNoKHJlLnNoYWRvd01hcFR5cGUpLEQucHVzaChyZS50b25lTWFwcGluZyksRC5wdXNoKHJlLm51bUNsaXBwaW5nUGxhbmVzKSxELnB1c2gocmUubnVtQ2xpcEludGVyc2VjdGlvbiksRC5wdXNoKHJlLmFscGhhV3JpdGUpfShyZSxEKSxmdW5jdGlvbihELHJlKXthLmRpc2FibGVBbGwoKSxyZS5pc1dlYkdMMiYmYS5lbmFibGUoMCkscmUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSkscmUuaW5zdGFuY2luZyYmYS5lbmFibGUoMikscmUuaW5zdGFuY2luZ0NvbG9yJiZhLmVuYWJsZSgzKSxyZS5tYXAmJmEuZW5hYmxlKDQpLHJlLm1hdGNhcCYmYS5lbmFibGUoNSkscmUuZW52TWFwJiZhLmVuYWJsZSg2KSxyZS5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLHJlLmxpZ2h0TWFwJiZhLmVuYWJsZSg4KSxyZS5hb01hcCYmYS5lbmFibGUoOSkscmUuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxyZS5idW1wTWFwJiZhLmVuYWJsZSgxMSkscmUubm9ybWFsTWFwJiZhLmVuYWJsZSgxMikscmUub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxyZS50YW5nZW50U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDE0KSxyZS5jbGVhcmNvYXQmJmEuZW5hYmxlKDE1KSxyZS5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxyZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDE3KSxyZS5jbGVhcmNvYXROb3JtYWxNYXAmJmEuZW5hYmxlKDE4KSxyZS5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxyZS5zcGVjdWxhck1hcCYmYS5lbmFibGUoMjApLHJlLnJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLHJlLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLHJlLmdyYWRpZW50TWFwJiZhLmVuYWJsZSgyMykscmUuYWxwaGFNYXAmJmEuZW5hYmxlKDI0KSxyZS5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxyZS52ZXJ0ZXhDb2xvcnMmJmEuZW5hYmxlKDI2KSxyZS52ZXJ0ZXhBbHBoYXMmJmEuZW5hYmxlKDI3KSxyZS52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxyZS52ZXJ0ZXhUYW5nZW50cyYmYS5lbmFibGUoMjkpLHJlLnV2c1ZlcnRleE9ubHkmJmEuZW5hYmxlKDMwKSxyZS5mb2cmJmEuZW5hYmxlKDMxKSxELnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxyZS51c2VGb2cmJmEuZW5hYmxlKDApLHJlLmZsYXRTaGFkaW5nJiZhLmVuYWJsZSgxKSxyZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxyZS5za2lubmluZyYmYS5lbmFibGUoMykscmUudXNlVmVydGV4VGV4dHVyZSYmYS5lbmFibGUoNCkscmUubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxyZS5tb3JwaE5vcm1hbHMmJmEuZW5hYmxlKDYpLHJlLnByZW11bHRpcGxpZWRBbHBoYSYmYS5lbmFibGUoNykscmUuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCkscmUucGh5c2ljYWxseUNvcnJlY3RMaWdodHMmJmEuZW5hYmxlKDkpLHJlLmRvdWJsZVNpZGVkJiZhLmVuYWJsZSgxMCkscmUuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSkscmUuZGVwdGhQYWNraW5nJiZhLmVuYWJsZSgxMikscmUuZGl0aGVyaW5nJiZhLmVuYWJsZSgxMykscmUuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxyZS5zcGVjdWxhckNvbG9yTWFwJiZhLmVuYWJsZSgxNSkscmUudHJhbnNtaXNzaW9uJiZhLmVuYWJsZSgxNikscmUudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNykscmUudGhpY2tuZXNzTWFwJiZhLmVuYWJsZSgxOCkscmUuc2hlZW4mJmEuZW5hYmxlKDE5KSxyZS5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCkscmUuc2hlZW5Sb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxyZS5kZWNvZGVWaWRlb1RleHR1cmUmJmEuZW5hYmxlKDIyKSxELnB1c2goYS5tYXNrKX0ocmUsRCkscmUucHVzaChuLm91dHB1dEVuY29kaW5nKSkscmUucHVzaChELmN1c3RvbVByb2dyYW1DYWNoZUtleSkscmUuam9pbigpfSxnZXRVbmlmb3JtczpmdW5jdGlvbihEKXtsZXQgY2UscmU9TVtELnR5cGVdO3JldHVybiBjZT1yZT9rUmUuY2xvbmUocWNbcmVdLnVuaWZvcm1zKTpELnVuaWZvcm1zLGNlfSxhY3F1aXJlUHJvZ3JhbTpmdW5jdGlvbihELHJlKXtsZXQgY2U7Zm9yKGxldCBmZT0wLGJlPWMubGVuZ3RoO2ZlPGJlO2ZlKyspe2xldCBuZT1jW2ZlXTtpZihuZS5jYWNoZUtleT09PXJlKXtjZT1uZSwrK2NlLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9bmV3IGtGZShuLHJlLEQsbyksYy5wdXNoKGNlKSksY2V9LHJlbGVhc2VQcm9ncmFtOmZ1bmN0aW9uKEQpe2lmKDA9PS0tRC51c2VkVGltZXMpe2xldCByZT1jLmluZGV4T2YoRCk7Y1tyZV09Y1tjLmxlbmd0aC0xXSxjLnBvcCgpLEQuZGVzdHJveSgpfX0scmVsZWFzZVNoYWRlckNhY2hlOmZ1bmN0aW9uKEQpe2wucmVtb3ZlKEQpfSxwcm9ncmFtczpjLGRpc3Bvc2U6ZnVuY3Rpb24oKXtsLmRpc3Bvc2UoKX19fWZ1bmN0aW9uIExGZSgpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24obyl7bGV0IHM9bi5nZXQobyk7cmV0dXJuIHZvaWQgMD09PXMmJihzPXt9LG4uc2V0KG8scykpLHN9LHJlbW92ZTpmdW5jdGlvbihvKXtuLmRlbGV0ZShvKX0sdXBkYXRlOmZ1bmN0aW9uKG8scyxhKXtuLmdldChvKVtzXT1hfSxkaXNwb3NlOmZ1bmN0aW9uKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIEJGZShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBoZWUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ueiE9PXQuej90Lnotbi56Om4uaWQtdC5pZH1mdW5jdGlvbiBnZWUoKXtsZXQgbj1bXSx0PTAsZT1bXSxpPVtdLHI9W107ZnVuY3Rpb24gcyh1LHAsZixtLGIsTSl7bGV0IHk9blt0XTtyZXR1cm4gdm9pZCAwPT09eT8oeT17aWQ6dS5pZCxvYmplY3Q6dSxnZW9tZXRyeTpwLG1hdGVyaWFsOmYsZ3JvdXBPcmRlcjptLHJlbmRlck9yZGVyOnUucmVuZGVyT3JkZXIsejpiLGdyb3VwOk19LG5bdF09eSk6KHkuaWQ9dS5pZCx5Lm9iamVjdD11LHkuZ2VvbWV0cnk9cCx5Lm1hdGVyaWFsPWYseS5ncm91cE9yZGVyPW0seS5yZW5kZXJPcmRlcj11LnJlbmRlck9yZGVyLHkuej1iLHkuZ3JvdXA9TSksdCsrLHl9cmV0dXJue29wYXF1ZTplLHRyYW5zbWlzc2l2ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpmdW5jdGlvbigpe3Q9MCxlLmxlbmd0aD0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH0scHVzaDpmdW5jdGlvbih1LHAsZixtLGIsTSl7bGV0IHk9cyh1LHAsZixtLGIsTSk7Zi50cmFuc21pc3Npb24+MD9pLnB1c2goeSk6ITA9PT1mLnRyYW5zcGFyZW50P3IucHVzaCh5KTplLnB1c2goeSl9LHVuc2hpZnQ6ZnVuY3Rpb24odSxwLGYsbSxiLE0pe2xldCB5PXModSxwLGYsbSxiLE0pO2YudHJhbnNtaXNzaW9uPjA/aS51bnNoaWZ0KHkpOiEwPT09Zi50cmFuc3BhcmVudD9yLnVuc2hpZnQoeSk6ZS51bnNoaWZ0KHkpfSxmaW5pc2g6ZnVuY3Rpb24oKXtmb3IobGV0IHU9dCxwPW4ubGVuZ3RoO3U8cDt1Kyspe2xldCBmPW5bdV07aWYobnVsbD09PWYuaWQpYnJlYWs7Zi5pZD1udWxsLGYub2JqZWN0PW51bGwsZi5nZW9tZXRyeT1udWxsLGYubWF0ZXJpYWw9bnVsbCxmLmdyb3VwPW51bGx9fSxzb3J0OmZ1bmN0aW9uKHUscCl7ZS5sZW5ndGg+MSYmZS5zb3J0KHV8fEJGZSksaS5sZW5ndGg+MSYmaS5zb3J0KHB8fGhlZSksci5sZW5ndGg+MSYmci5zb3J0KHB8fGhlZSl9fX1mdW5jdGlvbiBWRmUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGkscil7bGV0IG87cmV0dXJuITE9PT1uLmhhcyhpKT8obz1uZXcgZ2VlLG4uc2V0KGksW29dKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhvPW5ldyBnZWUsbi5nZXQoaSkucHVzaChvKSk6bz1uLmdldChpKVtyXSxvfSxkaXNwb3NlOmZ1bmN0aW9uKCl7bj1uZXcgV2Vha01hcH19fWZ1bmN0aW9uIEhGZSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09blt0LmlkXSlyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxjb2xvcjpuZXcgYW59O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgJCxkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgJCxjb2xvcjpuZXcgYW4sZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyAkLHNreUNvbG9yOm5ldyBhbixncm91bmRDb2xvcjpuZXcgYW59O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6ZT17Y29sb3I6bmV3IGFuLHBvc2l0aW9uOm5ldyAkLGhhbGZXaWR0aDpuZXcgJCxoYWxmSGVpZ2h0Om5ldyAkfX1yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgVUZlPTA7ZnVuY3Rpb24gakZlKG4sdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShuLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBHRmUobix0KXtsZXQgZT1uZXcgSEZlLGk9ZnVuY3Rpb24oKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpjYXNlIlNwb3RMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyAkZX07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3ICRlLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfX1yZXR1cm4gblt0LmlkXT1lLGV9fX0oKSxyPXt2ZXJzaW9uOjAsaGFzaDp7ZGlyZWN0aW9uYWxMZW5ndGg6LTEscG9pbnRMZW5ndGg6LTEsc3BvdExlbmd0aDotMSxyZWN0QXJlYUxlbmd0aDotMSxoZW1pTGVuZ3RoOi0xLG51bURpcmVjdGlvbmFsU2hhZG93czotMSxudW1Qb2ludFNoYWRvd3M6LTEsbnVtU3BvdFNoYWRvd3M6LTF9LGFtYmllbnQ6WzAsMCwwXSxwcm9iZTpbXSxkaXJlY3Rpb25hbDpbXSxkaXJlY3Rpb25hbFNoYWRvdzpbXSxkaXJlY3Rpb25hbFNoYWRvd01hcDpbXSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDpbXSxzcG90OltdLHNwb3RTaGFkb3c6W10sc3BvdFNoYWRvd01hcDpbXSxzcG90U2hhZG93TWF0cml4OltdLHJlY3RBcmVhOltdLHJlY3RBcmVhTFRDMTpudWxsLHJlY3RBcmVhTFRDMjpudWxsLHBvaW50OltdLHBvaW50U2hhZG93OltdLHBvaW50U2hhZG93TWFwOltdLHBvaW50U2hhZG93TWF0cml4OltdLGhlbWk6W119O2ZvcihsZXQgZD0wO2Q8OTtkKyspci5wcm9iZS5wdXNoKG5ldyAkKTtsZXQgbz1uZXcgJCxzPW5ldyB4bixhPW5ldyB4bjtyZXR1cm57c2V0dXA6ZnVuY3Rpb24oZCx1KXtsZXQgcD0wLGY9MCxtPTA7Zm9yKGxldCBYZT0wO1hlPDk7WGUrKylyLnByb2JlW1hlXS5zZXQoMCwwLDApO2xldCBiPTAsTT0wLHk9MCx4PTAsUj0wLEE9MCxWPTAsdGU9MDtkLnNvcnQoakZlKTtsZXQgSz0hMCE9PXU/TWF0aC5QSToxO2ZvcihsZXQgWGU9MCxEZT1kLmxlbmd0aDtYZTxEZTtYZSsrKXtsZXQgRD1kW1hlXSxyZT1ELmNvbG9yLGNlPUQuaW50ZW5zaXR5LGZlPUQuZGlzdGFuY2UsYmU9RC5zaGFkb3cmJkQuc2hhZG93Lm1hcD9ELnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKEQuaXNBbWJpZW50TGlnaHQpcCs9cmUucipjZSpLLGYrPXJlLmcqY2UqSyxtKz1yZS5iKmNlKks7ZWxzZSBpZihELmlzTGlnaHRQcm9iZSlmb3IobGV0IG5lPTA7bmU8OTtuZSsrKXIucHJvYmVbbmVdLmFkZFNjYWxlZFZlY3RvcihELnNoLmNvZWZmaWNpZW50c1tuZV0sY2UpO2Vsc2UgaWYoRC5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBuZT1lLmdldChEKTtpZihuZS5jb2xvci5jb3B5KEQuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQuaW50ZW5zaXR5KkspLEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1tiXT1wZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW2JdPWJlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbYl09RC5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW2JdPW5lLGIrK31lbHNlIGlmKEQuaXNTcG90TGlnaHQpe2xldCBuZT1lLmdldChEKTtpZihuZS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oRC5tYXRyaXhXb3JsZCksbmUuY29sb3IuY29weShyZSkubXVsdGlwbHlTY2FsYXIoY2UqSyksbmUuZGlzdGFuY2U9ZmUsbmUuY29uZUNvcz1NYXRoLmNvcyhELmFuZ2xlKSxuZS5wZW51bWJyYUNvcz1NYXRoLmNvcyhELmFuZ2xlKigxLUQucGVudW1icmEpKSxuZS5kZWNheT1ELmRlY2F5LEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUsci5zcG90U2hhZG93W3ldPXBlLHIuc3BvdFNoYWRvd01hcFt5XT1iZSxyLnNwb3RTaGFkb3dNYXRyaXhbeV09RC5zaGFkb3cubWF0cml4LHRlKyt9ci5zcG90W3ldPW5lLHkrK31lbHNlIGlmKEQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgbmU9ZS5nZXQoRCk7bmUuY29sb3IuY29weShyZSkubXVsdGlwbHlTY2FsYXIoY2UpLG5lLmhhbGZXaWR0aC5zZXQoLjUqRC53aWR0aCwwLDApLG5lLmhhbGZIZWlnaHQuc2V0KDAsLjUqRC5oZWlnaHQsMCksci5yZWN0QXJlYVt4XT1uZSx4Kyt9ZWxzZSBpZihELmlzUG9pbnRMaWdodCl7bGV0IG5lPWUuZ2V0KEQpO2lmKG5lLmNvbG9yLmNvcHkoRC5jb2xvcikubXVsdGlwbHlTY2FsYXIoRC5pbnRlbnNpdHkqSyksbmUuZGlzdGFuY2U9RC5kaXN0YW5jZSxuZS5kZWNheT1ELmRlY2F5LEQuY2FzdFNoYWRvdyl7bGV0IGRlPUQuc2hhZG93LHBlPWkuZ2V0KEQpO3BlLnNoYWRvd0JpYXM9ZGUuYmlhcyxwZS5zaGFkb3dOb3JtYWxCaWFzPWRlLm5vcm1hbEJpYXMscGUuc2hhZG93UmFkaXVzPWRlLnJhZGl1cyxwZS5zaGFkb3dNYXBTaXplPWRlLm1hcFNpemUscGUuc2hhZG93Q2FtZXJhTmVhcj1kZS5jYW1lcmEubmVhcixwZS5zaGFkb3dDYW1lcmFGYXI9ZGUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W01dPXBlLHIucG9pbnRTaGFkb3dNYXBbTV09YmUsci5wb2ludFNoYWRvd01hdHJpeFtNXT1ELnNoYWRvdy5tYXRyaXgsVisrfXIucG9pbnRbTV09bmUsTSsrfWVsc2UgaWYoRC5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IG5lPWUuZ2V0KEQpO25lLnNreUNvbG9yLmNvcHkoRC5jb2xvcikubXVsdGlwbHlTY2FsYXIoY2UqSyksbmUuZ3JvdW5kQ29sb3IuY29weShELmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihjZSpLKSxyLmhlbWlbUl09bmUsUisrfX14PjAmJih0LmlzV2ViR0wyfHwhMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT8oci5yZWN0QXJlYUxUQzE9SXQuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9SXQuTFRDX0ZMT0FUXzIpOiEwPT09bi5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPUl0LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9SXQuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1wLHIuYW1iaWVudFsxXT1mLHIuYW1iaWVudFsyXT1tO2xldCB4ZT1yLmhhc2g7KHhlLmRpcmVjdGlvbmFsTGVuZ3RoIT09Ynx8eGUucG9pbnRMZW5ndGghPT1NfHx4ZS5zcG90TGVuZ3RoIT09eXx8eGUucmVjdEFyZWFMZW5ndGghPT14fHx4ZS5oZW1pTGVuZ3RoIT09Unx8eGUubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09QXx8eGUubnVtUG9pbnRTaGFkb3dzIT09Vnx8eGUubnVtU3BvdFNoYWRvd3MhPT10ZSkmJihyLmRpcmVjdGlvbmFsLmxlbmd0aD1iLHIuc3BvdC5sZW5ndGg9eSxyLnJlY3RBcmVhLmxlbmd0aD14LHIucG9pbnQubGVuZ3RoPU0sci5oZW1pLmxlbmd0aD1SLHIuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPUEsci5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9QSxyLnBvaW50U2hhZG93Lmxlbmd0aD1WLHIucG9pbnRTaGFkb3dNYXAubGVuZ3RoPVYsci5zcG90U2hhZG93Lmxlbmd0aD10ZSxyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPXRlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPUEsci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9VixyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPXRlLHhlLmRpcmVjdGlvbmFsTGVuZ3RoPWIseGUucG9pbnRMZW5ndGg9TSx4ZS5zcG90TGVuZ3RoPXkseGUucmVjdEFyZWFMZW5ndGg9eCx4ZS5oZW1pTGVuZ3RoPVIseGUubnVtRGlyZWN0aW9uYWxTaGFkb3dzPUEseGUubnVtUG9pbnRTaGFkb3dzPVYseGUubnVtU3BvdFNoYWRvd3M9dGUsci52ZXJzaW9uPVVGZSsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uKGQsdSl7bGV0IHA9MCxmPTAsbT0wLGI9MCxNPTAseT11Lm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxSPWQubGVuZ3RoO3g8Ujt4Kyspe2xldCBBPWRbeF07aWYoQS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBWPXIuZGlyZWN0aW9uYWxbcF07Vi5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxWLmRpcmVjdGlvbi5zdWIobyksVi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLHArK31lbHNlIGlmKEEuaXNTcG90TGlnaHQpe2xldCBWPXIuc3BvdFttXTtWLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxWLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxWLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS50YXJnZXQubWF0cml4V29ybGQpLFYuZGlyZWN0aW9uLnN1YihvKSxWLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksbSsrfWVsc2UgaWYoQS5pc1JlY3RBcmVhTGlnaHQpe2xldCBWPXIucmVjdEFyZWFbYl07Vi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksVi5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSksYS5pZGVudGl0eSgpLHMuY29weShBLm1hdHJpeFdvcmxkKSxzLnByZW11bHRpcGx5KHkpLGEuZXh0cmFjdFJvdGF0aW9uKHMpLFYuaGFsZldpZHRoLnNldCguNSpBLndpZHRoLDAsMCksVi5oYWxmSGVpZ2h0LnNldCgwLC41KkEuaGVpZ2h0LDApLFYuaGFsZldpZHRoLmFwcGx5TWF0cml4NChhKSxWLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGEpLGIrK31lbHNlIGlmKEEuaXNQb2ludExpZ2h0KXtsZXQgVj1yLnBvaW50W2ZdO1YucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLFYucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLGYrK31lbHNlIGlmKEEuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBWPXIuaGVtaVtNXTtWLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksVi5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLFYuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLE0rK319fSxzdGF0ZTpyfX1mdW5jdGlvbiBfZWUobix0KXtsZXQgZT1uZXcgR0ZlKG4sdCksaT1bXSxyPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6ZX0sc2V0dXBMaWdodHM6ZnVuY3Rpb24odSl7ZS5zZXR1cChpLHUpfSxzZXR1cExpZ2h0c1ZpZXc6ZnVuY3Rpb24odSl7ZS5zZXR1cFZpZXcoaSx1KX0scHVzaExpZ2h0OmZ1bmN0aW9uKHUpe2kucHVzaCh1KX0scHVzaFNoYWRvdzpmdW5jdGlvbih1KXtyLnB1c2godSl9fX1mdW5jdGlvbiBXRmUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8scz0wKXtsZXQgYTtyZXR1cm4hMT09PWUuaGFzKG8pPyhhPW5ldyBfZWUobix0KSxlLnNldChvLFthXSkpOnM+PWUuZ2V0KG8pLmxlbmd0aD8oYT1uZXcgX2VlKG4sdCksZS5nZXQobykucHVzaChhKSk6YT1lLmdldChvKVtzXSxhfSxkaXNwb3NlOmZ1bmN0aW9uKCl7ZT1uZXcgV2Vha01hcH19fXZhciBEST1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtESS5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgSUk9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3ICQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTtJSS5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgcUZlPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsWUZlPSJ1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzcztcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xudW5pZm9ybSBmbG9hdCByYWRpdXM7XG4jaW5jbHVkZSA8cGFja2luZz5cbnZvaWQgbWFpbigpIHtcblx0Y29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApO1xuXHRmbG9hdCBtZWFuID0gMC4wO1xuXHRmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7XG5cdGZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTtcblx0ZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7XG5cdGZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkge1xuXHRcdGZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTtcblx0XHQjaWZkZWYgSE9SSVpPTlRBTF9QQVNTXG5cdFx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRpc3RyaWJ1dGlvbi54O1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54O1xuXHRcdCNlbHNlXG5cdFx0XHRmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7XG5cdFx0XHRtZWFuICs9IGRlcHRoO1xuXHRcdFx0c3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7XG5cdFx0I2VuZGlmXG5cdH1cblx0bWVhbiA9IG1lYW4gLyBzYW1wbGVzO1xuXHRzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzO1xuXHRmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTtcblx0Z2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTtcbn0iO2Z1bmN0aW9uIHN0ZShuLHQsZSl7bGV0IGk9bmV3IFowLHI9bmV3ICRlLG89bmV3ICRlLHM9bmV3IFppLGE9bmV3IERJKHtkZXB0aFBhY2tpbmc6YlJlfSksbD1uZXcgSUksYz17fSxkPWUubWF4VGV4dHVyZVNpemUsdT17MDpnbywxOnl4LDI6cTB9LHA9bmV3IEdkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyAkZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOnFGZSxmcmFnbWVudFNoYWRlcjpZRmV9KSxmPXAuY2xvbmUoKTtmLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IG09bmV3IFVpO20uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFByKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgYj1uZXcgYW8obSxwKSxNPXRoaXM7ZnVuY3Rpb24geShBLFYpe2xldCB0ZT10LnVwZGF0ZShiKTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsZi5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxmLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChWLG51bGwsdGUscCxiLG51bGwpLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFYsbnVsbCx0ZSxmLGIsbnVsbCl9ZnVuY3Rpb24geChBLFYsdGUsSyx4ZSxYZSxEZSl7bGV0IEQ9bnVsbCxyZT0hMD09PUsuaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoRD12b2lkIDAhPT1yZT9yZTohMD09PUsuaXNQb2ludExpZ2h0P2w6YSxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PXRlLmNsaXBTaGFkb3dzJiYwIT09dGUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHx0ZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT10ZS5kaXNwbGFjZW1lbnRTY2FsZXx8dGUuYWxwaGFNYXAmJnRlLmFscGhhVGVzdD4wKXtsZXQgY2U9RC51dWlkLGZlPXRlLnV1aWQsYmU9Y1tjZV07dm9pZCAwPT09YmUmJihiZT17fSxjW2NlXT1iZSk7bGV0IG5lPWJlW2ZlXTt2b2lkIDA9PT1uZSYmKG5lPUQuY2xvbmUoKSxiZVtmZV09bmUpLEQ9bmV9cmV0dXJuIEQudmlzaWJsZT10ZS52aXNpYmxlLEQud2lyZWZyYW1lPXRlLndpcmVmcmFtZSxELnNpZGU9RGU9PT1teD9udWxsIT09dGUuc2hhZG93U2lkZT90ZS5zaGFkb3dTaWRlOnRlLnNpZGU6bnVsbCE9PXRlLnNoYWRvd1NpZGU/dGUuc2hhZG93U2lkZTp1W3RlLnNpZGVdLEQuYWxwaGFNYXA9dGUuYWxwaGFNYXAsRC5hbHBoYVRlc3Q9dGUuYWxwaGFUZXN0LEQuY2xpcFNoYWRvd3M9dGUuY2xpcFNoYWRvd3MsRC5jbGlwcGluZ1BsYW5lcz10ZS5jbGlwcGluZ1BsYW5lcyxELmNsaXBJbnRlcnNlY3Rpb249dGUuY2xpcEludGVyc2VjdGlvbixELmRpc3BsYWNlbWVudE1hcD10ZS5kaXNwbGFjZW1lbnRNYXAsRC5kaXNwbGFjZW1lbnRTY2FsZT10ZS5kaXNwbGFjZW1lbnRTY2FsZSxELmRpc3BsYWNlbWVudEJpYXM9dGUuZGlzcGxhY2VtZW50QmlhcyxELndpcmVmcmFtZUxpbmV3aWR0aD10ZS53aXJlZnJhbWVMaW5ld2lkdGgsRC5saW5ld2lkdGg9dGUubGluZXdpZHRoLCEwPT09Sy5pc1BvaW50TGlnaHQmJiEwPT09RC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoRC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCksRC5uZWFyRGlzdGFuY2U9eGUsRC5mYXJEaXN0YW5jZT1YZSksRH1mdW5jdGlvbiBSKEEsVix0ZSxLLHhlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChWLmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJnhlPT09bXgpJiYoIUEuZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KEEpKSl7QS5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0ZS5tYXRyaXhXb3JsZEludmVyc2UsQS5tYXRyaXhXb3JsZCk7bGV0IEQ9dC51cGRhdGUoQSkscmU9QS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHJlKSl7bGV0IGNlPUQuZ3JvdXBzO2ZvcihsZXQgZmU9MCxiZT1jZS5sZW5ndGg7ZmU8YmU7ZmUrKyl7bGV0IG5lPWNlW2ZlXSxkZT1yZVtuZS5tYXRlcmlhbEluZGV4XTtpZihkZSYmZGUudmlzaWJsZSl7bGV0IHBlPXgoQSwwLGRlLEssdGUubmVhcix0ZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KHRlLG51bGwsRCxwZSxBLG5lKX19fWVsc2UgaWYocmUudmlzaWJsZSl7bGV0IGNlPXgoQSwwLHJlLEssdGUubmVhcix0ZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KHRlLG51bGwsRCxjZSxBLG51bGwpfX1sZXQgRGU9QS5jaGlsZHJlbjtmb3IobGV0IEQ9MCxyZT1EZS5sZW5ndGg7RDxyZTtEKyspUihEZVtEXSxWLHRlLEsseGUpfXRoaXMuZW5hYmxlZD0hMSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLnR5cGU9amVlLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsVix0ZSl7aWYoITE9PT1NLmVuYWJsZWR8fCExPT09TS5hdXRvVXBkYXRlJiYhMT09PU0ubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IEs9bi5nZXRSZW5kZXJUYXJnZXQoKSx4ZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksWGU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLERlPW4uc3RhdGU7RGUuc2V0QmxlbmRpbmcocHApLERlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoMSwxLDEsMSksRGUuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxEZS5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBEPTAscmU9QS5sZW5ndGg7RDxyZTtEKyspe2xldCBjZT1BW0RdLGZlPWNlLnNoYWRvdztpZih2b2lkIDA9PT1mZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLGNlLCJoYXMgbm8gc2hhZG93LiIpO2NvbnRpbnVlfWlmKCExPT09ZmUuYXV0b1VwZGF0ZSYmITE9PT1mZS5uZWVkc1VwZGF0ZSljb250aW51ZTtyLmNvcHkoZmUubWFwU2l6ZSk7bGV0IGJlPWZlLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoYmUpLG8uY29weShmZS5tYXBTaXplKSwoci54PmR8fHIueT5kKSYmKHIueD5kJiYoby54PU1hdGguZmxvb3IoZC9iZS54KSxyLng9by54KmJlLngsZmUubWFwU2l6ZS54PW8ueCksci55PmQmJihvLnk9TWF0aC5mbG9vcihkL2JlLnkpLHIueT1vLnkqYmUueSxmZS5tYXBTaXplLnk9by55KSksbnVsbD09PWZlLm1hcCYmIWZlLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09bXgpe2xldCBkZT17bWluRmlsdGVyOiRvLG1hZ0ZpbHRlcjokbyxmb3JtYXQ6Z3N9O2ZlLm1hcD1uZXcgSnMoci54LHIueSxkZSksZmUubWFwLnRleHR1cmUubmFtZT1jZS5uYW1lKyIuc2hhZG93TWFwIixmZS5tYXBQYXNzPW5ldyBKcyhyLngsci55LGRlKSxmZS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfW51bGw9PT1mZS5tYXAmJihmZS5tYXA9bmV3IEpzKHIueCxyLnkse21pbkZpbHRlcjpfbyxtYWdGaWx0ZXI6X28sZm9ybWF0OmdzfSksZmUubWFwLnRleHR1cmUubmFtZT1jZS5uYW1lKyIuc2hhZG93TWFwIixmZS5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxuLnNldFJlbmRlclRhcmdldChmZS5tYXApLG4uY2xlYXIoKTtsZXQgbmU9ZmUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgZGU9MDtkZTxuZTtkZSsrKXtsZXQgcGU9ZmUuZ2V0Vmlld3BvcnQoZGUpO3Muc2V0KG8ueCpwZS54LG8ueSpwZS55LG8ueCpwZS56LG8ueSpwZS53KSxEZS52aWV3cG9ydChzKSxmZS51cGRhdGVNYXRyaWNlcyhjZSxkZSksaT1mZS5nZXRGcnVzdHVtKCksUihWLHRlLGZlLmNhbWVyYSxjZSx0aGlzLnR5cGUpfSFmZS5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PW14JiZ5KGZlLHRlKSxmZS5uZWVkc1VwZGF0ZT0hMX1NLm5lZWRzVXBkYXRlPSExLG4uc2V0UmVuZGVyVGFyZ2V0KEsseGUsWGUpfX1mdW5jdGlvbiBYRmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDIsYT1uZXcgZnVuY3Rpb24oKXtsZXQgYWU9ITEsSnQ9bmV3IFppLGp0PW51bGwsVG49bmV3IFppKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFdlKXtqdCE9PVdlJiYhYWUmJihuLmNvbG9yTWFzayhXZSxXZSxXZSxXZSksanQ9V2UpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oV2Upe2FlPVdlfSxzZXRDbGVhcjpmdW5jdGlvbihXZSxibix1aSx1cix6byl7ITA9PT16byYmKFdlKj11cixibio9dXIsdWkqPXVyKSxKdC5zZXQoV2UsYm4sdWksdXIpLCExPT09VG4uZXF1YWxzKEp0KSYmKG4uY2xlYXJDb2xvcihXZSxibix1aSx1ciksVG4uY29weShKdCkpfSxyZXNldDpmdW5jdGlvbigpe2FlPSExLGp0PW51bGwsVG4uc2V0KC0xLDAsMCwwKX19fSxsPW5ldyBmdW5jdGlvbigpe2xldCBhZT0hMSxKdD1udWxsLGp0PW51bGwsVG49bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihXZSl7V2U/T2UoMjkyOSk6QW4oMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oV2Upe0p0IT09V2UmJiFhZSYmKG4uZGVwdGhNYXNrKFdlKSxKdD1XZSl9LHNldEZ1bmM6ZnVuY3Rpb24oV2Upe2lmKGp0IT09V2Upe2lmKFdlKXN3aXRjaChXZSl7Y2FzZSBCQWU6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIFZBZTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgSEFlOm4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSBaMzpuLmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2UgekFlOm4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBVQWU6bi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIGpBZTpuLmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgR0FlOm4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtqdD1XZX19LHNldExvY2tlZDpmdW5jdGlvbihXZSl7YWU9V2V9LHNldENsZWFyOmZ1bmN0aW9uKFdlKXtUbiE9PVdlJiYobi5jbGVhckRlcHRoKFdlKSxUbj1XZSl9LHJlc2V0OmZ1bmN0aW9uKCl7YWU9ITEsSnQ9bnVsbCxqdD1udWxsLFRuPW51bGx9fX0sYz1uZXcgZnVuY3Rpb24oKXtsZXQgYWU9ITEsSnQ9bnVsbCxqdD1udWxsLFRuPW51bGwsV2U9bnVsbCxibj1udWxsLHVpPW51bGwsdXI9bnVsbCx6bz1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKENyKXthZXx8KENyP09lKDI5NjApOkFuKDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihDcil7SnQhPT1DciYmIWFlJiYobi5zdGVuY2lsTWFzayhDciksSnQ9Q3IpfSxzZXRGdW5jOmZ1bmN0aW9uKENyLE1hLHZzKXsoanQhPT1Dcnx8VG4hPT1NYXx8V2UhPT12cykmJihuLnN0ZW5jaWxGdW5jKENyLE1hLHZzKSxqdD1DcixUbj1NYSxXZT12cyl9LHNldE9wOmZ1bmN0aW9uKENyLE1hLHZzKXsoYm4hPT1Dcnx8dWkhPT1NYXx8dXIhPT12cykmJihuLnN0ZW5jaWxPcChDcixNYSx2cyksYm49Q3IsdWk9TWEsdXI9dnMpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oQ3Ipe2FlPUNyfSxzZXRDbGVhcjpmdW5jdGlvbihDcil7em8hPT1DciYmKG4uY2xlYXJTdGVuY2lsKENyKSx6bz1Dcil9LHJlc2V0OmZ1bmN0aW9uKCl7YWU9ITEsSnQ9bnVsbCxqdD1udWxsLFRuPW51bGwsV2U9bnVsbCxibj1udWxsLHVpPW51bGwsdXI9bnVsbCx6bz1udWxsfX19LGQ9e30sdT17fSxwPW5ldyBXZWFrTWFwLGY9W10sbT1udWxsLGI9ITEsTT1udWxsLHk9bnVsbCx4PW51bGwsUj1udWxsLEE9bnVsbCxWPW51bGwsdGU9bnVsbCxLPSExLHhlPW51bGwsWGU9bnVsbCxEZT1udWxsLEQ9bnVsbCxyZT1udWxsLGNlPW4uZ2V0UGFyYW1ldGVyKDM1NjYxKSxmZT0hMSxiZT0wLG5lPW4uZ2V0UGFyYW1ldGVyKDc5MzgpOy0xIT09bmUuaW5kZXhPZigiV2ViR0wiKT8oYmU9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMobmUpWzFdKSxmZT1iZT49MSk6LTEhPT1uZS5pbmRleE9mKCJPcGVuR0wgRVMiKSYmKGJlPXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhuZSlbMV0pLGZlPWJlPj0yKTtsZXQgZGU9bnVsbCxwZT17fSxqZT1uLmdldFBhcmFtZXRlcigzMDg4KSxDZT1uLmdldFBhcmFtZXRlcigyOTc4KSxOZT0obmV3IFppKS5mcm9tQXJyYXkoamUpLGx0PShuZXcgWmkpLmZyb21BcnJheShDZSk7ZnVuY3Rpb24gTXQoYWUsSnQsanQpe2xldCBUbj1uZXcgVWludDhBcnJheSg0KSxXZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKGFlLFdlKSxuLnRleFBhcmFtZXRlcmkoYWUsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKGFlLDEwMjQwLDk3MjgpO2ZvcihsZXQgYm49MDtibjxqdDtibisrKW4udGV4SW1hZ2UyRChKdCtibiwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLFRuKTtyZXR1cm4gV2V9bGV0IHB0PXt9O2Z1bmN0aW9uIE9lKGFlKXshMCE9PWRbYWVdJiYobi5lbmFibGUoYWUpLGRbYWVdPSEwKX1mdW5jdGlvbiBBbihhZSl7ITEhPT1kW2FlXSYmKG4uZGlzYWJsZShhZSksZFthZV09ITEpfXB0WzM1NTNdPU10KDM1NTMsMzU1MywxKSxwdFszNDA2N109TXQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksT2UoMjkyOSksbC5zZXRGdW5jKFozKSxZZSghMSksX3QoYSQpLE9lKDI4ODQpLG9lKHBwKTtsZXQgbXQ9e1tCMF06MzI3NzQsW1RBZV06MzI3NzgsW0RBZV06MzI3Nzl9O2lmKGkpbXRbdSRdPTMyNzc1LG10W3AkXT0zMjc3NjtlbHNle2xldCBhZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT1hZSYmKG10W3UkXT1hZS5NSU5fRVhULG10W3AkXT1hZS5NQVhfRVhUKX1sZXQgZnQ9e1tJQWVdOjAsW0FBZV06MSxbUkFlXTo3NjgsW1dlZV06NzcwLFtMQWVdOjc3NixbRkFlXTo3NzQsW09BZV06NzcyLFtQQWVdOjc2OSxbcWVlXTo3NzEsW05BZV06Nzc1LFtrQWVdOjc3M307ZnVuY3Rpb24gb2UoYWUsSnQsanQsVG4sV2UsYm4sdWksdXIpe2lmKGFlIT09cHApe2lmKCExPT09YiYmKE9lKDMwNDIpLGI9ITApLGFlPT09RUFlKVdlPVdlfHxKdCxibj1ibnx8anQsdWk9dWl8fFRuLChKdCE9PXl8fFdlIT09QSkmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtdFtKdF0sbXRbV2VdKSx5PUp0LEE9V2UpLChqdCE9PXh8fFRuIT09Unx8Ym4hPT1WfHx1aSE9PXRlKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUoZnRbanRdLGZ0W1RuXSxmdFtibl0sZnRbdWldKSx4PWp0LFI9VG4sVj1ibix0ZT11aSksTT1hZSxLPW51bGw7ZWxzZSBpZihhZSE9PU18fHVyIT09Syl7aWYoKHkhPT1CMHx8QSE9PUIwKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCkseT1CMCxBPUIwKSx1cilzd2l0Y2goYWUpe2Nhc2UgZ3g6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBsJDpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgYyQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgZCQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OCwwLDc3MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGFlKX1lbHNlIHN3aXRjaChhZSl7Y2FzZSBneDpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgbCQ6bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgYyQ6bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgZCQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhZSl9eD1udWxsLFI9bnVsbCxWPW51bGwsdGU9bnVsbCxNPWFlLEs9dXJ9fWVsc2UhMD09PWImJihBbigzMDQyKSxiPSExKX1mdW5jdGlvbiBZZShhZSl7eGUhPT1hZSYmKG4uZnJvbnRGYWNlKGFlPzIzMDQ6MjMwNSkseGU9YWUpfWZ1bmN0aW9uIF90KGFlKXthZSE9PU1BZT8oT2UoMjg4NCksYWUhPT1YZSYmbi5jdWxsRmFjZShhZT09PWEkPzEwMjk6YWU9PT13QWU/MTAyODoxMDMyKSk6QW4oMjg4NCksWGU9YWV9ZnVuY3Rpb24gc24oYWUsSnQsanQpe2FlPyhPZSgzMjgyMyksKEQhPT1KdHx8cmUhPT1qdCkmJihuLnBvbHlnb25PZmZzZXQoSnQsanQpLEQ9SnQscmU9anQpKTpBbigzMjgyMyl9ZnVuY3Rpb24gdGkoYWUpe3ZvaWQgMD09PWFlJiYoYWU9MzM5ODQrY2UtMSksZGUhPT1hZSYmKG4uYWN0aXZlVGV4dHVyZShhZSksZGU9YWUpfXJldHVybntidWZmZXJzOntjb2xvcjphLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6T2UsZGlzYWJsZTpBbixiaW5kRnJhbWVidWZmZXI6ZnVuY3Rpb24oYWUsSnQpe3JldHVybiB1W2FlXSE9PUp0JiYobi5iaW5kRnJhbWVidWZmZXIoYWUsSnQpLHVbYWVdPUp0LGkmJigzNjAwOT09PWFlJiYodVszNjE2MF09SnQpLDM2MTYwPT09YWUmJih1WzM2MDA5XT1KdCkpLCEwKX0sZHJhd0J1ZmZlcnM6ZnVuY3Rpb24oYWUsSnQpe2xldCBqdD1mLFRuPSExO2lmKGFlKWlmKGp0PXAuZ2V0KEp0KSx2b2lkIDA9PT1qdCYmKGp0PVtdLHAuc2V0KEp0LGp0KSksYWUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFdlPWFlLnRleHR1cmU7aWYoanQubGVuZ3RoIT09V2UubGVuZ3RofHwzNjA2NCE9PWp0WzBdKXtmb3IobGV0IGJuPTAsdWk9V2UubGVuZ3RoO2JuPHVpO2JuKyspanRbYm5dPTM2MDY0K2JuO2p0Lmxlbmd0aD1XZS5sZW5ndGgsVG49ITB9fWVsc2UgMzYwNjQhPT1qdFswXSYmKGp0WzBdPTM2MDY0LFRuPSEwKTtlbHNlIDEwMjkhPT1qdFswXSYmKGp0WzBdPTEwMjksVG49ITApO1RuJiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGp0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChqdCkpfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKGFlKXtyZXR1cm4gbSE9PWFlJiYobi51c2VQcm9ncmFtKGFlKSxtPWFlLCEwKX0sc2V0QmxlbmRpbmc6b2Usc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oYWUsSnQpe2FlLnNpZGU9PT1xMD9BbigyODg0KTpPZSgyODg0KTtsZXQganQ9YWUuc2lkZT09PWdvO0p0JiYoanQ9IWp0KSxZZShqdCksYWUuYmxlbmRpbmc9PT1neCYmITE9PT1hZS50cmFuc3BhcmVudD9vZShwcCk6b2UoYWUuYmxlbmRpbmcsYWUuYmxlbmRFcXVhdGlvbixhZS5ibGVuZFNyYyxhZS5ibGVuZERzdCxhZS5ibGVuZEVxdWF0aW9uQWxwaGEsYWUuYmxlbmRTcmNBbHBoYSxhZS5ibGVuZERzdEFscGhhLGFlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKGFlLmRlcHRoRnVuYyksbC5zZXRUZXN0KGFlLmRlcHRoVGVzdCksbC5zZXRNYXNrKGFlLmRlcHRoV3JpdGUpLGEuc2V0TWFzayhhZS5jb2xvcldyaXRlKTtsZXQgVG49YWUuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChUbiksVG4mJihjLnNldE1hc2soYWUuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKGFlLnN0ZW5jaWxGdW5jLGFlLnN0ZW5jaWxSZWYsYWUuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKGFlLnN0ZW5jaWxGYWlsLGFlLnN0ZW5jaWxaRmFpbCxhZS5zdGVuY2lsWlBhc3MpKSxzbihhZS5wb2x5Z29uT2Zmc2V0LGFlLnBvbHlnb25PZmZzZXRGYWN0b3IsYWUucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PWFlLmFscGhhVG9Db3ZlcmFnZT9PZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WWUsc2V0Q3VsbEZhY2U6X3Qsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKGFlKXthZSE9PURlJiYoZmUmJm4ubGluZVdpZHRoKGFlKSxEZT1hZSl9LHNldFBvbHlnb25PZmZzZXQ6c24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24oYWUpe2FlP09lKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOnRpLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKGFlLEp0KXtudWxsPT09ZGUmJnRpKCk7bGV0IGp0PXBlW2RlXTt2b2lkIDA9PT1qdCYmKGp0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0scGVbZGVdPWp0KSwoanQudHlwZSE9PWFlfHxqdC50ZXh0dXJlIT09SnQpJiYobi5iaW5kVGV4dHVyZShhZSxKdHx8cHRbYWVdKSxqdC50eXBlPWFlLGp0LnRleHR1cmU9SnQpfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IGFlPXBlW2RlXTt2b2lkIDAhPT1hZSYmdm9pZCAwIT09YWUudHlwZSYmKG4uYmluZFRleHR1cmUoYWUudHlwZSxudWxsKSxhZS50eXBlPXZvaWQgMCxhZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGFlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYWUpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGFlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYWUpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGFlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYWUpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChhZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGFlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goYWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goYWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goYWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChhZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGFlKX19LHNjaXNzb3I6ZnVuY3Rpb24oYWUpeyExPT09TmUuZXF1YWxzKGFlKSYmKG4uc2Npc3NvcihhZS54LGFlLnksYWUueixhZS53KSxOZS5jb3B5KGFlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKGFlKXshMT09PWx0LmVxdWFscyhhZSkmJihuLnZpZXdwb3J0KGFlLngsYWUueSxhZS56LGFlLncpLGx0LmNvcHkoYWUpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGQ9e30sZGU9bnVsbCxwZT17fSx1PXt9LHA9bmV3IFdlYWtNYXAsZj1bXSxtPW51bGwsYj0hMSxNPW51bGwseT1udWxsLHg9bnVsbCxSPW51bGwsQT1udWxsLFY9bnVsbCx0ZT1udWxsLEs9ITEseGU9bnVsbCxYZT1udWxsLERlPW51bGwsRD1udWxsLHJlPW51bGwsTmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIFFGZShuLHQsZSxpLHIsbyxzKXtsZXQgYixhPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSxkPXIubWF4VGV4dHVyZVNpemUsdT1yLm1heFNhbXBsZXMsZj10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxtPW5ldyBXZWFrTWFwLE09ITE7dHJ5e009dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24geShaLEwpe3JldHVybiBNP25ldyBPZmZzY3JlZW5DYW52YXMoWixMKTpNeCgiY2FudmFzIil9ZnVuY3Rpb24geChaLEwsVmUsdnQpe2xldCBlbj0xO2lmKChaLndpZHRoPnZ0fHxaLmhlaWdodD52dCkmJihlbj12dC9NYXRoLm1heChaLndpZHRoLFouaGVpZ2h0KSksZW48MXx8ITA9PT1MKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlogaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZaIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlogaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IExlPUw/Q1JlOk1hdGguZmxvb3IsbW49TGUoZW4qWi53aWR0aCksbG49TGUoZW4qWi5oZWlnaHQpO3ZvaWQgMD09PWImJihiPXkobW4sbG4pKTtsZXQgRnQ9VmU/eShtbixsbik6YjtyZXR1cm4gRnQud2lkdGg9bW4sRnQuaGVpZ2h0PWxuLEZ0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFosMCwwLG1uLGxuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1oud2lkdGgrIngiK1ouaGVpZ2h0KyIpIHRvICgiK21uKyJ4IitsbisiKS4iKSxGdH1yZXR1cm4iZGF0YSJpbiBaJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrWi53aWR0aCsieCIrWi5oZWlnaHQrIikuIiksWn1yZXR1cm4gWn1mdW5jdGlvbiBSKFope3JldHVybiBMJChaLndpZHRoKSYmTCQoWi5oZWlnaHQpfWZ1bmN0aW9uIFYoWixMKXtyZXR1cm4gWi5nZW5lcmF0ZU1pcG1hcHMmJkwmJloubWluRmlsdGVyIT09X28mJloubWluRmlsdGVyIT09JG99ZnVuY3Rpb24gdGUoWil7bi5nZW5lcmF0ZU1pcG1hcChaKX1mdW5jdGlvbiBLKFosTCxWZSx2dCxlbj0hMSl7aWYoITE9PT1hKXJldHVybiBMO2lmKG51bGwhPT1aKXtpZih2b2lkIDAhPT1uW1pdKXJldHVybiBuW1pdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIitaKyInIil9bGV0IExlPUw7cmV0dXJuIDY0MDM9PT1MJiYoNTEyNj09PVZlJiYoTGU9MzMzMjYpLDUxMzE9PT1WZSYmKExlPTMzMzI1KSw1MTIxPT09VmUmJihMZT0zMzMyMSkpLDMzMzE5PT09TCYmKDUxMjY9PT1WZSYmKExlPTMzMzI4KSw1MTMxPT09VmUmJihMZT0zMzMyNyksNTEyMT09PVZlJiYoTGU9MzMzMjMpKSw2NDA4PT09TCYmKDUxMjY9PT1WZSYmKExlPTM0ODM2KSw1MTMxPT09VmUmJihMZT0zNDg0MiksNTEyMT09PVZlJiYoTGU9dnQ9PT1BciYmITE9PT1lbj8zNTkwNzozMjg1NiksMzI4MTk9PT1WZSYmKExlPTMyODU0KSwzMjgyMD09PVZlJiYoTGU9MzI4NTUpKSwoMzMzMjU9PT1MZXx8MzMzMjY9PT1MZXx8MzMzMjc9PT1MZXx8MzMzMjg9PT1MZXx8MzQ4NDI9PT1MZXx8MzQ4MzY9PT1MZSkmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksTGV9ZnVuY3Rpb24geGUoWixMLFZlKXtyZXR1cm4hMD09PVYoWixWZSl8fFouaXNGcmFtZWJ1ZmZlclRleHR1cmUmJloubWluRmlsdGVyIT09X28mJloubWluRmlsdGVyIT09JG8/TWF0aC5sb2cyKE1hdGgubWF4KEwud2lkdGgsTC5oZWlnaHQpKSsxOnZvaWQgMCE9PVoubWlwbWFwcyYmWi5taXBtYXBzLmxlbmd0aD4wP1oubWlwbWFwcy5sZW5ndGg6Wi5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KFouaW1hZ2UpP0wubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiBYZShaKXtyZXR1cm4gWj09PV9vfHxaPT09ZiR8fFo9PT1tJD85NzI4Ojk3Mjl9ZnVuY3Rpb24gRGUoWil7bGV0IEw9Wi50YXJnZXQ7TC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixEZSksZnVuY3Rpb24oWil7bGV0IEw9aS5nZXQoWik7dm9pZCAwIT09TC5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShMLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShaKSl9KEwpLEwuaXNWaWRlb1RleHR1cmUmJm0uZGVsZXRlKEwpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gRChaKXtsZXQgTD1aLnRhcmdldDtMLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEQpLGZ1bmN0aW9uKFope2xldCBMPVoudGV4dHVyZSxWZT1pLmdldChaKSx2dD1pLmdldChMKTtpZihaKXtpZih2b2lkIDAhPT12dC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZSh2dC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksWi5kZXB0aFRleHR1cmUmJlouZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxaLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZW49MDtlbjw2O2VuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXJbZW5dKSxWZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlcltlbl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXIpLFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoVmUuX193ZWJnbERlcHRoYnVmZmVyKSxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoVmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihWZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFouaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGVuPTAsTGU9TC5sZW5ndGg7ZW48TGU7ZW4rKyl7bGV0IG1uPWkuZ2V0KExbZW5dKTttbi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShtbi5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoTFtlbl0pfWkucmVtb3ZlKEwpLGkucmVtb3ZlKFopfX0oTCl9bGV0IGZlPTA7ZnVuY3Rpb24gZGUoWixMKXtsZXQgVmU9aS5nZXQoWik7aWYoWi5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oWil7bGV0IEw9cy5yZW5kZXIuZnJhbWU7bS5nZXQoWikhPT1MJiYobS5zZXQoWixMKSxaLnVwZGF0ZSgpKX0oWiksWi52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVoudmVyc2lvbil7bGV0IHZ0PVouaW1hZ2U7aWYodm9pZCAwPT09dnQpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09dnQuY29tcGxldGUpcmV0dXJuIHZvaWQgT2UoVmUsWixMKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzU1MyxWZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gQ2UoWixMKXtsZXQgVmU9aS5nZXQoWik7Wi52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVoudmVyc2lvbj9mdW5jdGlvbihaLEwsVmUpe2lmKDYhPT1MLmltYWdlLmxlbmd0aClyZXR1cm47cHQoWixMKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUoMzQwNjcsWi5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxMLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEwucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEwudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCB2dD1MJiYoTC5pc0NvbXByZXNzZWRUZXh0dXJlfHxMLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGVuPUwuaW1hZ2VbMF0mJkwuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxMZT1bXTtmb3IobGV0IFdlPTA7V2U8NjtXZSsrKUxlW1dlXT12dHx8ZW4/ZW4/TC5pbWFnZVtXZV0uaW1hZ2U6TC5pbWFnZVtXZV06eChMLmltYWdlW1dlXSwhMSwhMCxjKSxMZVtXZV09c24oTCxMZVtXZV0pO2xldCBUbixtbj1MZVswXSxsbj1SKG1uKXx8YSxGdD1vLmNvbnZlcnQoTC5mb3JtYXQsTC5lbmNvZGluZyksUHQ9by5jb252ZXJ0KEwudHlwZSksTG49SyhMLmludGVybmFsRm9ybWF0LEZ0LFB0LEwuZW5jb2RpbmcpLGFlPWEmJiEwIT09TC5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1aLl9fdmVyc2lvbixqdD14ZShMLG1uLGxuKTtpZihNdCgzNDA2NyxMLGxuKSx2dCl7YWUmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxqdCxMbixtbi53aWR0aCxtbi5oZWlnaHQpO2ZvcihsZXQgV2U9MDtXZTw2O1dlKyspe1RuPUxlW1dlXS5taXBtYXBzO2ZvcihsZXQgYm49MDtibjxUbi5sZW5ndGg7Ym4rKyl7bGV0IHVpPVRuW2JuXTtMLmZvcm1hdCE9PWdzP251bGwhPT1GdD9hZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGJuLDAsMCx1aS53aWR0aCx1aS5oZWlnaHQsRnQsdWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStXZSxibixMbix1aS53aWR0aCx1aS5oZWlnaHQsMCx1aS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGJuLDAsMCx1aS53aWR0aCx1aS5oZWlnaHQsRnQsUHQsdWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGJuLExuLHVpLndpZHRoLHVpLmhlaWdodCwwLEZ0LFB0LHVpLmRhdGEpfX19ZWxzZXtUbj1MLm1pcG1hcHMsYWUmJkp0JiYoVG4ubGVuZ3RoPjAmJmp0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsanQsTG4sTGVbMF0ud2lkdGgsTGVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBXZT0wO1dlPDY7V2UrKylpZihlbil7YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLDAsMCwwLExlW1dlXS53aWR0aCxMZVtXZV0uaGVpZ2h0LEZ0LFB0LExlW1dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrV2UsMCxMbixMZVtXZV0ud2lkdGgsTGVbV2VdLmhlaWdodCwwLEZ0LFB0LExlW1dlXS5kYXRhKTtmb3IobGV0IGJuPTA7Ym48VG4ubGVuZ3RoO2JuKyspe2xldCB1cj1Ubltibl0uaW1hZ2VbV2VdLmltYWdlO2FlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStXZSxibisxLDAsMCx1ci53aWR0aCx1ci5oZWlnaHQsRnQsUHQsdXIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGJuKzEsTG4sdXIud2lkdGgsdXIuaGVpZ2h0LDAsRnQsUHQsdXIuZGF0YSl9fWVsc2V7YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLDAsMCwwLEZ0LFB0LExlW1dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLDAsTG4sRnQsUHQsTGVbV2VdKTtmb3IobGV0IGJuPTA7Ym48VG4ubGVuZ3RoO2JuKyspe2xldCB1aT1Ubltibl07YWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1dlLGJuKzEsMCwwLEZ0LFB0LHVpLmltYWdlW1dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1dlLGJuKzEsTG4sRnQsUHQsdWkuaW1hZ2VbV2VdKX19fVYoTCxsbikmJnRlKDM0MDY3KSxaLl9fdmVyc2lvbj1MLnZlcnNpb24sTC5vblVwZGF0ZSYmTC5vblVwZGF0ZShMKX0oVmUsWixMKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzQwNjcsVmUuX193ZWJnbFRleHR1cmUpKX1sZXQgTmU9e1skM106MTA0OTcsW3lhXTozMzA3MSxbZUJdOjMzNjQ4fSxsdD17W19vXTo5NzI4LFtmJF06OTk4NCxbbSRdOjk5ODYsWyRvXTo5NzI5LFtKQWVdOjk5ODUsW1FJXTo5OTg3fTtmdW5jdGlvbiBNdChaLEwsVmUpe2lmKFZlPyhuLnRleFBhcmFtZXRlcmkoWiwxMDI0MixOZVtMLndyYXBTXSksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDMsTmVbTC53cmFwVF0pLCgzMjg3OT09PVp8fDM1ODY2PT09WikmJm4udGV4UGFyYW1ldGVyaShaLDMyODgyLE5lW0wud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MCxsdFtMLm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShaLDEwMjQxLGx0W0wubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoWiwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDMsMzMwNzEpLCgzMjg3OT09PVp8fDM1ODY2PT09WikmJm4udGV4UGFyYW1ldGVyaShaLDMyODgyLDMzMDcxKSwoTC53cmFwUyE9PXlhfHxMLndyYXBUIT09eWEpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKFosMTAyNDAsWGUoTC5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoWiwxMDI0MSxYZShMLm1pbkZpbHRlcikpLEwubWluRmlsdGVyIT09X28mJkwubWluRmlsdGVyIT09JG8mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSwhMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IHZ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZihMLnR5cGU9PT1jbSYmITE9PT10LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCExPT09YSYmTC50eXBlPT09VTAmJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpcmV0dXJuOyhMLmFuaXNvdHJvcHk+MXx8aS5nZXQoTCkuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoWix2dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihMLmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldChMKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PUwuYW5pc290cm9weSl9fWZ1bmN0aW9uIHB0KFosTCl7dm9pZCAwPT09Wi5fX3dlYmdsSW5pdCYmKFouX193ZWJnbEluaXQ9ITAsTC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixEZSksWi5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSxzLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBPZShaLEwsVmUpe2xldCB2dD0zNTUzO0wuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJih2dD0zNTg2NiksTC5pc0RhdGFUZXh0dXJlM0QmJih2dD0zMjg3OSkscHQoWixMKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUodnQsWi5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxMLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEwucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEwudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBlbj1mdW5jdGlvbihaKXtyZXR1cm4hYSYmKFoud3JhcFMhPT15YXx8Wi53cmFwVCE9PXlhfHxaLm1pbkZpbHRlciE9PV9vJiZaLm1pbkZpbHRlciE9PSRvKX0oTCkmJiExPT09UihMLmltYWdlKSxMZT14KEwuaW1hZ2UsZW4sITEsZCk7TGU9c24oTCxMZSk7bGV0IG1uPVIoTGUpfHxhLGxuPW8uY29udmVydChMLmZvcm1hdCxMLmVuY29kaW5nKSxGdD1vLmNvbnZlcnQoTC50eXBlKSxQdD1LKEwuaW50ZXJuYWxGb3JtYXQsbG4sRnQsTC5lbmNvZGluZyxMLmlzVmlkZW9UZXh0dXJlKTtNdCh2dCxMLG1uKTtsZXQgTG4sYWU9TC5taXBtYXBzLEp0PWEmJiEwIT09TC5pc1ZpZGVvVGV4dHVyZSxqdD12b2lkIDA9PT1aLl9fdmVyc2lvbixUbj14ZShMLExlLG1uKTtpZihMLmlzRGVwdGhUZXh0dXJlKVB0PTY0MDIsYT9QdD1MLnR5cGU9PT1jbT8zNjAxMjpMLnR5cGU9PT1fST8zMzE5MDpMLnR5cGU9PT1qMD8zNTA1NjozMzE4OTpMLnR5cGU9PT1jbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksTC5mb3JtYXQ9PT11bSYmNjQwMj09PVB0JiZMLnR5cGUhPT14eCYmTC50eXBlIT09X0kmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSxMLnR5cGU9eHgsRnQ9by5jb252ZXJ0KEwudHlwZSkpLEwuZm9ybWF0PT09WTAmJjY0MDI9PT1QdCYmKFB0PTM0MDQxLEwudHlwZSE9PWowJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEwudHlwZT1qMCxGdD1vLmNvbnZlcnQoTC50eXBlKSkpLEp0JiZqdD9lLnRleFN0b3JhZ2UyRCgzNTUzLDEsUHQsTGUud2lkdGgsTGUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLFB0LExlLndpZHRoLExlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYoTC5pc0RhdGFUZXh0dXJlKWlmKGFlLmxlbmd0aD4wJiZtbil7SnQmJmp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLFB0LGFlWzBdLndpZHRoLGFlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLGJuPWFlLmxlbmd0aDtXZTxibjtXZSsrKUxuPWFlW1dlXSxKdD9lLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxMbi53aWR0aCxMbi5oZWlnaHQsbG4sRnQsTG4uZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsUHQsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsbG4sRnQsTG4uZGF0YSk7TC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBKdD8oanQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sUHQsTGUud2lkdGgsTGUuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxMZS53aWR0aCxMZS5oZWlnaHQsbG4sRnQsTGUuZGF0YSkpOmUudGV4SW1hZ2UyRCgzNTUzLDAsUHQsTGUud2lkdGgsTGUuaGVpZ2h0LDAsbG4sRnQsTGUuZGF0YSk7ZWxzZSBpZihMLmlzQ29tcHJlc3NlZFRleHR1cmUpe0p0JiZqdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixQdCxhZVswXS53aWR0aCxhZVswXS5oZWlnaHQpO2ZvcihsZXQgV2U9MCxibj1hZS5sZW5ndGg7V2U8Ym47V2UrKylMbj1hZVtXZV0sTC5mb3JtYXQhPT1ncz9udWxsIT09bG4/SnQ/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxMbi53aWR0aCxMbi5oZWlnaHQsbG4sTG4uZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFdlLFB0LExuLndpZHRoLExuLmhlaWdodCwwLExuLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOkp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFdlLDAsMCxMbi53aWR0aCxMbi5oZWlnaHQsbG4sRnQsTG4uZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsV2UsUHQsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsbG4sRnQsTG4uZGF0YSl9ZWxzZSBpZihMLmlzRGF0YVRleHR1cmUyREFycmF5KUp0PyhqdCYmZS50ZXhTdG9yYWdlM0QoMzU4NjYsVG4sUHQsTGUud2lkdGgsTGUuaGVpZ2h0LExlLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxMZS53aWR0aCxMZS5oZWlnaHQsTGUuZGVwdGgsbG4sRnQsTGUuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLFB0LExlLndpZHRoLExlLmhlaWdodCxMZS5kZXB0aCwwLGxuLEZ0LExlLmRhdGEpO2Vsc2UgaWYoTC5pc0RhdGFUZXh0dXJlM0QpSnQ/KGp0JiZlLnRleFN0b3JhZ2UzRCgzMjg3OSxUbixQdCxMZS53aWR0aCxMZS5oZWlnaHQsTGUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLExlLndpZHRoLExlLmhlaWdodCxMZS5kZXB0aCxsbixGdCxMZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDMyODc5LDAsUHQsTGUud2lkdGgsTGUuaGVpZ2h0LExlLmRlcHRoLDAsbG4sRnQsTGUuZGF0YSk7ZWxzZSBpZihMLmlzRnJhbWVidWZmZXJUZXh0dXJlKUp0JiZqdD9lLnRleFN0b3JhZ2UyRCgzNTUzLFRuLFB0LExlLndpZHRoLExlLmhlaWdodCk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxQdCxMZS53aWR0aCxMZS5oZWlnaHQsMCxsbixGdCxudWxsKTtlbHNlIGlmKGFlLmxlbmd0aD4wJiZtbil7SnQmJmp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLFB0LGFlWzBdLndpZHRoLGFlWzBdLmhlaWdodCk7Zm9yKGxldCBXZT0wLGJuPWFlLmxlbmd0aDtXZTxibjtXZSsrKUxuPWFlW1dlXSxKdD9lLnRleFN1YkltYWdlMkQoMzU1MyxXZSwwLDAsbG4sRnQsTG4pOmUudGV4SW1hZ2UyRCgzNTUzLFdlLFB0LGxuLEZ0LExuKTtMLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhqdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixQdCxMZS53aWR0aCxMZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLGxuLEZ0LExlKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxQdCxsbixGdCxMZSk7VihMLG1uKSYmdGUodnQpLFouX192ZXJzaW9uPUwudmVyc2lvbixMLm9uVXBkYXRlJiZMLm9uVXBkYXRlKEwpfWZ1bmN0aW9uIHd0KFosTCxWZSx2dCxlbil7bGV0IExlPW8uY29udmVydChWZS5mb3JtYXQsVmUuZW5jb2RpbmcpLG1uPW8uY29udmVydChWZS50eXBlKSxsbj1LKFZlLmludGVybmFsRm9ybWF0LExlLG1uLFZlLmVuY29kaW5nKTtpLmdldChMKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fCgzMjg3OT09PWVufHwzNTg2Nj09PWVuP2UudGV4SW1hZ2UzRChlbiwwLGxuLEwud2lkdGgsTC5oZWlnaHQsTC5kZXB0aCwwLExlLG1uLG51bGwpOmUudGV4SW1hZ2UyRChlbiwwLGxuLEwud2lkdGgsTC5oZWlnaHQsMCxMZSxtbixudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWiksTC51c2VSZW5kZXJUb1RleHR1cmU/Zi5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHZ0LGVuLGkuZ2V0KFZlKS5fX3dlYmdsVGV4dHVyZSwwLF90KEwpKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLHZ0LGVuLGkuZ2V0KFZlKS5fX3dlYmdsVGV4dHVyZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBvbihaLEwsVmUpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxaKSxMLmRlcHRoQnVmZmVyJiYhTC5zdGVuY2lsQnVmZmVyKXtsZXQgdnQ9MzMxODk7aWYoVmV8fEwudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgZW49TC5kZXB0aFRleHR1cmU7ZW4mJmVuLmlzRGVwdGhUZXh0dXJlJiYoZW4udHlwZT09PWNtP3Z0PTM2MDEyOmVuLnR5cGU9PT1fSSYmKHZ0PTMzMTkwKSk7bGV0IExlPV90KEwpO0wudXNlUmVuZGVyVG9UZXh0dXJlP2YucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLExlLHZ0LEwud2lkdGgsTC5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLExlLHZ0LEwud2lkdGgsTC5oZWlnaHQpfWVsc2Ugbi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHZ0LEwud2lkdGgsTC5oZWlnaHQpO24uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsWil9ZWxzZSBpZihMLmRlcHRoQnVmZmVyJiZMLnN0ZW5jaWxCdWZmZXIpe2xldCB2dD1fdChMKTtWZSYmTC51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsdnQsMzUwNTYsTC53aWR0aCxMLmhlaWdodCk6TC51c2VSZW5kZXJUb1RleHR1cmU/Zi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsdnQsMzUwNTYsTC53aWR0aCxMLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLEwud2lkdGgsTC5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsWil9ZWxzZXtsZXQgdnQ9ITA9PT1MLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/TC50ZXh0dXJlWzBdOkwudGV4dHVyZSxlbj1vLmNvbnZlcnQodnQuZm9ybWF0LHZ0LmVuY29kaW5nKSxMZT1vLmNvbnZlcnQodnQudHlwZSksbW49Syh2dC5pbnRlcm5hbEZvcm1hdCxlbixMZSx2dC5lbmNvZGluZyksbG49X3QoTCk7VmUmJkwudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGxuLG1uLEwud2lkdGgsTC5oZWlnaHQpOkwudXNlUmVuZGVyVG9UZXh0dXJlP2YucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLGxuLG1uLEwud2lkdGgsTC5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxtbixMLndpZHRoLEwuaGVpZ2h0KX1uLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9ZnVuY3Rpb24gbXQoWil7bGV0IEw9aS5nZXQoWiksVmU9ITA9PT1aLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0O2lmKFouZGVwdGhUZXh0dXJlJiYhTC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihWZSl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7IWZ1bmN0aW9uKFosTCl7aWYoTCYmTC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxaKSwhTC5kZXB0aFRleHR1cmV8fCFMLmRlcHRoVGV4dHVyZS5pc0RlcHRoVGV4dHVyZSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KEwuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8TC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT1MLndpZHRofHxMLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT1MLmhlaWdodCkmJihMLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD1MLndpZHRoLEwuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD1MLmhlaWdodCxMLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksZGUoTC5kZXB0aFRleHR1cmUsMCk7bGV0IHZ0PWkuZ2V0KEwuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxlbj1fdChMKTtpZihMLmRlcHRoVGV4dHVyZS5mb3JtYXQ9PT11bSlMLnVzZVJlbmRlclRvVGV4dHVyZT9mLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzYwOTYsMzU1Myx2dCwwLGVuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDk2LDM1NTMsdnQsMCk7ZWxzZXtpZihMLmRlcHRoVGV4dHVyZS5mb3JtYXQhPT1ZMCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZGVwdGhUZXh0dXJlIGZvcm1hdCIpO0wudXNlUmVuZGVyVG9UZXh0dXJlP2YuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHZ0LDAsZW4pOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1Myx2dCwwKX19KEwuX193ZWJnbEZyYW1lYnVmZmVyLFopfWVsc2UgaWYoVmUpe0wuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgdnQ9MDt2dDw2O3Z0KyspZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTC5fX3dlYmdsRnJhbWVidWZmZXJbdnRdKSxMLl9fd2ViZ2xEZXB0aGJ1ZmZlclt2dF09bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxvbihMLl9fd2ViZ2xEZXB0aGJ1ZmZlclt2dF0sWiwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxMLl9fd2ViZ2xGcmFtZWJ1ZmZlciksTC5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxvbihMLl9fd2ViZ2xEZXB0aGJ1ZmZlcixaLCExKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBfdChaKXtyZXR1cm4gYSYmKFoudXNlUmVuZGVyYnVmZmVyfHxaLnVzZVJlbmRlclRvVGV4dHVyZSk/TWF0aC5taW4odSxaLnNhbXBsZXMpOjB9ZnVuY3Rpb24gc24oWixMKXtsZXQgVmU9Wi5lbmNvZGluZyx2dD1aLmZvcm1hdCxlbj1aLnR5cGU7cmV0dXJuITA9PT1aLmlzQ29tcHJlc3NlZFRleHR1cmV8fCEwPT09Wi5pc1ZpZGVvVGV4dHVyZXx8Wi5mb3JtYXQ9PT10Qnx8VmUhPT1fcCYmKFZlPT09QXI/ITE9PT1hPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJnZ0PT09Z3M/KFouZm9ybWF0PXRCLFoubWluRmlsdGVyPSRvLFouZ2VuZXJhdGVNaXBtYXBzPSExKTpMPWpkLnNSR0JUb0xpbmVhcihMKToodnQhPT1nc3x8ZW4hPT1tcCkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogc1JHQiBlbmNvZGVkIHRleHR1cmVzIGhhdmUgdG8gdXNlIFJHQkFGb3JtYXQgYW5kIFVuc2lnbmVkQnl0ZVR5cGUuIik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzoiLFZlKSksTH1sZXQgQ249ITEsdGk9ITE7dGhpcy5hbGxvY2F0ZVRleHR1cmVVbml0PWZ1bmN0aW9uKCl7bGV0IFo9ZmU7cmV0dXJuIFo+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK1orIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxmZSs9MSxafSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uKCl7ZmU9MH0sdGhpcy5zZXRUZXh0dXJlMkQ9ZGUsdGhpcy5zZXRUZXh0dXJlMkRBcnJheT1mdW5jdGlvbihaLEwpe2xldCBWZT1pLmdldChaKTtaLnZlcnNpb24+MCYmVmUuX192ZXJzaW9uIT09Wi52ZXJzaW9uP09lKFZlLFosTCk6KGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtMKSxlLmJpbmRUZXh0dXJlKDM1ODY2LFZlLl9fd2ViZ2xUZXh0dXJlKSl9LHRoaXMuc2V0VGV4dHVyZTNEPWZ1bmN0aW9uKFosTCl7bGV0IFZlPWkuZ2V0KFopO1oudmVyc2lvbj4wJiZWZS5fX3ZlcnNpb24hPT1aLnZlcnNpb24/T2UoVmUsWixMKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0wpLGUuYmluZFRleHR1cmUoMzI4NzksVmUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT1DZSx0aGlzLnJlYmluZFRleHR1cmVzPWZ1bmN0aW9uKFosTCxWZSl7bGV0IHZ0PWkuZ2V0KFopO3ZvaWQgMCE9PUwmJnd0KHZ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixaLFoudGV4dHVyZSwzNjA2NCwzNTUzKSx2b2lkIDAhPT1WZSYmbXQoWil9LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oWil7bGV0IEw9Wi50ZXh0dXJlLFZlPWkuZ2V0KFopLHZ0PWkuZ2V0KEwpO1ouYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRCksITAhPT1aLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMmJih2b2lkIDA9PT12dC5fX3dlYmdsVGV4dHVyZSYmKHZ0Ll9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpKSx2dC5fX3ZlcnNpb249TC52ZXJzaW9uLHMubWVtb3J5LnRleHR1cmVzKyspO2xldCBlbj0hMD09PVouaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQsTGU9ITA9PT1aLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsbW49TC5pc0RhdGFUZXh0dXJlM0R8fEwuaXNEYXRhVGV4dHVyZTJEQXJyYXksbG49UihaKXx8YTtpZihlbil7VmUuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgRnQ9MDtGdDw2O0Z0KyspVmUuX193ZWJnbEZyYW1lYnVmZmVyW0Z0XT1uLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihWZS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLExlKWlmKHIuZHJhd0J1ZmZlcnMpe2xldCBGdD1aLnRleHR1cmU7Zm9yKGxldCBQdD0wLExuPUZ0Lmxlbmd0aDtQdDxMbjtQdCsrKXtsZXQgYWU9aS5nZXQoRnRbUHRdKTt2b2lkIDA9PT1hZS5fX3dlYmdsVGV4dHVyZSYmKGFlLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLHMubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYoWi51c2VSZW5kZXJidWZmZXIpaWYoYSl7VmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsVmUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtsZXQgRnQ9by5jb252ZXJ0KEwuZm9ybWF0LEwuZW5jb2RpbmcpLFB0PW8uY29udmVydChMLnR5cGUpLExuPUsoTC5pbnRlcm5hbEZvcm1hdCxGdCxQdCxMLmVuY29kaW5nKSxhZT1fdChaKTtuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxhZSxMbixaLndpZHRoLFouaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsVmUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksWi5kZXB0aEJ1ZmZlciYmKFZlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG9uKFZlLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcixaLCEwKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihlbil7ZS5iaW5kVGV4dHVyZSgzNDA2Nyx2dC5fX3dlYmdsVGV4dHVyZSksTXQoMzQwNjcsTCxsbik7Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKyl3dChWZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdLFosTCwzNjA2NCwzNDA2OStGdCk7VihMLGxuKSYmdGUoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoTGUpe2xldCBGdD1aLnRleHR1cmU7Zm9yKGxldCBQdD0wLExuPUZ0Lmxlbmd0aDtQdDxMbjtQdCsrKXtsZXQgYWU9RnRbUHRdLEp0PWkuZ2V0KGFlKTtlLmJpbmRUZXh0dXJlKDM1NTMsSnQuX193ZWJnbFRleHR1cmUpLE10KDM1NTMsYWUsbG4pLHd0KFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcixaLGFlLDM2MDY0K1B0LDM1NTMpLFYoYWUsbG4pJiZ0ZSgzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCBGdD0zNTUzO21uJiYoYT9GdD1MLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZShGdCx2dC5fX3dlYmdsVGV4dHVyZSksTXQoRnQsTCxsbiksd3QoVmUuX193ZWJnbEZyYW1lYnVmZmVyLFosTCwzNjA2NCxGdCksVihMLGxuKSYmdGUoRnQpLGUudW5iaW5kVGV4dHVyZSgpfVouZGVwdGhCdWZmZXImJm10KFopfSx0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcD1mdW5jdGlvbihaKXtsZXQgTD1SKFopfHxhLFZlPSEwPT09Wi5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP1oudGV4dHVyZTpbWi50ZXh0dXJlXTtmb3IobGV0IHZ0PTAsZW49VmUubGVuZ3RoO3Z0PGVuO3Z0Kyspe2xldCBMZT1WZVt2dF07aWYoVihMZSxMKSl7bGV0IG1uPVouaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1Myxsbj1pLmdldChMZSkuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShtbixsbiksdGUobW4pLGUudW5iaW5kVGV4dHVyZSgpfX19LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oWil7aWYoWi51c2VSZW5kZXJidWZmZXIpaWYoYSl7bGV0IEw9Wi53aWR0aCxWZT1aLmhlaWdodCx2dD0xNjM4NCxlbj1bMzYwNjRdLExlPVouc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5NjtaLmRlcHRoQnVmZmVyJiZlbi5wdXNoKExlKSxaLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwoWi5kZXB0aEJ1ZmZlciYmKHZ0fD0yNTYpLFouc3RlbmNpbEJ1ZmZlciYmKHZ0fD0xMDI0KSk7bGV0IG1uPWkuZ2V0KFopO2UuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG1uLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbW4uX193ZWJnbEZyYW1lYnVmZmVyKSxaLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW0xlXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW0xlXSkpLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCxMLFZlLDAsMCxMLFZlLHZ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGVuKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxtbi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1tdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPXd0LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbihaLEwpe1omJlouaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09Q24mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxDbj0hMCksWj1aLnRleHR1cmUpLGRlKFosTCl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKFosTCl7WiYmWi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09dGkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksdGk9ITApLFo9Wi50ZXh0dXJlKSxDZShaLEwpfX1mdW5jdGlvbiBaRmUobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24obyxzPW51bGwpe2xldCBhO2lmKG89PT1tcClyZXR1cm4gNTEyMTtpZihvPT09blJlKXJldHVybiAzMjgxOTtpZihvPT09aVJlKXJldHVybiAzMjgyMDtpZihvPT09JEFlKXJldHVybiA1MTIwO2lmKG89PT1lUmUpcmV0dXJuIDUxMjI7aWYobz09PXh4KXJldHVybiA1MTIzO2lmKG89PT10UmUpcmV0dXJuIDUxMjQ7aWYobz09PV9JKXJldHVybiA1MTI1O2lmKG89PT1jbSlyZXR1cm4gNTEyNjtpZihvPT09VTApcmV0dXJuIGk/NTEzMTooYT10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1hP2EuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYobz09PXJSZSlyZXR1cm4gNjQwNjtpZihvPT09Z3MpcmV0dXJuIDY0MDg7aWYobz09PW9SZSlyZXR1cm4gNjQwOTtpZihvPT09c1JlKXJldHVybiA2NDEwO2lmKG89PT11bSlyZXR1cm4gNjQwMjtpZihvPT09WTApcmV0dXJuIDM0MDQxO2lmKG89PT1hUmUpcmV0dXJuIDY0MDM7aWYobz09PXRCKXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1hP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZihvPT09bFJlKXJldHVybiAzNjI0NDtpZihvPT09Y1JlKXJldHVybiAzMzMxOTtpZihvPT09ZFJlKXJldHVybiAzMzMyMDtpZihvPT09dVJlKXJldHVybiAzNjI0OTtpZihvPT09dTN8fG89PT1wM3x8bz09PWYzfHxvPT09bTMpaWYocz09PUFyKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYobz09PXUzKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1wMylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihvPT09ZjMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYobz09PW0zKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2V7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZihvPT09dTMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09cDMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYobz09PWYzKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1tMylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1pZihvPT09aCR8fG89PT1nJHx8bz09PV8kfHxvPT09YiQpe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKG89PT1oJClyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1nJClyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1fJClyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRztpZihvPT09YiQpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9aWYobz09PXBSZSlyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YT9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihvPT09diR8fG89PT15JCl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKG89PT12JClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYobz09PXkkKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYobz09PXgkfHxvPT09QyR8fG89PT1NJHx8bz09PXckfHxvPT09UyR8fG89PT1FJHx8bz09PVQkfHxvPT09RCR8fG89PT1JJHx8bz09PUEkfHxvPT09UiR8fG89PT1QJHx8bz09PU8kfHxvPT09ayQpe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYobz09PXgkKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKG89PT1DJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZihvPT09TSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PXckKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKG89PT1TJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZihvPT09RSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVQkKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKG89PT1EJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZihvPT09SSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09QSQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZihvPT09UiQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZihvPT09UCQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1PJClyZXR1cm4gcz09PUFyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYobz09PWskKXJldHVybiBzPT09QXI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZihvPT09RiQpe2lmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZihvPT09RiQpcmV0dXJuIHM9PT1Bcj9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PWowP2k/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09YT9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fXZhciBBST1jbGFzcyBleHRlbmRzIGVze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtBSS5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgZG09Y2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtkbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgS0ZlPXt0eXBlOiJtb3ZlIn0sX3g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IGRtLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgZG0sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBkbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgJCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PWEmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYoYS5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCksYS5tYXRyaXguZGVjb21wb3NlKGEucG9zaXRpb24sYS5yb3RhdGlvbixhLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhhLmhhc0xpbmVhclZlbG9jaXR5PSEwLGEubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6YS5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8oYS5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsYS5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOmEuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChLRmUpKSksYyYmdC5oYW5kKXtzPSEwO2ZvcihsZXQgYiBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBNPWUuZ2V0Sm9pbnRQb3NlKGIsaSk7aWYodm9pZCAwPT09Yy5qb2ludHNbYi5qb2ludE5hbWVdKXtsZXQgeD1uZXcgZG07eC5tYXRyaXhBdXRvVXBkYXRlPSExLHgudmlzaWJsZT0hMSxjLmpvaW50c1tiLmpvaW50TmFtZV09eCxjLmFkZCh4KX1sZXQgeT1jLmpvaW50c1tiLmpvaW50TmFtZV07bnVsbCE9PU0mJih5Lm1hdHJpeC5mcm9tQXJyYXkoTS50cmFuc2Zvcm0ubWF0cml4KSx5Lm1hdHJpeC5kZWNvbXBvc2UoeS5wb3NpdGlvbix5LnJvdGF0aW9uLHkuc2NhbGUpLHkuam9pbnRSYWRpdXM9TS5yYWRpdXMpLHkudmlzaWJsZT1udWxsIT09TX1sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxmPS4wMixtPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmYrbT8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWYtbSYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09cyksdGhpc319LEl4PWNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsZCl7aWYoKGQ9dm9pZCAwIT09ZD9kOnVtKSE9PXVtJiZkIT09WTApdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJmQ9PT11bSYmKGk9eHgpLHZvaWQgMD09PWkmJmQ9PT1ZMCYmKGk9ajApLHN1cGVyKG51bGwscixvLHMsYSxsLGQsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6X28sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOl9vLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtJeC5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIGxCPWNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxzPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLGQ9bnVsbCx1PW51bGwscD1udWxsLGY9ITEsbT1udWxsLGI9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLE09bnVsbCx5PW51bGwseD1bXSxSPW5ldyBNYXAsQT1uZXcgZXM7QS5sYXllcnMuZW5hYmxlKDEpLEEudmlld3BvcnQ9bmV3IFppO2xldCBWPW5ldyBlcztWLmxheWVycy5lbmFibGUoMiksVi52aWV3cG9ydD1uZXcgWmk7bGV0IHRlPVtBLFZdLEs9bmV3IEFJO0subGF5ZXJzLmVuYWJsZSgxKSxLLmxheWVycy5lbmFibGUoMik7bGV0IHhlPW51bGwsWGU9bnVsbDtmdW5jdGlvbiBEZShDZSl7bGV0IE5lPVIuZ2V0KENlLmlucHV0U291cmNlKTtOZSYmTmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpDZS50eXBlLGRhdGE6Q2UuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBEKCl7Ui5mb3JFYWNoKGZ1bmN0aW9uKENlLE5lKXtDZS5kaXNjb25uZWN0KE5lKX0pLFIuY2xlYXIoKSx4ZT1udWxsLFhlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoTSkscD1udWxsLHU9bnVsbCxkPW51bGwscj1udWxsLHk9bnVsbCxqZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIHJlKENlKXtsZXQgTmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBsdD0wO2x0PHgubGVuZ3RoO2x0KyspUi5zZXQoTmVbbHRdLHhbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Q2UucmVtb3ZlZC5sZW5ndGg7bHQrKyl7bGV0IE10PUNlLnJlbW92ZWRbbHRdLHB0PVIuZ2V0KE10KTtwdCYmKHB0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpNdH0pLFIuZGVsZXRlKE10KSl9Zm9yKGxldCBsdD0wO2x0PENlLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgTXQ9Q2UuYWRkZWRbbHRdLHB0PVIuZ2V0KE10KTtwdCYmcHQuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOk10fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKENlKXtsZXQgTmU9eFtDZV07cmV0dXJuIHZvaWQgMD09PU5lJiYoTmU9bmV3IF94LHhbQ2VdPU5lKSxOZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKENlKXtsZXQgTmU9eFtDZV07cmV0dXJuIHZvaWQgMD09PU5lJiYoTmU9bmV3IF94LHhbQ2VdPU5lKSxOZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKENlKXtsZXQgTmU9eFtDZV07cmV0dXJuIHZvaWQgMD09PU5lJiYoTmU9bmV3IF94LHhbQ2VdPU5lKSxOZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKENlKXtvPUNlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKENlKXthPUNlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXU/dTpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBtfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKENlKXtpZihyPUNlLG51bGwhPT1yKXtpZihNPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLERlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixEZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLERlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLERlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsRGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsRGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixEKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIscmUpLCEwIT09Yi54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8Yi5hbnRpYWxpYXMsYWxwaGE6Yi5hbHBoYSxkZXB0aDpiLmRlcHRoLHN0ZW5jaWw6Yi5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSkseT1uZXcgSnMocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpncyx0eXBlOm1wLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2Y9Yi5hbnRpYWxpYXM7bGV0IE5lPW51bGwsbHQ9bnVsbCxNdD1udWxsO2IuZGVwdGgmJihNdD1iLnN0ZW5jaWw/MzUwNTY6MzMxOTAsTmU9Yi5zdGVuY2lsP1kwOnVtLGx0PWIuc3RlbmNpbD9qMDp4eCk7bGV0IHB0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09QXI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6TXQsc2NhbGVGYWN0b3I6b307ZD1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSx1PWQuY3JlYXRlUHJvamVjdGlvbkxheWVyKHB0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W3VdfSkseT1mP25ldyB3eCh1LnRleHR1cmVXaWR0aCx1LnRleHR1cmVIZWlnaHQse2Zvcm1hdDpncyx0eXBlOm1wLGRlcHRoVGV4dHVyZTpuZXcgSXgodS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLE5lKSxzdGVuY2lsQnVmZmVyOmIuc3RlbmNpbCxpZ25vcmVEZXB0aDp1Lmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgSnModS50ZXh0dXJlV2lkdGgsdS50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6Z3MsdHlwZTptcCxkZXB0aFRleHR1cmU6bmV3IEl4KHUudGV4dHVyZVdpZHRoLHUudGV4dHVyZUhlaWdodCxsdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxOZSksc3RlbmNpbEJ1ZmZlcjpiLnN0ZW5jaWwsaWdub3JlRGVwdGg6dS5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9eS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLHM9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksamUuc2V0Q29udGV4dChyKSxqZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGNlPW5ldyAkLGZlPW5ldyAkO2Z1bmN0aW9uIG5lKENlLE5lKXtudWxsPT09TmU/Q2UubWF0cml4V29ybGQuY29weShDZS5tYXRyaXgpOkNlLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoTmUubWF0cml4V29ybGQsQ2UubWF0cml4KSxDZS5tYXRyaXhXb3JsZEludmVyc2UuY29weShDZS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24oQ2Upe2lmKG51bGw9PT1yKXJldHVybjtLLm5lYXI9Vi5uZWFyPUEubmVhcj1DZS5uZWFyLEsuZmFyPVYuZmFyPUEuZmFyPUNlLmZhciwoeGUhPT1LLm5lYXJ8fFhlIT09Sy5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOksubmVhcixkZXB0aEZhcjpLLmZhcn0pLHhlPUsubmVhcixYZT1LLmZhcik7bGV0IE5lPUNlLnBhcmVudCxsdD1LLmNhbWVyYXM7bmUoSyxOZSk7Zm9yKGxldCBwdD0wO3B0PGx0Lmxlbmd0aDtwdCsrKW5lKGx0W3B0XSxOZSk7Sy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSy5wb3NpdGlvbixLLnF1YXRlcm5pb24sSy5zY2FsZSksQ2UucG9zaXRpb24uY29weShLLnBvc2l0aW9uKSxDZS5xdWF0ZXJuaW9uLmNvcHkoSy5xdWF0ZXJuaW9uKSxDZS5zY2FsZS5jb3B5KEsuc2NhbGUpLENlLm1hdHJpeC5jb3B5KEsubWF0cml4KSxDZS5tYXRyaXhXb3JsZC5jb3B5KEsubWF0cml4V29ybGQpO2xldCBNdD1DZS5jaGlsZHJlbjtmb3IobGV0IHB0PTAsT2U9TXQubGVuZ3RoO3B0PE9lO3B0KyspTXRbcHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09bHQubGVuZ3RoP2Z1bmN0aW9uKENlLE5lLGx0KXtjZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oTmUubWF0cml4V29ybGQpLGZlLnNldEZyb21NYXRyaXhQb3NpdGlvbihsdC5tYXRyaXhXb3JsZCk7bGV0IE10PWNlLmRpc3RhbmNlVG8oZmUpLHB0PU5lLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsT2U9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxBbj1wdFsxNF0vKHB0WzEwXS0xKSx3dD1wdFsxNF0vKHB0WzEwXSsxKSxvbj0ocHRbOV0rMSkvcHRbNV0sdmU9KHB0WzldLTEpL3B0WzVdLG10PShwdFs4XS0xKS9wdFswXSxmdD0oT2VbOF0rMSkvT2VbMF0sb2U9QW4qbXQsc3Q9QW4qZnQsWWU9TXQvKC1tdCtmdCksX3Q9WWUqLW10O05lLm1hdHJpeFdvcmxkLmRlY29tcG9zZShDZS5wb3NpdGlvbixDZS5xdWF0ZXJuaW9uLENlLnNjYWxlKSxDZS50cmFuc2xhdGVYKF90KSxDZS50cmFuc2xhdGVaKFllKSxDZS5tYXRyaXhXb3JsZC5jb21wb3NlKENlLnBvc2l0aW9uLENlLnF1YXRlcm5pb24sQ2Uuc2NhbGUpLENlLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KENlLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgdXQ9QW4rWWUsc249d3QrWWU7Q2UucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUob2UtX3Qsc3QrKE10LV90KSxvbip3dC9zbip1dCx2ZSp3dC9zbip1dCx1dCxzbil9KEssQSxWKTpLLnByb2plY3Rpb25NYXRyaXguY29weShBLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBLfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09dT91LmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihDZSl7bnVsbCE9PXUmJih1LmZpeGVkRm92ZWF0aW9uPUNlKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249Q2UpfTtsZXQgZGU9bnVsbCxqZT1uZXcgWmVlO2plLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oQ2UsTmUpe2lmKGM9TmUuZ2V0Vmlld2VyUG9zZShzKSxtPU5lLG51bGwhPT1jKXtsZXQgTXQ9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoeSxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldCh5KSk7bGV0IHB0PSExO010Lmxlbmd0aCE9PUsuY2FtZXJhcy5sZW5ndGgmJihLLmNhbWVyYXMubGVuZ3RoPTAscHQ9ITApO2ZvcihsZXQgT2U9MDtPZTxNdC5sZW5ndGg7T2UrKyl7bGV0IEFuPU10W09lXSx3dD1udWxsO2lmKG51bGwhPT1wKXd0PXAuZ2V0Vmlld3BvcnQoQW4pO2Vsc2V7bGV0IHZlPWQuZ2V0Vmlld1N1YkltYWdlKHUsQW4pO3d0PXZlLnZpZXdwb3J0LDA9PT1PZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoeSx2ZS5jb2xvclRleHR1cmUsdS5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6dmUuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBvbj10ZVtPZV07b24ubWF0cml4LmZyb21BcnJheShBbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShBbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQod3QueCx3dC55LHd0LndpZHRoLHd0LmhlaWdodCksMD09PU9lJiZLLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1wdCYmSy5jYW1lcmFzLnB1c2gob24pfX1sZXQgbHQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBNdD0wO010PHgubGVuZ3RoO010KyspeFtNdF0udXBkYXRlKGx0W010XSxOZSxzKTtkZSYmZGUoQ2UsTmUpLG09bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihDZSl7ZGU9Q2V9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBKRmUobil7ZnVuY3Rpb24gaSh5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IEEsVixSPW4uZ2V0KHgpLmVudk1hcDtSJiYoeS5lbnZNYXAudmFsdWU9Uix5LmZsaXBFbnZNYXAudmFsdWU9Ui5pc0N1YmVUZXh0dXJlJiYhMT09PVIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEseS5yZWZsZWN0aXZpdHkudmFsdWU9eC5yZWZsZWN0aXZpdHkseS5pb3IudmFsdWU9eC5pb3IseS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eC5yZWZyYWN0aW9uUmF0aW8pLHgubGlnaHRNYXAmJih5LmxpZ2h0TWFwLnZhbHVlPXgubGlnaHRNYXAseS5saWdodE1hcEludGVuc2l0eS52YWx1ZT14LmxpZ2h0TWFwSW50ZW5zaXR5KSx4LmFvTWFwJiYoeS5hb01hcC52YWx1ZT14LmFvTWFwLHkuYW9NYXBJbnRlbnNpdHkudmFsdWU9eC5hb01hcEludGVuc2l0eSkseC5tYXA/QT14Lm1hcDp4LnNwZWN1bGFyTWFwP0E9eC5zcGVjdWxhck1hcDp4LmRpc3BsYWNlbWVudE1hcD9BPXguZGlzcGxhY2VtZW50TWFwOngubm9ybWFsTWFwP0E9eC5ub3JtYWxNYXA6eC5idW1wTWFwP0E9eC5idW1wTWFwOngucm91Z2huZXNzTWFwP0E9eC5yb3VnaG5lc3NNYXA6eC5tZXRhbG5lc3NNYXA/QT14Lm1ldGFsbmVzc01hcDp4LmFscGhhTWFwP0E9eC5hbHBoYU1hcDp4LmVtaXNzaXZlTWFwP0E9eC5lbWlzc2l2ZU1hcDp4LmNsZWFyY29hdE1hcD9BPXguY2xlYXJjb2F0TWFwOnguY2xlYXJjb2F0Tm9ybWFsTWFwP0E9eC5jbGVhcmNvYXROb3JtYWxNYXA6eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/QT14LmNsZWFyY29hdFJvdWdobmVzc01hcDp4LnNwZWN1bGFySW50ZW5zaXR5TWFwP0E9eC5zcGVjdWxhckludGVuc2l0eU1hcDp4LnNwZWN1bGFyQ29sb3JNYXA/QT14LnNwZWN1bGFyQ29sb3JNYXA6eC50cmFuc21pc3Npb25NYXA/QT14LnRyYW5zbWlzc2lvbk1hcDp4LnRoaWNrbmVzc01hcD9BPXgudGhpY2tuZXNzTWFwOnguc2hlZW5Db2xvck1hcD9BPXguc2hlZW5Db2xvck1hcDp4LnNoZWVuUm91Z2huZXNzTWFwJiYoQT14LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1BJiYoQS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoQT1BLnRleHR1cmUpLCEwPT09QS5tYXRyaXhBdXRvVXBkYXRlJiZBLnVwZGF0ZU1hdHJpeCgpLHkudXZUcmFuc2Zvcm0udmFsdWUuY29weShBLm1hdHJpeCkpLHguYW9NYXA/Vj14LmFvTWFwOngubGlnaHRNYXAmJihWPXgubGlnaHRNYXApLHZvaWQgMCE9PVYmJihWLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihWPVYudGV4dHVyZSksITA9PT1WLm1hdHJpeEF1dG9VcGRhdGUmJlYudXBkYXRlTWF0cml4KCkseS51djJUcmFuc2Zvcm0udmFsdWUuY29weShWLm1hdHJpeCkpfWZ1bmN0aW9uIHUoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLG4uZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOmZ1bmN0aW9uKHkseCl7eS5mb2dDb2xvci52YWx1ZS5jb3B5KHguY29sb3IpLHguaXNGb2c/KHkuZm9nTmVhci52YWx1ZT14Lm5lYXIseS5mb2dGYXIudmFsdWU9eC5mYXIpOnguaXNGb2dFeHAyJiYoeS5mb2dEZW5zaXR5LnZhbHVlPXguZGVuc2l0eSl9LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmZ1bmN0aW9uKHkseCxSLEEsVil7eC5pc01lc2hCYXNpY01hdGVyaWFsP2koeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8oaSh5LHgpLGZ1bmN0aW9uKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9KHkseCkpOnguaXNNZXNoVG9vbk1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTWVzaFBob25nTWF0ZXJpYWw/KGkoeSx4KSxmdW5jdGlvbih5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoeSx4KSx4LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oeSx4LFIpe3UoeSx4KSx5Lmlvci52YWx1ZT14Lmlvcix4LnNoZWVuPjAmJih5LnNoZWVuQ29sb3IudmFsdWUuY29weSh4LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHguc2hlZW4pLHkuc2hlZW5Sb3VnaG5lc3MudmFsdWU9eC5zaGVlblJvdWdobmVzcyx4LnNoZWVuQ29sb3JNYXAmJih5LnNoZWVuQ29sb3JNYXAudmFsdWU9eC5zaGVlbkNvbG9yTWFwKSx4LnNoZWVuUm91Z2huZXNzTWFwJiYoeS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT14LnNoZWVuUm91Z2huZXNzTWFwKSkseC5jbGVhcmNvYXQ+MCYmKHkuY2xlYXJjb2F0LnZhbHVlPXguY2xlYXJjb2F0LHkuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzLHguY2xlYXJjb2F0TWFwJiYoeS5jbGVhcmNvYXRNYXAudmFsdWU9eC5jbGVhcmNvYXRNYXApLHguY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoeS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHguY2xlYXJjb2F0Tm9ybWFsTWFwJiYoeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHguY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHkuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXguY2xlYXJjb2F0Tm9ybWFsTWFwLHguc2lkZT09PWdvJiZ5LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkseC50cmFuc21pc3Npb24+MCYmKHkudHJhbnNtaXNzaW9uLnZhbHVlPXgudHJhbnNtaXNzaW9uLHkudHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1SLnRleHR1cmUseS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoUi53aWR0aCxSLmhlaWdodCkseC50cmFuc21pc3Npb25NYXAmJih5LnRyYW5zbWlzc2lvbk1hcC52YWx1ZT14LnRyYW5zbWlzc2lvbk1hcCkseS50aGlja25lc3MudmFsdWU9eC50aGlja25lc3MseC50aGlja25lc3NNYXAmJih5LnRoaWNrbmVzc01hcC52YWx1ZT14LnRoaWNrbmVzc01hcCkseS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXguYXR0ZW51YXRpb25EaXN0YW5jZSx5LmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weSh4LmF0dGVudWF0aW9uQ29sb3IpKSx5LnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXguc3BlY3VsYXJJbnRlbnNpdHkseS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkoeC5zcGVjdWxhckNvbG9yKSx4LnNwZWN1bGFySW50ZW5zaXR5TWFwJiYoeS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5TWFwKSx4LnNwZWN1bGFyQ29sb3JNYXAmJih5LnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9eC5zcGVjdWxhckNvbG9yTWFwKX0oeSx4LFYpOnUoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8oaSh5LHgpLGZ1bmN0aW9uKHkseCl7eC5tYXRjYXAmJih5Lm1hdGNhcC52YWx1ZT14Lm1hdGNhcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1nbyYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PWdvJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0oeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX0oeSx4KSk6eC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfSh5LHgpKTp4LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKHkseCksZnVuY3Rpb24oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PWdvJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09Z28mJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfSh5LHgpKTp4LmlzTGluZUJhc2ljTWF0ZXJpYWw/KGZ1bmN0aW9uKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eX0oeSx4KSx4LmlzTGluZURhc2hlZE1hdGVyaWFsJiZmdW5jdGlvbih5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9KHkseCkpOnguaXNQb2ludHNNYXRlcmlhbD9mdW5jdGlvbih5LHgsUixBKXtsZXQgVjt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqUix5LnNjYWxlLnZhbHVlPS41KkEseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KSx4Lm1hcD9WPXgubWFwOnguYWxwaGFNYXAmJihWPXguYWxwaGFNYXApLHZvaWQgMCE9PVYmJighMD09PVYubWF0cml4QXV0b1VwZGF0ZSYmVi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoVi5tYXRyaXgpKX0oeSx4LFIsQSk6eC5pc1Nwcml0ZU1hdGVyaWFsP2Z1bmN0aW9uKHkseCl7bGV0IFI7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KSx4Lm1hcD9SPXgubWFwOnguYWxwaGFNYXAmJihSPXguYWxwaGFNYXApLHZvaWQgMCE9PVImJighMD09PVIubWF0cml4QXV0b1VwZGF0ZSYmUi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoUi5tYXRyaXgpKX0oeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9fX1mdW5jdGlvbiBqaShuPXt9KXtsZXQgdD12b2lkIDAhPT1uLmNhbnZhcz9uLmNhbnZhczpmdW5jdGlvbigpe2xldCBuPU14KCJjYW52YXMiKTtyZXR1cm4gbi5zdHlsZS5kaXNwbGF5PSJibG9jayIsbn0oKSxlPXZvaWQgMCE9PW4uY29udGV4dD9uLmNvbnRleHQ6bnVsbCxpPXZvaWQgMCE9PW4uYWxwaGEmJm4uYWxwaGEscj12b2lkIDA9PT1uLmRlcHRofHxuLmRlcHRoLG89dm9pZCAwPT09bi5zdGVuY2lsfHxuLnN0ZW5jaWwscz12b2lkIDAhPT1uLmFudGlhbGlhcyYmbi5hbnRpYWxpYXMsYT12b2lkIDA9PT1uLnByZW11bHRpcGxpZWRBbHBoYXx8bi5wcmVtdWx0aXBsaWVkQWxwaGEsbD12b2lkIDAhPT1uLnByZXNlcnZlRHJhd2luZ0J1ZmZlciYmbi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsYz12b2lkIDAhPT1uLnBvd2VyUHJlZmVyZW5jZT9uLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsZD12b2lkIDAhPT1uLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQmJm4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx1PW51bGwscD1udWxsLGY9W10sbT1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPV9wLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1mcCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgYj10aGlzLE09ITEseT0wLHg9MCxSPW51bGwsQT0tMSxWPW51bGwsdGU9bmV3IFppLEs9bmV3IFppLHhlPW51bGwsWGU9dC53aWR0aCxEZT10LmhlaWdodCxEPTEscmU9bnVsbCxjZT1udWxsLGZlPW5ldyBaaSgwLDAsWGUsRGUpLGJlPW5ldyBaaSgwLDAsWGUsRGUpLG5lPSExLGRlPW5ldyBaMCxwZT0hMSxqZT0hMSxDZT1udWxsLE5lPW5ldyB4bixsdD1uZXcgJCxNdD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIHB0KCl7cmV0dXJuIG51bGw9PT1SP0Q6MX1sZXQgd3Qsb24sdmUsbXQsZnQsb2Usc3QsWWUsX3QsdXQsc24sQ24sdGksa2ksRmksWixMLFZlLHZ0LGVuLExlLG1uLGxuLE9lPWU7ZnVuY3Rpb24gQW4oRSxIKXtmb3IobGV0IFk9MDtZPEUubGVuZ3RoO1krKyl7bGV0IHNlPXQuZ2V0Q29udGV4dChFW1ldLEgpO2lmKG51bGwhPT1zZSlyZXR1cm4gc2V9cmV0dXJuIG51bGx9dHJ5e2xldCBFPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6byxhbnRpYWxpYXM6cyxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OmR9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7ZFZ9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYWUsITEpLG51bGw9PT1PZSl7bGV0IEg9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKCEwPT09Yi5pc1dlYkdMMVJlbmRlcmVyJiZILnNoaWZ0KCksT2U9QW4oSCxFKSxudWxsPT09T2UpdGhyb3cgQW4oSCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX12b2lkIDA9PT1PZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihPZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEUpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrRS5tZXNzYWdlKSxFfWZ1bmN0aW9uIEZ0KCl7d3Q9bmV3IHhrZShPZSksb249bmV3IGhrZShPZSx3dCxuKSx3dC5pbml0KG9uKSxtbj1uZXcgWkZlKE9lLHd0LG9uKSx2ZT1uZXcgWEZlKE9lLHd0LG9uKSxtdD1uZXcgd2tlKE9lKSxmdD1uZXcgTEZlLG9lPW5ldyBRRmUoT2Usd3QsdmUsZnQsb24sbW4sbXQpLHN0PW5ldyBfa2UoYiksWWU9bmV3IHlrZShiKSxfdD1uZXcgVlJlKE9lLG9uKSxsbj1uZXcgZmtlKE9lLHd0LF90LG9uKSx1dD1uZXcgQ2tlKE9lLF90LG10LGxuKSxzbj1uZXcgRGtlKE9lLHV0LF90LG10KSx2dD1uZXcgVGtlKE9lLG9uLG9lKSxaPW5ldyBna2UoZnQpLENuPW5ldyBORmUoYixzdCxZZSx3dCxvbixsbixaKSx0aT1uZXcgSkZlKGZ0KSxraT1uZXcgVkZlLEZpPW5ldyBXRmUod3Qsb24pLFZlPW5ldyBwa2UoYixzdCx2ZSxzbixpLGEpLEw9bmV3IHN0ZShiLHNuLG9uKSxlbj1uZXcgbWtlKE9lLHd0LG10LG9uKSxMZT1uZXcgTWtlKE9lLHd0LG10LG9uKSxtdC5wcm9ncmFtcz1Dbi5wcm9ncmFtcyxiLmNhcGFiaWxpdGllcz1vbixiLmV4dGVuc2lvbnM9d3QsYi5wcm9wZXJ0aWVzPWZ0LGIucmVuZGVyTGlzdHM9a2ksYi5zaGFkb3dNYXA9TCxiLnN0YXRlPXZlLGIuaW5mbz1tdH1GdCgpO2xldCBQdD1uZXcgbEIoYixPZSk7ZnVuY3Rpb24gTG4oRSl7RS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksTT0hMH1mdW5jdGlvbiBhZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLE09ITE7bGV0IEU9bXQuYXV0b1Jlc2V0LEg9TC5lbmFibGVkLFk9TC5hdXRvVXBkYXRlLEo9TC5uZWVkc1VwZGF0ZSxzZT1MLnR5cGU7RnQoKSxtdC5hdXRvUmVzZXQ9RSxMLmVuYWJsZWQ9SCxMLmF1dG9VcGRhdGU9WSxMLm5lZWRzVXBkYXRlPUosTC50eXBlPXNlfWZ1bmN0aW9uIEp0KEUpe2xldCBIPUUudGFyZ2V0O0gucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSnQpLGZ1bmN0aW9uKEUpeyhmdW5jdGlvbihFKXtsZXQgSD1mdC5nZXQoRSkucHJvZ3JhbXM7dm9pZCAwIT09SCYmKEguZm9yRWFjaChmdW5jdGlvbihZKXtDbi5yZWxlYXNlUHJvZ3JhbShZKX0pLEUuaXNTaGFkZXJNYXRlcmlhbCYmQ24ucmVsZWFzZVNoYWRlckNhY2hlKEUpKX0pKEUpLGZ0LnJlbW92ZShFKX0oSCl9dGhpcy54cj1QdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2V9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2UuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IEU9d3QuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtFJiZFLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBFPXd0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7RSYmRS5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gRH0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKEUpe3ZvaWQgMCE9PUUmJihEPUUsdGhpcy5zZXRTaXplKFhlLERlLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihFKXtyZXR1cm4gRS5zZXQoWGUsRGUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oRSxILFkpe1B0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihYZT1FLERlPUgsdC53aWR0aD1NYXRoLmZsb29yKEUqRCksdC5oZWlnaHQ9TWF0aC5mbG9vcihIKkQpLCExIT09WSYmKHQuc3R5bGUud2lkdGg9RSsicHgiLHQuc3R5bGUuaGVpZ2h0PUgrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsRSxIKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuc2V0KFhlKkQsRGUqRCkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihFLEgsWSl7WGU9RSxEZT1ILEQ9WSx0LndpZHRoPU1hdGguZmxvb3IoRSpZKSx0LmhlaWdodD1NYXRoLmZsb29yKEgqWSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsRSxIKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29weSh0ZSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29weShmZSl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oRSxILFksSil7RS5pc1ZlY3RvcjQ/ZmUuc2V0KEUueCxFLnksRS56LEUudyk6ZmUuc2V0KEUsSCxZLEopLHZlLnZpZXdwb3J0KHRlLmNvcHkoZmUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29weShiZSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihFLEgsWSxKKXtFLmlzVmVjdG9yND9iZS5zZXQoRS54LEUueSxFLnosRS53KTpiZS5zZXQoRSxILFksSiksdmUuc2Npc3NvcihLLmNvcHkoYmUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5lfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKEUpe3ZlLnNldFNjaXNzb3JUZXN0KG5lPUUpfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oRSl7cmU9RX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oRSl7Y2U9RX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKEUpe3JldHVybiBFLmNvcHkoVmUuZ2V0Q2xlYXJDb2xvcigpKX0sdGhpcy5zZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7VmUuc2V0Q2xlYXJDb2xvci5hcHBseShWZSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gVmUuZ2V0Q2xlYXJBbHBoYSgpfSx0aGlzLnNldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtWZS5zZXRDbGVhckFscGhhLmFwcGx5KFZlLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oRSxILFkpe2xldCBKPTA7KHZvaWQgMD09PUV8fEUpJiYoSnw9MTYzODQpLCh2b2lkIDA9PT1IfHxIKSYmKEp8PTI1NiksKHZvaWQgMD09PVl8fFkpJiYoSnw9MTAyNCksT2UuY2xlYXIoSil9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYWUsITEpLGtpLmRpc3Bvc2UoKSxGaS5kaXNwb3NlKCksZnQuZGlzcG9zZSgpLHN0LmRpc3Bvc2UoKSxZZS5kaXNwb3NlKCksc24uZGlzcG9zZSgpLGxuLmRpc3Bvc2UoKSxDbi5kaXNwb3NlKCksUHQuZGlzcG9zZSgpLFB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsdWkpLFB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHVyKSxDZSYmKENlLmRpc3Bvc2UoKSxDZT1udWxsKSx6by5zdG9wKCl9LHRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKEUsSCxZLEosc2UsemUpe251bGw9PT1IJiYoSD1NdCk7bGV0IGV0PXNlLmlzTWVzaCYmc2UubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHFlPWZ1bmN0aW9uKEUsSCxZLEosc2UpeyEwIT09SC5pc1NjZW5lJiYoSD1NdCksb2UucmVzZXRUZXh0dXJlVW5pdHMoKTtsZXQgemU9SC5mb2cscWU9bnVsbD09PVI/Yi5vdXRwdXRFbmNvZGluZzohMD09PVIuaXNYUlJlbmRlclRhcmdldD9SLnRleHR1cmUuZW5jb2Rpbmc6X3AscnQ9KEouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ZZTpzdCkuZ2V0KEouZW52TWFwfHwoSi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0guZW52aXJvbm1lbnQ6bnVsbCkpLGR0PSEwPT09Si52ZXJ0ZXhDb2xvcnMmJiEhWS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09WS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplLFN0PSEhSi5ub3JtYWxNYXAmJiEhWS5hdHRyaWJ1dGVzLnRhbmdlbnQsRHQ9ISFZLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixjbj0hIVkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxHaT1ZLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9ZLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCx2aT1KLnRvbmVNYXBwZWQ/Yi50b25lTWFwcGluZzpmcCxwbj1mdC5nZXQoSiksUG49cC5zdGF0ZS5saWdodHM7ITAhPT1wZXx8ITAhPT1qZSYmRT09PVZ8fFouc2V0U3RhdGUoSixFLEU9PT1WJiZKLmlkPT09QSk7bGV0IEV0PSExO0oudmVyc2lvbj09PXBuLl9fdmVyc2lvbj8ocG4ubmVlZHNMaWdodHMmJnBuLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVBuLnN0YXRlLnZlcnNpb258fHBuLm91dHB1dEVuY29kaW5nIT09cWV8fHNlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1wbi5pbnN0YW5jaW5nfHwhc2UuaXNJbnN0YW5jZWRNZXNoJiYhMD09PXBuLmluc3RhbmNpbmd8fHNlLmlzU2tpbm5lZE1lc2gmJiExPT09cG4uc2tpbm5pbmd8fCFzZS5pc1NraW5uZWRNZXNoJiYhMD09PXBuLnNraW5uaW5nfHxwbi5lbnZNYXAhPT1ydHx8Si5mb2cmJnBuLmZvZyE9PXplfHx2b2lkIDAhPT1wbi5udW1DbGlwcGluZ1BsYW5lcyYmKHBuLm51bUNsaXBwaW5nUGxhbmVzIT09Wi5udW1QbGFuZXN8fHBuLm51bUludGVyc2VjdGlvbiE9PVoubnVtSW50ZXJzZWN0aW9uKXx8cG4udmVydGV4QWxwaGFzIT09ZHR8fHBuLnZlcnRleFRhbmdlbnRzIT09U3R8fHBuLm1vcnBoVGFyZ2V0cyE9PUR0fHxwbi5tb3JwaE5vcm1hbHMhPT1jbnx8cG4udG9uZU1hcHBpbmchPT12aXx8ITA9PT1vbi5pc1dlYkdMMiYmcG4ubW9ycGhUYXJnZXRzQ291bnQhPT1HaSkmJihFdD0hMCk6KEV0PSEwLHBuLl9fdmVyc2lvbj1KLnZlcnNpb24pO2xldCBwaT1wbi5jdXJyZW50UHJvZ3JhbTshMD09PUV0JiYocGk9eF8oSixILHNlKSk7bGV0IFFuPSExLFZuPSExLFduPSExLFV0PXBpLmdldFVuaWZvcm1zKCksTmk9cG4udW5pZm9ybXM7aWYodmUudXNlUHJvZ3JhbShwaS5wcm9ncmFtKSYmKFFuPSEwLFZuPSEwLFduPSEwKSxKLmlkIT09QSYmKEE9Si5pZCxWbj0hMCksUW58fFYhPT1FKXtpZihVdC5zZXRWYWx1ZShPZSwicHJvamVjdGlvbk1hdHJpeCIsRS5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZVdC5zZXRWYWx1ZShPZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coRS5mYXIrMSkvTWF0aC5MTjIpKSxWIT09RSYmKFY9RSxWbj0hMCxXbj0hMCksSi5pc1NoYWRlck1hdGVyaWFsfHxKLmlzTWVzaFBob25nTWF0ZXJpYWx8fEouaXNNZXNoVG9vbk1hdGVyaWFsfHxKLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEouZW52TWFwKXtsZXQgdm49VXQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PXZuJiZ2bi5zZXRWYWx1ZShPZSxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oRS5tYXRyaXhXb3JsZCkpfShKLmlzTWVzaFBob25nTWF0ZXJpYWx8fEouaXNNZXNoVG9vbk1hdGVyaWFsfHxKLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Si5pc01lc2hCYXNpY01hdGVyaWFsfHxKLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEouaXNTaGFkZXJNYXRlcmlhbCkmJlV0LnNldFZhbHVlKE9lLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1FLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoSi5pc01lc2hQaG9uZ01hdGVyaWFsfHxKLmlzTWVzaFRvb25NYXRlcmlhbHx8Si5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Si5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxKLmlzU2hhZGVyTWF0ZXJpYWx8fEouaXNTaGFkb3dNYXRlcmlhbHx8c2UuaXNTa2lubmVkTWVzaCkmJlV0LnNldFZhbHVlKE9lLCJ2aWV3TWF0cml4IixFLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoc2UuaXNTa2lubmVkTWVzaCl7VXQuc2V0T3B0aW9uYWwoT2Usc2UsImJpbmRNYXRyaXgiKSxVdC5zZXRPcHRpb25hbChPZSxzZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgdm49c2Uuc2tlbGV0b247dm4mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09dm4uYm9uZVRleHR1cmUmJnZuLmNvbXB1dGVCb25lVGV4dHVyZSgpLFV0LnNldFZhbHVlKE9lLCJib25lVGV4dHVyZSIsdm4uYm9uZVRleHR1cmUsb2UpLFV0LnNldFZhbHVlKE9lLCJib25lVGV4dHVyZVNpemUiLHZuLmJvbmVUZXh0dXJlU2l6ZSkpOlV0LnNldE9wdGlvbmFsKE9lLHZuLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFZJiYodm9pZCAwIT09WS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PVkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJnZ0LnVwZGF0ZShzZSxZLEoscGkpLChWbnx8cG4ucmVjZWl2ZVNoYWRvdyE9PXNlLnJlY2VpdmVTaGFkb3cpJiYocG4ucmVjZWl2ZVNoYWRvdz1zZS5yZWNlaXZlU2hhZG93LFV0LnNldFZhbHVlKE9lLCJyZWNlaXZlU2hhZG93IixzZS5yZWNlaXZlU2hhZG93KSksVm4mJihVdC5zZXRWYWx1ZShPZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsYi50b25lTWFwcGluZ0V4cG9zdXJlKSxwbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oRSxIKXtFLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPUgsRS5saWdodFByb2JlLm5lZWRzVXBkYXRlPUgsRS5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1ILEUuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9SCxFLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPUgsRS5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ILEUuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1ILEUuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ILEUucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9SCxFLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9SH0oTmksV24pLHplJiZKLmZvZyYmdGkucmVmcmVzaEZvZ1VuaWZvcm1zKE5pLHplKSx0aS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhOaSxKLEQsRGUsQ2UpLGdwLnVwbG9hZChPZSxwbi51bmlmb3Jtc0xpc3QsTmksb2UpKSxKLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Si51bmlmb3Jtc05lZWRVcGRhdGUmJihncC51cGxvYWQoT2UscG4udW5pZm9ybXNMaXN0LE5pLG9lKSxKLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksSi5pc1Nwcml0ZU1hdGVyaWFsJiZVdC5zZXRWYWx1ZShPZSwiY2VudGVyIixzZS5jZW50ZXIpLFV0LnNldFZhbHVlKE9lLCJtb2RlbFZpZXdNYXRyaXgiLHNlLm1vZGVsVmlld01hdHJpeCksVXQuc2V0VmFsdWUoT2UsIm5vcm1hbE1hdHJpeCIsc2Uubm9ybWFsTWF0cml4KSxVdC5zZXRWYWx1ZShPZSwibW9kZWxNYXRyaXgiLHNlLm1hdHJpeFdvcmxkKSxwaX0oRSxILFksSixzZSk7dmUuc2V0TWF0ZXJpYWwoSixldCk7bGV0IHJ0PVkuaW5kZXgsZHQ9WS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBTdD0xOyEwPT09Si53aXJlZnJhbWUmJihydD11dC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoWSksU3Q9MiksbG4uc2V0dXAoc2UsSixxZSxZLHJ0KTtsZXQgRHQsY249ZW47bnVsbCE9PXJ0JiYoRHQ9X3QuZ2V0KHJ0KSxjbj1MZSxjbi5zZXRJbmRleChEdCkpO2xldCBHaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQsdmk9WS5kcmF3UmFuZ2Uuc3RhcnQqU3QscG49WS5kcmF3UmFuZ2UuY291bnQqU3QsUG49bnVsbCE9PXplP3plLnN0YXJ0KlN0OjAsRXQ9bnVsbCE9PXplP3plLmNvdW50KlN0OjEvMCxwaT1NYXRoLm1heCh2aSxQbiksUW49TWF0aC5taW4oR2ksdmkrcG4sUG4rRXQpLTEsVm49TWF0aC5tYXgoMCxRbi1waSsxKTtpZigwIT09Vm4pe2lmKHNlLmlzTWVzaCkhMD09PUoud2lyZWZyYW1lPyh2ZS5zZXRMaW5lV2lkdGgoSi53aXJlZnJhbWVMaW5ld2lkdGgqcHQoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKHNlLmlzTGluZSl7bGV0IFduPUoubGluZXdpZHRoO3ZvaWQgMD09PVduJiYoV249MSksdmUuc2V0TGluZVdpZHRoKFduKnB0KCkpLGNuLnNldE1vZGUoc2UuaXNMaW5lU2VnbWVudHM/MTpzZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBzZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOnNlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKHNlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMocGksVm4sc2UuY291bnQpO2Vsc2UgaWYoWS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgV249TWF0aC5taW4oWS5pbnN0YW5jZUNvdW50LFkuX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhwaSxWbixXbil9ZWxzZSBjbi5yZW5kZXIocGksVm4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKEUsSCl7cD1GaS5nZXQoRSkscC5pbml0KCksbS5wdXNoKHApLEUudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKFkpe1kuaXNMaWdodCYmWS5sYXllcnMudGVzdChILmxheWVycykmJihwLnB1c2hMaWdodChZKSxZLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhZKSl9KSxwLnNldHVwTGlnaHRzKGIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEUudHJhdmVyc2UoZnVuY3Rpb24oWSl7bGV0IEo9WS5tYXRlcmlhbDtpZihKKWlmKEFycmF5LmlzQXJyYXkoSikpZm9yKGxldCBzZT0wO3NlPEoubGVuZ3RoO3NlKyspeF8oSltzZV0sRSxZKTtlbHNlIHhfKEosRSxZKX0pLG0ucG9wKCkscD1udWxsfTtsZXQgV2U9bnVsbDtmdW5jdGlvbiB1aSgpe3pvLnN0b3AoKX1mdW5jdGlvbiB1cigpe3pvLnN0YXJ0KCl9bGV0IHpvPW5ldyBaZWU7ZnVuY3Rpb24gQ3IoRSxILFksSil7aWYoITE9PT1FLnZpc2libGUpcmV0dXJuO2lmKEUubGF5ZXJzLnRlc3QoSC5sYXllcnMpKWlmKEUuaXNHcm91cClZPUUucmVuZGVyT3JkZXI7ZWxzZSBpZihFLmlzTE9EKSEwPT09RS5hdXRvVXBkYXRlJiZFLnVwZGF0ZShIKTtlbHNlIGlmKEUuaXNMaWdodClwLnB1c2hMaWdodChFKSxFLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhFKTtlbHNlIGlmKEUuaXNTcHJpdGUpe2lmKCFFLmZydXN0dW1DdWxsZWR8fGRlLmludGVyc2VjdHNTcHJpdGUoRSkpe0omJmx0LnNldEZyb21NYXRyaXhQb3NpdGlvbihFLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoTmUpO2xldCBldD1zbi51cGRhdGUoRSkscWU9RS5tYXRlcmlhbDtxZS52aXNpYmxlJiZ1LnB1c2goRSxldCxxZSxZLGx0LnosbnVsbCl9fWVsc2UgaWYoKEUuaXNNZXNofHxFLmlzTGluZXx8RS5pc1BvaW50cykmJihFLmlzU2tpbm5lZE1lc2gmJkUuc2tlbGV0b24uZnJhbWUhPT1tdC5yZW5kZXIuZnJhbWUmJihFLnNrZWxldG9uLnVwZGF0ZSgpLEUuc2tlbGV0b24uZnJhbWU9bXQucmVuZGVyLmZyYW1lKSwhRS5mcnVzdHVtQ3VsbGVkfHxkZS5pbnRlcnNlY3RzT2JqZWN0KEUpKSl7SiYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEUubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChOZSk7bGV0IGV0PXNuLnVwZGF0ZShFKSxxZT1FLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkocWUpKXtsZXQgcnQ9ZXQuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxTdD1ydC5sZW5ndGg7ZHQ8U3Q7ZHQrKyl7bGV0IER0PXJ0W2R0XSxjbj1xZVtEdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmdS5wdXNoKEUsZXQsY24sWSxsdC56LER0KX19ZWxzZSBxZS52aXNpYmxlJiZ1LnB1c2goRSxldCxxZSxZLGx0LnosbnVsbCl9bGV0IHplPUUuY2hpbGRyZW47Zm9yKGxldCBldD0wLHFlPXplLmxlbmd0aDtldDxxZTtldCsrKUNyKHplW2V0XSxILFksSil9ZnVuY3Rpb24gTWEoRSxILFksSil7bGV0IHNlPUUub3BhcXVlLHplPUUudHJhbnNtaXNzaXZlLGV0PUUudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcoWSksemUubGVuZ3RoPjAmJmZ1bmN0aW9uKEUsSCxZKXtudWxsPT09Q2UmJihDZT1uZXcoITA9PT1zJiYhMD09PW9uLmlzV2ViR0wyP3d4OkpzKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1tbi5jb252ZXJ0KFUwKT9VMDptcCxtaW5GaWx0ZXI6UUksbWFnRmlsdGVyOl9vLHdyYXBTOnlhLHdyYXBUOnlhLHVzZVJlbmRlclRvVGV4dHVyZTp3dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSkpO2xldCBKPWIuZ2V0UmVuZGVyVGFyZ2V0KCk7Yi5zZXRSZW5kZXJUYXJnZXQoQ2UpLGIuY2xlYXIoKTtsZXQgc2U9Yi50b25lTWFwcGluZztiLnRvbmVNYXBwaW5nPWZwLGRsKEUsSCxZKSxiLnRvbmVNYXBwaW5nPXNlLG9lLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KENlKSxvZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoQ2UpLGIuc2V0UmVuZGVyVGFyZ2V0KEopfShzZSxILFkpLEomJnZlLnZpZXdwb3J0KHRlLmNvcHkoSikpLHNlLmxlbmd0aD4wJiZkbChzZSxILFkpLHplLmxlbmd0aD4wJiZkbCh6ZSxILFkpLGV0Lmxlbmd0aD4wJiZkbChldCxILFkpfWZ1bmN0aW9uIGRsKEUsSCxZKXtsZXQgSj0hMD09PUguaXNTY2VuZT9ILm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IHNlPTAsemU9RS5sZW5ndGg7c2U8emU7c2UrKyl7bGV0IGV0PUVbc2VdLHFlPWV0Lm9iamVjdCxydD1ldC5nZW9tZXRyeSxkdD1udWxsPT09Sj9ldC5tYXRlcmlhbDpKLFN0PWV0Lmdyb3VwO3FlLmxheWVycy50ZXN0KFkubGF5ZXJzKSYmUEEocWUsSCxZLHJ0LGR0LFN0KX19ZnVuY3Rpb24gUEEoRSxILFksSixzZSx6ZSl7RS5vbkJlZm9yZVJlbmRlcihiLEgsWSxKLHNlLHplKSxFLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKFkubWF0cml4V29ybGRJbnZlcnNlLEUubWF0cml4V29ybGQpLEUubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChFLm1vZGVsVmlld01hdHJpeCksc2Uub25CZWZvcmVSZW5kZXIoYixILFksSixFLHplKSwhMD09PXNlLnRyYW5zcGFyZW50JiZzZS5zaWRlPT09cTA/KHNlLnNpZGU9Z28sc2UubmVlZHNVcGRhdGU9ITAsYi5yZW5kZXJCdWZmZXJEaXJlY3QoWSxILEosc2UsRSx6ZSksc2Uuc2lkZT15eCxzZS5uZWVkc1VwZGF0ZT0hMCxiLnJlbmRlckJ1ZmZlckRpcmVjdChZLEgsSixzZSxFLHplKSxzZS5zaWRlPXEwKTpiLnJlbmRlckJ1ZmZlckRpcmVjdChZLEgsSixzZSxFLHplKSxFLm9uQWZ0ZXJSZW5kZXIoYixILFksSixzZSx6ZSl9ZnVuY3Rpb24geF8oRSxILFkpeyEwIT09SC5pc1NjZW5lJiYoSD1NdCk7bGV0IEo9ZnQuZ2V0KEUpLHNlPXAuc3RhdGUubGlnaHRzLGV0PXNlLnN0YXRlLnZlcnNpb24scWU9Q24uZ2V0UGFyYW1ldGVycyhFLHNlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LEgsWSkscnQ9Q24uZ2V0UHJvZ3JhbUNhY2hlS2V5KHFlKSxkdD1KLnByb2dyYW1zO0ouZW52aXJvbm1lbnQ9RS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0guZW52aXJvbm1lbnQ6bnVsbCxKLmZvZz1ILmZvZyxKLmVudk1hcD0oRS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOnN0KS5nZXQoRS5lbnZNYXB8fEouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoRS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxKLnByb2dyYW1zPWR0KTtsZXQgU3Q9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1TdCl7aWYoSi5jdXJyZW50UHJvZ3JhbT09PVN0JiZKLmxpZ2h0c1N0YXRlVmVyc2lvbj09PWV0KXJldHVybiBlQyhFLHFlKSxTdH1lbHNlIHFlLnVuaWZvcm1zPUNuLmdldFVuaWZvcm1zKEUpLEUub25CdWlsZChZLHFlLGIpLEUub25CZWZvcmVDb21waWxlKHFlLGIpLFN0PUNuLmFjcXVpcmVQcm9ncmFtKHFlLHJ0KSxkdC5zZXQocnQsU3QpLEoudW5pZm9ybXM9cWUudW5pZm9ybXM7bGV0IER0PUoudW5pZm9ybXM7KCFFLmlzU2hhZGVyTWF0ZXJpYWwmJiFFLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09RS5jbGlwcGluZykmJihEdC5jbGlwcGluZ1BsYW5lcz1aLnVuaWZvcm0pLGVDKEUscWUpLEoubmVlZHNMaWdodHM9ZnVuY3Rpb24oRSl7cmV0dXJuIEUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxFLmlzTWVzaFRvb25NYXRlcmlhbHx8RS5pc01lc2hQaG9uZ01hdGVyaWFsfHxFLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEUuaXNTaGFkb3dNYXRlcmlhbHx8RS5pc1NoYWRlck1hdGVyaWFsJiYhMD09PUUubGlnaHRzfShFKSxKLmxpZ2h0c1N0YXRlVmVyc2lvbj1ldCxKLm5lZWRzTGlnaHRzJiYoRHQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9c2Uuc3RhdGUuYW1iaWVudCxEdC5saWdodFByb2JlLnZhbHVlPXNlLnN0YXRlLnByb2JlLER0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPXNlLnN0YXRlLmRpcmVjdGlvbmFsLER0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPXNlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LER0LnNwb3RMaWdodHMudmFsdWU9c2Uuc3RhdGUuc3BvdCxEdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPXNlLnN0YXRlLnNwb3RTaGFkb3csRHQucmVjdEFyZWFMaWdodHMudmFsdWU9c2Uuc3RhdGUucmVjdEFyZWEsRHQubHRjXzEudmFsdWU9c2Uuc3RhdGUucmVjdEFyZWFMVEMxLER0Lmx0Y18yLnZhbHVlPXNlLnN0YXRlLnJlY3RBcmVhTFRDMixEdC5wb2ludExpZ2h0cy52YWx1ZT1zZS5zdGF0ZS5wb2ludCxEdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1zZS5zdGF0ZS5wb2ludFNoYWRvdyxEdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPXNlLnN0YXRlLmhlbWksRHQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9c2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsRHQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9c2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsRHQuc3BvdFNoYWRvd01hcC52YWx1ZT1zZS5zdGF0ZS5zcG90U2hhZG93TWFwLER0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9c2Uuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxEdC5wb2ludFNoYWRvd01hcC52YWx1ZT1zZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxEdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1zZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVN0LmdldFVuaWZvcm1zKCksR2k9Z3Auc2VxV2l0aFZhbHVlKGNuLnNlcSxEdCk7cmV0dXJuIEouY3VycmVudFByb2dyYW09U3QsSi51bmlmb3Jtc0xpc3Q9R2ksU3R9ZnVuY3Rpb24gZUMoRSxIKXtsZXQgWT1mdC5nZXQoRSk7WS5vdXRwdXRFbmNvZGluZz1ILm91dHB1dEVuY29kaW5nLFkuaW5zdGFuY2luZz1ILmluc3RhbmNpbmcsWS5za2lubmluZz1ILnNraW5uaW5nLFkubW9ycGhUYXJnZXRzPUgubW9ycGhUYXJnZXRzLFkubW9ycGhOb3JtYWxzPUgubW9ycGhOb3JtYWxzLFkubW9ycGhUYXJnZXRzQ291bnQ9SC5tb3JwaFRhcmdldHNDb3VudCxZLm51bUNsaXBwaW5nUGxhbmVzPUgubnVtQ2xpcHBpbmdQbGFuZXMsWS5udW1JbnRlcnNlY3Rpb249SC5udW1DbGlwSW50ZXJzZWN0aW9uLFkudmVydGV4QWxwaGFzPUgudmVydGV4QWxwaGFzLFkudmVydGV4VGFuZ2VudHM9SC52ZXJ0ZXhUYW5nZW50cyxZLnRvbmVNYXBwaW5nPUgudG9uZU1hcHBpbmd9em8uc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihFKXtXZSYmV2UoRSl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmem8uc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihFKXtXZT1FLFB0LnNldEFuaW1hdGlvbkxvb3AoRSksbnVsbD09PUU/em8uc3RvcCgpOnpvLnN0YXJ0KCl9LFB0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsdWkpLFB0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHVyKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihFLEgpe2lmKHZvaWQgMD09PUh8fCEwPT09SC5pc0NhbWVyYSl7aWYoITAhPT1NKXtpZighMD09PUUuYXV0b1VwZGF0ZSYmRS51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1ILnBhcmVudCYmSC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09UHQuZW5hYmxlZCYmITA9PT1QdC5pc1ByZXNlbnRpbmcmJighMD09PVB0LmNhbWVyYUF1dG9VcGRhdGUmJlB0LnVwZGF0ZUNhbWVyYShIKSxIPVB0LmdldENhbWVyYSgpKSwhMD09PUUuaXNTY2VuZSYmRS5vbkJlZm9yZVJlbmRlcihiLEUsSCxSKSxwPUZpLmdldChFLG0ubGVuZ3RoKSxwLmluaXQoKSxtLnB1c2gocCksTmUubXVsdGlwbHlNYXRyaWNlcyhILnByb2plY3Rpb25NYXRyaXgsSC5tYXRyaXhXb3JsZEludmVyc2UpLGRlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KE5lKSxqZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLHBlPVouaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLGplLEgpLHU9a2kuZ2V0KEUsZi5sZW5ndGgpLHUuaW5pdCgpLGYucHVzaCh1KSxDcihFLEgsMCxiLnNvcnRPYmplY3RzKSx1LmZpbmlzaCgpLCEwPT09Yi5zb3J0T2JqZWN0cyYmdS5zb3J0KHJlLGNlKSwhMD09PXBlJiZaLmJlZ2luU2hhZG93cygpLEwucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LEUsSCksITA9PT1wZSYmWi5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxWZS5yZW5kZXIodSxFKSxwLnNldHVwTGlnaHRzKGIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEguaXNBcnJheUNhbWVyYSl7bGV0IEo9SC5jYW1lcmFzO2ZvcihsZXQgc2U9MCx6ZT1KLmxlbmd0aDtzZTx6ZTtzZSsrKXtsZXQgZXQ9SltzZV07TWEodSxFLGV0LGV0LnZpZXdwb3J0KX19ZWxzZSBNYSh1LEUsSCk7bnVsbCE9PVImJihvZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChSKSxvZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoUikpLCEwPT09RS5pc1NjZW5lJiZFLm9uQWZ0ZXJSZW5kZXIoYixFLEgpLHZlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksdmUuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSx2ZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLHZlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksQT0tMSxWPW51bGwsbS5wb3AoKSxwPW0ubGVuZ3RoPjA/bVttLmxlbmd0aC0xXTpudWxsLGYucG9wKCksdT1mLmxlbmd0aD4wP2ZbZi5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB4fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBSfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKEUsSCxZKXtmdC5nZXQoRS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1ILGZ0LmdldChFLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9WTtsZXQgSj1mdC5nZXQoRSk7Si5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsSi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihKLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09WSxKLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEUudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxFLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxFLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEUsSCl7bGV0IFk9ZnQuZ2V0KEUpO1kuX193ZWJnbEZyYW1lYnVmZmVyPUgsWS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1IfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihFLEg9MCxZPTApe1I9RSx5PUgseD1ZO2xldCBKPSEwO2lmKEUpe2xldCBydD1mdC5nZXQoRSk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KHZlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxKPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/b2Uuc2V0dXBSZW5kZXJUYXJnZXQoRSk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZvZS5yZWJpbmRUZXh0dXJlcyhFLGZ0LmdldChFLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGZ0LmdldChFLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBzZT1udWxsLHplPSExLGV0PSExO2lmKEUpe2xldCBydD1FLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoZXQ9ITApO2xldCBkdD1mdC5nZXQoRSkuX193ZWJnbEZyYW1lYnVmZmVyO0UuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KHNlPWR0W0hdLHplPSEwKTpzZT1FLnVzZVJlbmRlcmJ1ZmZlcj9mdC5nZXQoRSkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LHRlLmNvcHkoRS52aWV3cG9ydCksSy5jb3B5KEUuc2Npc3NvcikseGU9RS5zY2lzc29yVGVzdH1lbHNlIHRlLmNvcHkoZmUpLm11bHRpcGx5U2NhbGFyKEQpLmZsb29yKCksSy5jb3B5KGJlKS5tdWx0aXBseVNjYWxhcihEKS5mbG9vcigpLHhlPW5lO2lmKHZlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxzZSkmJm9uLmRyYXdCdWZmZXJzJiZKJiZ2ZS5kcmF3QnVmZmVycyhFLHNlKSx2ZS52aWV3cG9ydCh0ZSksdmUuc2Npc3NvcihLKSx2ZS5zZXRTY2lzc29yVGVzdCh4ZSksemUpe2xldCBydD1mdC5nZXQoRS50ZXh0dXJlKTtPZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStILHJ0Ll9fd2ViZ2xUZXh0dXJlLFkpfWVsc2UgaWYoZXQpe2xldCBydD1mdC5nZXQoRS50ZXh0dXJlKTtPZS5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcigzNjE2MCwzNjA2NCxydC5fX3dlYmdsVGV4dHVyZSxZfHwwLEh8fDApfUE9LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihFLEgsWSxKLHNlLHplLGV0KXtpZighRXx8IUUuaXNXZWJHTFJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7bGV0IHFlPWZ0LmdldChFKS5fX3dlYmdsRnJhbWVidWZmZXI7aWYoRS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmdm9pZCAwIT09ZXQmJihxZT1xZVtldF0pLHFlKXt2ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscWUpO3RyeXtsZXQgcnQ9RS50ZXh0dXJlLGR0PXJ0LmZvcm1hdCxTdD1ydC50eXBlO2lmKGR0IT09Z3MmJm1uLmNvbnZlcnQoZHQpIT09T2UuZ2V0UGFyYW1ldGVyKDM1NzM5KSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtsZXQgRHQ9U3Q9PT1VMCYmKHd0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fG9uLmlzV2ViR0wyJiZ3dC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSk7aWYoIShTdD09PW1wfHxtbi5jb252ZXJ0KFN0KT09PU9lLmdldFBhcmFtZXRlcigzNTczOCl8fFN0PT09Y20mJihvbi5pc1dlYkdMMnx8d3QuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHx3dC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKXx8RHQpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTszNjA1Mz09PU9lLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApP0g+PTAmJkg8PUUud2lkdGgtSiYmWT49MCYmWTw9RS5oZWlnaHQtc2UmJk9lLnJlYWRQaXhlbHMoSCxZLEosc2UsbW4uY29udmVydChkdCksbW4uY29udmVydChTdCksemUpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBydD1udWxsIT09Uj9mdC5nZXQoUikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7dmUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHJ0KX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihFLEgsWT0wKXtpZighMCE9PUguaXNGcmFtZWJ1ZmZlclRleHR1cmUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtsZXQgSj1NYXRoLnBvdygyLC1ZKSxzZT1NYXRoLmZsb29yKEguaW1hZ2Uud2lkdGgqSiksemU9TWF0aC5mbG9vcihILmltYWdlLmhlaWdodCpKKTtvZS5zZXRUZXh0dXJlMkQoSCwwKSxPZS5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEUueCxFLnksc2UsemUpLHZlLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZT1mdW5jdGlvbihFLEgsWSxKPTApe2xldCBzZT1ILmltYWdlLndpZHRoLHplPUguaW1hZ2UuaGVpZ2h0LGV0PW1uLmNvbnZlcnQoWS5mb3JtYXQpLHFlPW1uLmNvbnZlcnQoWS50eXBlKTtvZS5zZXRUZXh0dXJlMkQoWSwwKSxPZS5waXhlbFN0b3JlaSgzNzQ0MCxZLmZsaXBZKSxPZS5waXhlbFN0b3JlaSgzNzQ0MSxZLnByZW11bHRpcGx5QWxwaGEpLE9lLnBpeGVsU3RvcmVpKDMzMTcsWS51bnBhY2tBbGlnbm1lbnQpLEguaXNEYXRhVGV4dHVyZT9PZS50ZXhTdWJJbWFnZTJEKDM1NTMsSixFLngsRS55LHNlLHplLGV0LHFlLEguaW1hZ2UuZGF0YSk6SC5pc0NvbXByZXNzZWRUZXh0dXJlP09lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsSixFLngsRS55LEgubWlwbWFwc1swXS53aWR0aCxILm1pcG1hcHNbMF0uaGVpZ2h0LGV0LEgubWlwbWFwc1swXS5kYXRhKTpPZS50ZXhTdWJJbWFnZTJEKDM1NTMsSixFLngsRS55LGV0LHFlLEguaW1hZ2UpLDA9PT1KJiZZLmdlbmVyYXRlTWlwbWFwcyYmT2UuZ2VuZXJhdGVNaXBtYXAoMzU1MyksdmUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oRSxILFksSixzZT0wKXtpZihiLmlzV2ViR0wxUmVuZGVyZXIpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7bGV0IFN0LHplPUUubWF4LngtRS5taW4ueCsxLGV0PUUubWF4LnktRS5taW4ueSsxLHFlPUUubWF4LnotRS5taW4ueisxLHJ0PW1uLmNvbnZlcnQoSi5mb3JtYXQpLGR0PW1uLmNvbnZlcnQoSi50eXBlKTtpZihKLmlzRGF0YVRleHR1cmUzRClvZS5zZXRUZXh0dXJlM0QoSiwwKSxTdD0zMjg3OTtlbHNle2lmKCFKLmlzRGF0YVRleHR1cmUyREFycmF5KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtvZS5zZXRUZXh0dXJlMkRBcnJheShKLDApLFN0PTM1ODY2fU9lLnBpeGVsU3RvcmVpKDM3NDQwLEouZmxpcFkpLE9lLnBpeGVsU3RvcmVpKDM3NDQxLEoucHJlbXVsdGlwbHlBbHBoYSksT2UucGl4ZWxTdG9yZWkoMzMxNyxKLnVucGFja0FsaWdubWVudCk7bGV0IER0PU9lLmdldFBhcmFtZXRlcigzMzE0KSxjbj1PZS5nZXRQYXJhbWV0ZXIoMzI4NzgpLEdpPU9lLmdldFBhcmFtZXRlcigzMzE2KSx2aT1PZS5nZXRQYXJhbWV0ZXIoMzMxNSkscG49T2UuZ2V0UGFyYW1ldGVyKDMyODc3KSxQbj1ZLmlzQ29tcHJlc3NlZFRleHR1cmU/WS5taXBtYXBzWzBdOlkuaW1hZ2U7T2UucGl4ZWxTdG9yZWkoMzMxNCxQbi53aWR0aCksT2UucGl4ZWxTdG9yZWkoMzI4NzgsUG4uaGVpZ2h0KSxPZS5waXhlbFN0b3JlaSgzMzE2LEUubWluLngpLE9lLnBpeGVsU3RvcmVpKDMzMTUsRS5taW4ueSksT2UucGl4ZWxTdG9yZWkoMzI4NzcsRS5taW4ueiksWS5pc0RhdGFUZXh0dXJlfHxZLmlzRGF0YVRleHR1cmUzRD9PZS50ZXhTdWJJbWFnZTNEKFN0LHNlLEgueCxILnksSC56LHplLGV0LHFlLHJ0LGR0LFBuLmRhdGEpOlkuaXNDb21wcmVzc2VkVGV4dHVyZT8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IHVudGVzdGVkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgc3JjVGV4dHVyZS4iKSxPZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChTdCxzZSxILngsSC55LEgueix6ZSxldCxxZSxydCxQbi5kYXRhKSk6T2UudGV4U3ViSW1hZ2UzRChTdCxzZSxILngsSC55LEgueix6ZSxldCxxZSxydCxkdCxQbiksT2UucGl4ZWxTdG9yZWkoMzMxNCxEdCksT2UucGl4ZWxTdG9yZWkoMzI4NzgsY24pLE9lLnBpeGVsU3RvcmVpKDMzMTYsR2kpLE9lLnBpeGVsU3RvcmVpKDMzMTUsdmkpLE9lLnBpeGVsU3RvcmVpKDMyODc3LHBuKSwwPT09c2UmJkouZ2VuZXJhdGVNaXBtYXBzJiZPZS5nZW5lcmF0ZU1pcG1hcChTdCksdmUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKEUpe29lLnNldFRleHR1cmUyRChFLDApLHZlLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7eT0wLHg9MCxSPW51bGwsdmUucmVzZXQoKSxsbi5yZXNldCgpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9amkucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJlcj0hMCxjbGFzcyBleHRlbmRzIGppe30ucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXI9ITA7dmFyIEF4PWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yNWUtNSl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGFuKHQpLHRoaXMuZGVuc2l0eT1lfWNsb25lKCl7cmV0dXJuIG5ldyBBeCh0aGlzLmNvbG9yLHRoaXMuZGVuc2l0eSl9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZ0V4cDIiLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksZGVuc2l0eTp0aGlzLmRlbnNpdHl9fX07QXgucHJvdG90eXBlLmlzRm9nRXhwMj0hMDt2YXIgUng9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTEsaT0xZTMpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBhbih0KSx0aGlzLm5lYXI9ZSx0aGlzLmZhcj1pfWNsb25lKCl7cmV0dXJuIG5ldyBSeCh0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX07UngucHJvdG90eXBlLmlzRm9nPSEwO3ZhciBKMD1jbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXzwidSImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLG51bGwhPT10LmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLG51bGwhPT10LmVudmlyb25tZW50JiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLG51bGwhPT10LmZvZyYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLG51bGwhPT10Lm92ZXJyaWRlTWF0ZXJpYWwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIG51bGwhPT10aGlzLmZvZyYmKGUub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSksZX19O0owLnByb3RvdHlwZS5pc1NjZW5lPSEwO3ZhciBobT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1lLHRoaXMuY291bnQ9dm9pZCAwIT09dD90Lmxlbmd0aC9lOjAsdGhpcy51c2FnZT1DeCx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTAsdGhpcy51dWlkPUpsKCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLnN0cmlkZSxpKj1lLnN0cmlkZTtmb3IobGV0IHI9MCxvPXRoaXMuc3RyaWRlO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Y2xvbmUodCl7dm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1KbCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2xldCBlPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLHRoaXMuc3RyaWRlKTtyZXR1cm4gaS5zZXRVc2FnZSh0aGlzLnVzYWdlKSxpfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdm9pZCAwPT09dC5hcnJheUJ1ZmZlcnMmJih0LmFycmF5QnVmZmVycz17fSksdm9pZCAwPT09dGhpcy5hcnJheS5idWZmZXIuX3V1aWQmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1KbCgpKSx2b2lkIDA9PT10LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0mJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19O2htLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBacj1uZXcgJCxnbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMub2Zmc2V0PWksdGhpcy5ub3JtYWxpemVkPSEwPT09cn1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuZGF0YS5jb3VudDtlPGk7ZSsrKVpyLng9dGhpcy5nZXRYKGUpLFpyLnk9dGhpcy5nZXRZKGUpLFpyLno9dGhpcy5nZXRaKGUpLFpyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLFpyLngsWnIueSxaci56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylaci54PXRoaXMuZ2V0WChlKSxaci55PXRoaXMuZ2V0WShlKSxaci56PXRoaXMuZ2V0WihlKSxaci5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLFpyLngsWnIueSxaci56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspWnIueD10aGlzLmdldFgoZSksWnIueT10aGlzLmdldFkoZSksWnIuej10aGlzLmdldFooZSksWnIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsWnIueCxaci55LFpyLnopO3JldHVybiB0aGlzfXNldFgodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZSx0aGlzfXNldFkodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1lLHRoaXN9c2V0Wih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWUsdGhpc31zZXRXKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQsZSxpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXN9c2V0WFlaKHQsZSxpLHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixvKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybiBuZXcgUHIobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoZSksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgZ20odC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX10b0pTT04odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgbz0wO288dGhpcy5pdGVtU2l6ZTtvKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK29dKX1yZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTplLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07Z20ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIFJJPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07UkkucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIGswLGN4PW5ldyAkLEYwPW5ldyAkLE4wPW5ldyAkLEwwPW5ldyAkZSxkeD1uZXcgJGUsYXRlPW5ldyB4bixyST1uZXcgJCx1eD1uZXcgJCxvST1uZXcgJCxiZWU9bmV3ICRlLGozPW5ldyAkZSx2ZWU9bmV3ICRlO2Z1bmN0aW9uIHNJKG4sdCxlLGkscixvKXtMMC5zdWJWZWN0b3JzKG4sZSkuYWRkU2NhbGFyKC41KS5tdWx0aXBseShpKSx2b2lkIDAhPT1yPyhkeC54PW8qTDAueC1yKkwwLnksZHgueT1yKkwwLngrbypMMC55KTpkeC5jb3B5KEwwKSxuLmNvcHkodCksbi54Kz1keC54LG4ueSs9ZHgueSxuLmFwcGx5TWF0cml4NChhdGUpfShjbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PWswKXtrMD1uZXcgVWk7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgaG0oZSw1KTtrMC5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxrMC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZ20oaSwzLDAsITEpKSxrMC5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZ20oaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PWswLHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyBSSSx0aGlzLmNlbnRlcj1uZXcgJGUoLjUsLjUpfXJheWNhc3QodCxlKXtudWxsPT09dC5jYW1lcmEmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxGMC5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksYXRlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE4wLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmITE9PT10aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiYmRjAubXVsdGlwbHlTY2FsYXIoLU4wLnopO2xldCByLG8saT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uOzAhPT1pJiYobz1NYXRoLmNvcyhpKSxyPU1hdGguc2luKGkpKTtsZXQgcz10aGlzLmNlbnRlcjtzSShySS5zZXQoLS41LC0uNSwwKSxOMCxzLEYwLHIsbyksc0kodXguc2V0KC41LC0uNSwwKSxOMCxzLEYwLHIsbyksc0kob0kuc2V0KC41LC41LDApLE4wLHMsRjAscixvKSxiZWUuc2V0KDAsMCksajMuc2V0KDEsMCksdmVlLnNldCgxLDEpO2xldCBhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKHJJLHV4LG9JLCExLGN4KTtpZihudWxsPT09YSYmKHNJKHV4LnNldCgtLjUsLjUsMCksTjAscyxGMCxyLG8pLGozLnNldCgwLDEpLGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUockksb0ksdXgsITEsY3gpLG51bGw9PT1hKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oY3gpO2w8dC5uZWFyfHxsPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6Y3guY2xvbmUoKSx1djpWci5nZXRVVihjeCxySSx1eCxvSSxiZWUsajMsdmVlLG5ldyAkZSksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSkucHJvdG90eXBlLmlzU3ByaXRlPSEwO3ZhciB5ZWU9bmV3ICQseGVlPW5ldyBaaSxDZWU9bmV3IFppLGUyZT1uZXcgJCxNZWU9bmV3IHhuLFBJPWNsYXNzIGV4dGVuZHMgYW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IHhuLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IHhufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxlKXt0aGlzLnNrZWxldG9uPXQsdm9pZCAwPT09ZSYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KGUpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShlKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgWmksZT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IGk9MCxyPWUuY291bnQ7aTxyO2krKyl7dC54PWUuZ2V0WChpKSx0Lnk9ZS5nZXRZKGkpLHQuej1lLmdldFooaSksdC53PWUuZ2V0VyhpKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhpLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLCJhdHRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKToiZGV0YWNoZWQiPT09dGhpcy5iaW5kTW9kZT90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LGUpe2xldCBpPXRoaXMuc2tlbGV0b24scj10aGlzLmdlb21ldHJ5O3hlZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksQ2VlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCkseWVlLmNvcHkoZSkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBzPUNlZS5nZXRDb21wb25lbnQobyk7aWYoMCE9PXMpe2xldCBhPXhlZS5nZXRDb21wb25lbnQobyk7TWVlLm11bHRpcGx5TWF0cmljZXMoaS5ib25lc1thXS5tYXRyaXhXb3JsZCxpLmJvbmVJbnZlcnNlc1thXSksZS5hZGRTY2FsZWRWZWN0b3IoZTJlLmNvcHkoeWVlKS5hcHBseU1hdHJpeDQoTWVlKSxzKX19cmV0dXJuIGUuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07UEkucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITAsY2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJCb25lIn19LnByb3RvdHlwZS5pc0JvbmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLG8scyxhLGwsYz1fbyxkPV9vLHUscCl7c3VwZXIobnVsbCxzLGEsbCxjLGQscixvLHUscCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9ZCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgUHg9Y2xhc3MgZXh0ZW5kcyBQcntjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpeyJudW1iZXIiPT10eXBlb2YgaSYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07UHgucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciB3ZWU9bmV3IHhuLFNlZT1uZXcgeG4sYUk9W10scHg9bmV3IGFvOyhjbGFzcyBleHRlbmRzIGFve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IFB4KG5ldyBGbG9hdDMyQXJyYXkoMTYqaSksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksbnVsbCE9PXQuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYocHguZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxweC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHZvaWQgMCE9PXB4Lm1hdGVyaWFsKWZvcihsZXQgbz0wO288cjtvKyspe3RoaXMuZ2V0TWF0cml4QXQobyx3ZWUpLFNlZS5tdWx0aXBseU1hdHJpY2VzKGksd2VlKSxweC5tYXRyaXhXb3JsZD1TZWUscHgucmF5Y2FzdCh0LGFJKTtmb3IobGV0IHM9MCxhPWFJLmxlbmd0aDtzPGE7cysrKXtsZXQgbD1hSVtzXTtsLmluc3RhbmNlSWQ9byxsLm9iamVjdD10aGlzLGUucHVzaChsKX1hSS5sZW5ndGg9MH19c2V0Q29sb3JBdCh0LGUpe251bGw9PT10aGlzLmluc3RhbmNlQ29sb3ImJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IFB4KG5ldyBGbG9hdDMyQXJyYXkoMyp0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KSwzKSksZS50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSwzKnQpfXNldE1hdHJpeEF0KHQsZSl7ZS50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksMTYqdCl9dXBkYXRlTW9ycGhUYXJnZXRzKCl7fWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaD0hMDt2YXIgV2Q9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMubGluZWNhcD0icm91bmQiLHRoaXMubGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmxpbmV3aWR0aD10LmxpbmV3aWR0aCx0aGlzLmxpbmVjYXA9dC5saW5lY2FwLHRoaXMubGluZWpvaW49dC5saW5lam9pbix0aGlzfX07V2QucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITA7dmFyIEVlZT1uZXcgJCxUZWU9bmV3ICQsRGVlPW5ldyB4bixHMz1uZXcgdnAsbEk9bmV3IGJwLE94PWNsYXNzIGV4dGVuZHMgQml7Y29uc3RydWN0b3IodD1uZXcgVWksZT1uZXcgV2Qpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9WzBdO2ZvcihsZXQgcj0xLG89ZS5jb3VudDtyPG87cisrKUVlZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxUZWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIpLGlbcl09aVtyLTFdLGlbcl0rPUVlZS5kaXN0YW5jZVRvKFRlZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IE5yKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuTGluZS50aHJlc2hvbGQscz1pLmRyYXdSYW5nZTtpZihudWxsPT09aS5ib3VuZGluZ1NwaGVyZSYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxsSS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLGxJLmFwcGx5TWF0cml4NChyKSxsSS5yYWRpdXMrPW8sITE9PT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKGxJKSlyZXR1cm47RGVlLmNvcHkocikuaW52ZXJ0KCksRzMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KERlZSk7bGV0IGE9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYSxjPW5ldyAkLGQ9bmV3ICQsdT1uZXcgJCxwPW5ldyAkLGY9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgbT1pLmluZGV4LE09aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1tKWZvcihsZXQgUj1NYXRoLm1heCgwLHMuc3RhcnQpLEE9TWF0aC5taW4obS5jb3VudCxzLnN0YXJ0K3MuY291bnQpLTE7UjxBO1IrPWYpe2xldCBWPW0uZ2V0WChSKSx0ZT1tLmdldFgoUisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoTSxWKSxkLmZyb21CdWZmZXJBdHRyaWJ1dGUoTSx0ZSksRzMuZGlzdGFuY2VTcVRvU2VnbWVudChjLGQscCx1KT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCB4ZT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTt4ZTx0Lm5lYXJ8fHhlPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnhlLHBvaW50OnUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6UixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX1lbHNlIGZvcihsZXQgUj1NYXRoLm1heCgwLHMuc3RhcnQpLEE9TWF0aC5taW4oTS5jb3VudCxzLnN0YXJ0K3MuY291bnQpLTE7UjxBO1IrPWYpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShNLFIpLGQuZnJvbUJ1ZmZlckF0dHJpYnV0ZShNLFIrMSksRzMuZGlzdGFuY2VTcVRvU2VnbWVudChjLGQscCx1KT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCB0ZT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTt0ZTx0Lm5lYXJ8fHRlPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOnRlLHBvaW50OnUuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6UixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07T3gucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgSWVlPW5ldyAkLEFlZT1uZXcgJCxreD1jbGFzcyBleHRlbmRzIE94e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZihudWxsPT09dC5pbmRleCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9W107Zm9yKGxldCByPTAsbz1lLmNvdW50O3I8bztyKz0yKUllZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksQWVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKzEpLGlbcl09MD09PXI/MDppW3ItMV0saVtyKzFdPWlbcl0rSWVlLmRpc3RhbmNlVG8oQWVlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgTnIoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtreC5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITAsY2xhc3MgZXh0ZW5kcyBPeHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fS5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgT0k9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07T0kucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyIFJlZT1uZXcgeG4saEI9bmV3IHZwLGNJPW5ldyBicCxkST1uZXcgJDtmdW5jdGlvbiBQZWUobix0LGUsaSxyLG8scyl7bGV0IGE9aEIuZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgJDtoQi5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpzfSl9fShjbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQ9bmV3IFVpLGU9bmV3IE9JKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGNJLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksY0kuYXBwbHlNYXRyaXg0KHIpLGNJLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoY0kpKXJldHVybjtSZWUuY29weShyKS5pbnZlcnQoKSxoQi5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoUmVlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGM9aS5pbmRleCx1PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09Yylmb3IobGV0IG09TWF0aC5tYXgoMCxzLnN0YXJ0KSxiPU1hdGgubWluKGMuY291bnQscy5zdGFydCtzLmNvdW50KTttPGI7bSsrKXtsZXQgTT1jLmdldFgobSk7ZEkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh1LE0pLFBlZShkSSxNLGwscix0LGUsdGhpcyl9ZWxzZSBmb3IobGV0IG09TWF0aC5tYXgoMCxzLnN0YXJ0KSxiPU1hdGgubWluKHUuY291bnQscy5zdGFydCtzLmNvdW50KTttPGI7bSsrKWRJLmZyb21CdWZmZXJBdHRyaWJ1dGUodSxtKSxQZWUoZEksbSxsLHIsdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX0pLnByb3RvdHlwZS5pc1BvaW50cz0hMCxjbGFzcyBleHRlbmRzIGxve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjKXtzdXBlcih0LGUsaSxyLG8scyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09cz9zOiRvLHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PW8/bzokbyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgZD10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhmdW5jdGlvbiB1KCl7ZC5uZWVkc1VwZGF0ZT0hMCx0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sodSl9KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09MCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OmV9KSx0aGlzLmZvcm1hdD1pLHRoaXMubWFnRmlsdGVyPV9vLHRoaXMubWluRmlsdGVyPV9vLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBsb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyxkLHUscCl7c3VwZXIobnVsbCxzLGEsbCxjLGQscixvLHUscCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19LnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgbG97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX0ucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgJDA9Y2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgbz1bXSxzPVtdLGE9W10sbD1bXSxjPW5ldyAkLGQ9bmV3ICRlO3MucHVzaCgwLDAsMCksYS5wdXNoKDAsMCwxKSxsLnB1c2goLjUsLjUpO2ZvcihsZXQgdT0wLHA9Mzt1PD1lO3UrKyxwKz0zKXtsZXQgZj1pK3UvZSpyO2MueD10Kk1hdGguY29zKGYpLGMueT10Kk1hdGguc2luKGYpLHMucHVzaChjLngsYy55LGMueiksYS5wdXNoKDAsMCwxKSxkLng9KHNbcF0vdCsxKS8yLGQueT0oc1twKzFdL3QrMSkvMixsLnB1c2goZC54LGQueSl9Zm9yKGxldCB1PTE7dTw9ZTt1Kyspby5wdXNoKHUsdSsxLDApO3RoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IE5yKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IE5yKGwsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3ICQwKHQucmFkaXVzLHQuc2VnbWVudHMsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sJHM9KG5ldyAkLG5ldyAkLG5ldyAkLG5ldyBWcixjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgaSxlPVtdLHI9dGhpcy5nZXRQb2ludCgwKSxvPTA7ZS5wdXNoKDApO2ZvcihsZXQgcz0xO3M8PXQ7cysrKWk9dGhpcy5nZXRQb2ludChzL3QpLG8rPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gobykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgcyxpPXRoaXMuZ2V0TGVuZ3RocygpLHI9MCxvPWkubGVuZ3RoO3M9ZXx8dCppW28tMV07bGV0IGMsYT0wLGw9by0xO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLXMsYzwwKWE9cisxO2Vsc2V7aWYoIShjPjApKXtsPXI7YnJlYWt9bD1yLTF9aWYocj1sLGlbcl09PT1zKXJldHVybiByLyhvLTEpO2xldCBkPWlbcl07cmV0dXJuKHIrKHMtZCkvKGlbcisxXS1kKSkvKG8tMSl9Z2V0VGFuZ2VudCh0LGUpe2xldCByPXQtMWUtNCxvPXQrMWUtNDtyPDAmJihyPTApLG8+MSYmKG89MSk7bGV0IHM9dGhpcy5nZXRQb2ludChyKSxhPXRoaXMuZ2V0UG9pbnQobyksbD1lfHwocy5pc1ZlY3RvcjI/bmV3ICRlOm5ldyAkKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihzKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgJCxyPVtdLG89W10scz1bXSxhPW5ldyAkLGw9bmV3IHhuO2ZvcihsZXQgZj0wO2Y8PXQ7ZisrKXJbZl09dGhpcy5nZXRUYW5nZW50QXQoZi90LG5ldyAkKTtvWzBdPW5ldyAkLHNbMF09bmV3ICQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSxkPU1hdGguYWJzKHJbMF0ueCksdT1NYXRoLmFicyhyWzBdLnkpLHA9TWF0aC5hYnMoclswXS56KTtkPD1jJiYoYz1kLGkuc2V0KDEsMCwwKSksdTw9YyYmKGM9dSxpLnNldCgwLDEsMCkpLHA8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLG9bMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksc1swXS5jcm9zc1ZlY3RvcnMoclswXSxvWzBdKTtmb3IobGV0IGY9MTtmPD10O2YrKyl7aWYob1tmXT1vW2YtMV0uY2xvbmUoKSxzW2ZdPXNbZi0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZi0xXSxyW2ZdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBtPU1hdGguYWNvcyhLcyhyW2YtMV0uZG90KHJbZl0pLC0xLDEpKTtvW2ZdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxtKSl9c1tmXS5jcm9zc1ZlY3RvcnMocltmXSxvW2ZdKX1pZighMD09PWUpe2xldCBmPU1hdGguYWNvcyhLcyhvWzBdLmRvdChvW3RdKSwtMSwxKSk7Zi89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhvWzBdLG9bdF0pKT4wJiYoZj0tZik7Zm9yKGxldCBtPTE7bTw9dDttKyspb1ttXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbbV0sZiptKSksc1ttXS5jcm9zc1ZlY3RvcnMoclttXSxvW21dKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOm8sYmlub3JtYWxzOnN9fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319KSxlXz1jbGFzcyBleHRlbmRzICRze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxvPTAscz0yKk1hdGguUEksYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1vLHRoaXMuYUVuZEFuZ2xlPXMsdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyAkZSxyPTIqTWF0aC5QSSxvPXRoaXMuYUVuZEFuZ2xlLXRoaXMuYVN0YXJ0QW5nbGUscz1NYXRoLmFicyhvKTxOdW1iZXIuRVBTSUxPTjtmb3IoO288MDspbys9cjtmb3IoO28+cjspby09cjtvPE51bWJlci5FUFNJTE9OJiYobz1zPzA6ciksITA9PT10aGlzLmFDbG9ja3dpc2UmJiFzJiYobz09PXI/bz0tcjpvLT1yKTtsZXQgYT10aGlzLmFTdGFydEFuZ2xlK3QqbyxsPXRoaXMuYVgrdGhpcy54UmFkaXVzKk1hdGguY29zKGEpLGM9dGhpcy5hWSt0aGlzLnlSYWRpdXMqTWF0aC5zaW4oYSk7aWYoMCE9PXRoaXMuYVJvdGF0aW9uKXtsZXQgZD1NYXRoLmNvcyh0aGlzLmFSb3RhdGlvbiksdT1NYXRoLnNpbih0aGlzLmFSb3RhdGlvbikscD1sLXRoaXMuYVgsZj1jLXRoaXMuYVk7bD1wKmQtZip1K3RoaXMuYVgsYz1wKnUrZipkK3RoaXMuYVl9cmV0dXJuIGkuc2V0KGwsYyl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmFYPXQuYVgsdGhpcy5hWT10LmFZLHRoaXMueFJhZGl1cz10LnhSYWRpdXMsdGhpcy55UmFkaXVzPXQueVJhZGl1cyx0aGlzLmFTdGFydEFuZ2xlPXQuYVN0YXJ0QW5nbGUsdGhpcy5hRW5kQW5nbGU9dC5hRW5kQW5nbGUsdGhpcy5hQ2xvY2t3aXNlPXQuYUNsb2Nrd2lzZSx0aGlzLmFSb3RhdGlvbj10LmFSb3RhdGlvbix0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmFYPXRoaXMuYVgsdC5hWT10aGlzLmFZLHQueFJhZGl1cz10aGlzLnhSYWRpdXMsdC55UmFkaXVzPXRoaXMueVJhZGl1cyx0LmFTdGFydEFuZ2xlPXRoaXMuYVN0YXJ0QW5nbGUsdC5hRW5kQW5nbGU9dGhpcy5hRW5kQW5nbGUsdC5hQ2xvY2t3aXNlPXRoaXMuYUNsb2Nrd2lzZSx0LmFSb3RhdGlvbj10aGlzLmFSb3RhdGlvbix0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLmFYPXQuYVgsdGhpcy5hWT10LmFZLHRoaXMueFJhZGl1cz10LnhSYWRpdXMsdGhpcy55UmFkaXVzPXQueVJhZGl1cyx0aGlzLmFTdGFydEFuZ2xlPXQuYVN0YXJ0QW5nbGUsdGhpcy5hRW5kQW5nbGU9dC5hRW5kQW5nbGUsdGhpcy5hQ2xvY2t3aXNlPXQuYUNsb2Nrd2lzZSx0aGlzLmFSb3RhdGlvbj10LmFSb3RhdGlvbix0aGlzfX07ZV8ucHJvdG90eXBlLmlzRWxsaXBzZUN1cnZlPSEwO3ZhciBrST1jbGFzcyBleHRlbmRzIGVfe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcih0LGUsaSxpLHIsbyxzKSx0aGlzLnR5cGU9IkFyY0N1cnZlIn19O2Z1bmN0aW9uIG1WKCl7bGV0IG49MCx0PTAsZT0wLGk9MDtmdW5jdGlvbiByKG8scyxhLGwpe249byx0PWEsZT0tMypvKzMqcy0yKmEtbCxpPTIqby0yKnMrYStsfXJldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbihvLHMsYSxsLGMpe3IocyxhLGMqKGEtbyksYyoobC1zKSl9LGluaXROb251bmlmb3JtQ2F0bXVsbFJvbTpmdW5jdGlvbihvLHMsYSxsLGMsZCx1KXtsZXQgcD0ocy1vKS9jLShhLW8pLyhjK2QpKyhhLXMpL2QsZj0oYS1zKS9kLShsLXMpLyhkK3UpKyhsLWEpL3U7cCo9ZCxmKj1kLHIocyxhLHAsZil9LGNhbGM6ZnVuY3Rpb24obyl7bGV0IHM9bypvO3JldHVybiBuK3QqbytlKnMraSoocypvKX19fWtJLnByb3RvdHlwZS5pc0FyY0N1cnZlPSEwO3ZhciB1ST1uZXcgJCxXMz1uZXcgbVYscTM9bmV3IG1WLFkzPW5ldyBtVixGST1jbGFzcyBleHRlbmRzICRze2NvbnN0cnVjdG9yKHQ9W10sZT0hMSxpPSJjZW50cmlwZXRhbCIscj0uNSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhdG11bGxSb21DdXJ2ZTMiLHRoaXMucG9pbnRzPXQsdGhpcy5jbG9zZWQ9ZSx0aGlzLmN1cnZlVHlwZT1pLHRoaXMudGVuc2lvbj1yfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGMsZCxpPWUscj10aGlzLnBvaW50cyxvPXIubGVuZ3RoLHM9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKHMpLGw9cy1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL28pKzEpKm86MD09PWwmJmE9PT1vLTEmJihhPW8tMixsPTEpLHRoaXMuY2xvc2VkfHxhPjA/Yz1yWyhhLTEpJW9dOih1SS5zdWJWZWN0b3JzKHJbMF0sclsxXSkuYWRkKHJbMF0pLGM9dUkpO2xldCB1PXJbYSVvXSxwPXJbKGErMSklb107aWYodGhpcy5jbG9zZWR8fGErMjxvP2Q9clsoYSsyKSVvXToodUkuc3ViVmVjdG9ycyhyW28tMV0scltvLTJdKS5hZGQocltvLTFdKSxkPXVJKSwiY2VudHJpcGV0YWwiPT09dGhpcy5jdXJ2ZVR5cGV8fCJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlKXtsZXQgZj0iY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjUsbT1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKHUpLGYpLGI9TWF0aC5wb3codS5kaXN0YW5jZVRvU3F1YXJlZChwKSxmKSxNPU1hdGgucG93KHAuZGlzdGFuY2VUb1NxdWFyZWQoZCksZik7YjwxZS00JiYoYj0xKSxtPDFlLTQmJihtPWIpLE08MWUtNCYmKE09YiksVzMuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCx1LngscC54LGQueCxtLGIsTSkscTMuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueSx1LnkscC55LGQueSxtLGIsTSksWTMuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueix1LnoscC56LGQueixtLGIsTSl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYoVzMuaW5pdENhdG11bGxSb20oYy54LHUueCxwLngsZC54LHRoaXMudGVuc2lvbikscTMuaW5pdENhdG11bGxSb20oYy55LHUueSxwLnksZC55LHRoaXMudGVuc2lvbiksWTMuaW5pdENhdG11bGxSb20oYy56LHUueixwLnosZC56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChXMy5jYWxjKGwpLHEzLmNhbGMobCksWTMuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgJCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07ZnVuY3Rpb24gT2VlKG4sdCxlLGkscil7bGV0IG89LjUqKGktdCkscz0uNSooci1lKSxhPW4qbjtyZXR1cm4oMiplLTIqaStvK3MpKihuKmEpKygtMyplKzMqaS0yKm8tcykqYStvKm4rZX1mdW5jdGlvbiBieChuLHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSp0fShuLHQpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDIqKDEtbikqbip0fShuLGUpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbip0fShuLGkpfWZ1bmN0aW9uIHZ4KG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fShuLHQpK2Z1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH0obixpKStmdW5jdGlvbihuLHQpe3JldHVybiBuKm4qbip0fShuLHIpfUZJLnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTM9ITA7dmFyIEZ4PWNsYXNzIGV4dGVuZHMgJHN7Y29uc3RydWN0b3IodD1uZXcgJGUsZT1uZXcgJGUsaT1uZXcgJGUscj1uZXcgJGUpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyAkZSl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHZ4KHQsci54LG8ueCxzLngsYS54KSx2eCh0LHIueSxvLnkscy55LGEueSkpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07RngucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgTkk9Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQsaT1uZXcgJCxyPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh2eCh0LHIueCxvLngscy54LGEueCksdngodCxyLnksby55LHMueSxhLnkpLHZ4KHQsci56LG8ueixzLnosYS56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtOSS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgdF89Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSxlPW5ldyAkZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3ICRlKXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Z2V0VGFuZ2VudCh0LGUpe2xldCBpPWV8fG5ldyAkZTtyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3RfLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgTng9Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkZSxlPW5ldyAkZSxpPW5ldyAkZSl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3ICRlKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyO3JldHVybiBpLnNldChieCh0LHIueCxvLngscy54KSxieCh0LHIueSxvLnkscy55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtOeC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgTEk9Y2xhc3MgZXh0ZW5kcyAkc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQsaT1uZXcgJCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyO3JldHVybiBpLnNldChieCh0LHIueCxvLngscy54KSxieCh0LHIueSxvLnkscy55KSxieCh0LHIueixvLnoscy56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtMSS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIEx4PWNsYXNzIGV4dGVuZHMgJHN7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgJGUpe2xldCBpPWUscj10aGlzLnBvaW50cyxvPShyLmxlbmd0aC0xKSp0LHM9TWF0aC5mbG9vcihvKSxhPW8tcyxsPXJbMD09PXM/czpzLTFdLGM9cltzXSxkPXJbcz5yLmxlbmd0aC0yP3IubGVuZ3RoLTE6cysxXSx1PXJbcz5yLmxlbmd0aC0zP3IubGVuZ3RoLTE6cysyXTtyZXR1cm4gaS5zZXQoT2VlKGEsbC54LGMueCxkLngsdS54KSxPZWUoYSxsLnksYy55LGQueSx1LnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaCgobmV3ICRlKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzfX07THgucHJvdG90eXBlLmlzU3BsaW5lQ3VydmU9ITA7dmFyIGx0ZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBcmNDdXJ2ZTprSSxDYXRtdWxsUm9tQ3VydmUzOkZJLEN1YmljQmV6aWVyQ3VydmU6RngsQ3ViaWNCZXppZXJDdXJ2ZTM6TkksRWxsaXBzZUN1cnZlOmVfLExpbmVDdXJ2ZTp0XyxMaW5lQ3VydmUzOmNsYXNzIGV4dGVuZHMgJHN7Y29uc3RydWN0b3IodD1uZXcgJCxlPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTpOeCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6TEksU3BsaW5lQ3VydmU6THh9KSxDQj1jbGFzcyBleHRlbmRzICRze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3IHRfKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPHIubGVuZ3RoOyl7aWYocltvXT49aSl7bGV0IHM9cltvXS1pLGE9dGhpcy5jdXJ2ZXNbb10sbD1hLmdldExlbmd0aCgpO3JldHVybiBhLmdldFBvaW50QXQoMD09PWw/MDoxLXMvbCxlKX1vKyt9cmV0dXJuIG51bGx9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmNhY2hlTGVuZ3Rocz1udWxsLHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCl9Z2V0Q3VydmVMZW5ndGhzKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7bGV0IHQ9W10sZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy5jdXJ2ZXMubGVuZ3RoO2k8cjtpKyspZSs9dGhpcy5jdXJ2ZXNbaV0uZ2V0TGVuZ3RoKCksdC5wdXNoKGUpO3JldHVybiB0aGlzLmNhY2hlTGVuZ3Rocz10LHR9Z2V0U3BhY2VkUG9pbnRzKHQ9NDApe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9Z2V0UG9pbnRzKHQ9MTIpe2xldCBpLGU9W107Zm9yKGxldCByPTAsbz10aGlzLmN1cnZlcztyPG8ubGVuZ3RoO3IrKyl7bGV0IHM9b1tyXSxsPXMuZ2V0UG9pbnRzKHMmJnMuaXNFbGxpcHNlQ3VydmU/Mip0OnMmJihzLmlzTGluZUN1cnZlfHxzLmlzTGluZUN1cnZlMyk/MTpzJiZzLmlzU3BsaW5lQ3VydmU/dCpzLnBvaW50cy5sZW5ndGg6dCk7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCBkPWxbY107aSYmaS5lcXVhbHMoZCl8fChlLnB1c2goZCksaT1kKX19cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLmxlbmd0aD4xJiYhZVtlLmxlbmd0aC0xXS5lcXVhbHMoZVswXSkmJmUucHVzaChlWzBdKSxlfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXQuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXRoaXMuY3VydmVzLnB1c2godC5jdXJ2ZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2UsdC5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl0LmN1cnZlcy5wdXNoKHRoaXMuY3VydmVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXQuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmN1cnZlc1tlXTt0aGlzLmN1cnZlcy5wdXNoKChuZXcgbHRlW3IudHlwZV0pLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319LEJ4PWNsYXNzIGV4dGVuZHMgQ0J7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyAkZSx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3IHRfKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3ICRlKHQsZSkpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGkpLHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LGUsaSxyKXtsZXQgbz1uZXcgTngodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgJGUodCxlKSxuZXcgJGUoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIsbyxzKXtsZXQgYT1uZXcgRngodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgJGUodCxlKSxuZXcgJGUoaSxyKSxuZXcgJGUobyxzKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG8scyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgTHgoZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLG8scyl7cmV0dXJuIHRoaXMuYWJzYXJjKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8scyksdGhpc31hYnNhcmModCxlLGkscixvLHMpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLG8scyksdGhpc31lbGxpcHNlKHQsZSxpLHIsbyxzLGEsbCl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LGkscixvLHMsYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixvLHMsYSxsKXtsZXQgYz1uZXcgZV8odCxlLGkscixvLHMsYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IHU9Yy5nZXRQb2ludCgwKTt1LmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKHUueCx1LnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IGQ9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weShkKSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LHFkPWNsYXNzIGV4dGVuZHMgQnh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPUpsKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5ob2xlcy5wdXNoKHQuaG9sZXNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0LmhvbGVzLnB1c2godGhpcy5ob2xlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goKG5ldyBCeCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX07ZnVuY3Rpb24gY3RlKG4sdCxlLGkscil7bGV0IG8scztpZihyPT09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IG89dCxzPWUtaTtvPGU7bys9aSlyKz0obltzXS1uW29dKSoobltvKzFdK25bcysxXSkscz1vO3JldHVybiByfShuLHQsZSxpKT4wKWZvcihvPXQ7bzxlO28rPWkpcz1rZWUobyxuW29dLG5bbysxXSxzKTtlbHNlIGZvcihvPWUtaTtvPj10O28tPWkpcz1rZWUobyxuW29dLG5bbysxXSxzKTtyZXR1cm4gcyYmS0kocyxzLm5leHQpJiYoengocykscz1zLm5leHQpLHN9ZnVuY3Rpb24geHAobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgaSxlPW47ZG97aWYoaT0hMSxlLnN0ZWluZXJ8fCFLSShlLGUubmV4dCkmJjAhPT1GcihlLnByZXYsZSxlLm5leHQpKWU9ZS5uZXh0O2Vsc2V7aWYoengoZSksZT10PWUucHJldixlPT09ZS5uZXh0KWJyZWFrO2k9ITB9fXdoaWxlKGl8fGUhPT10KTtyZXR1cm4gdH1mdW5jdGlvbiBWeChuLHQsZSxpLHIsbyxzKXtpZighbilyZXR1cm47IXMmJm8mJmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW47ZG97bnVsbD09PXIueiYmKHIuej1NQihyLngsci55LHQsZSxpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHR9d2hpbGUociE9PW4pO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsZnVuY3Rpb24obil7bGV0IHQsZSxpLHIsbyxzLGEsbCxjPTE7ZG97Zm9yKGU9bixuPW51bGwsbz1udWxsLHM9MDtlOyl7Zm9yKHMrKyxpPWUsYT0wLHQ9MDt0PGMmJihhKyssaT1pLm5leHRaLGkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspMCE9PWEmJigwPT09bHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSksbz9vLm5leHRaPXI6bj1yLHIucHJldlo9byxvPXI7ZT1pfW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKHM+MSl9KHIpfShuLGkscixvKTtsZXQgbCxjLGE9bjtmb3IoO24ucHJldiE9PW4ubmV4dDspaWYobD1uLnByZXYsYz1uLm5leHQsbz9kMmUobixpLHIsbyk6YzJlKG4pKXQucHVzaChsLmkvZSksdC5wdXNoKG4uaS9lKSx0LnB1c2goYy5pL2UpLHp4KG4pLG49Yy5uZXh0LGE9Yy5uZXh0O2Vsc2UgaWYoKG49Yyk9PT1hKXtzPzE9PT1zP1Z4KG49dTJlKHhwKG4pLHQsZSksdCxlLGkscixvLDIpOjI9PT1zJiZwMmUobix0LGUsaSxyLG8pOlZ4KHhwKG4pLHQsZSxpLHIsbywxKTticmVha319ZnVuY3Rpb24gYzJlKG4pe2xldCB0PW4ucHJldixlPW4saT1uLm5leHQ7aWYoRnIodCxlLGkpPj0wKXJldHVybiExO2xldCByPW4ubmV4dC5uZXh0O2Zvcig7ciE9PW4ucHJldjspe2lmKHowKHQueCx0LnksZS54LGUueSxpLngsaS55LHIueCxyLnkpJiZGcihyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIGQyZShuLHQsZSxpKXtsZXQgcj1uLnByZXYsbz1uLHM9bi5uZXh0O2lmKEZyKHIsbyxzKT49MClyZXR1cm4hMTtsZXQgYz1yLng+by54P3IueD5zLng/ci54OnMueDpvLng+cy54P28ueDpzLngsZD1yLnk+by55P3IueT5zLnk/ci55OnMueTpvLnk+cy55P28ueTpzLnksdT1NQihyLng8by54P3IueDxzLng/ci54OnMueDpvLng8cy54P28ueDpzLngsci55PG8ueT9yLnk8cy55P3IueTpzLnk6by55PHMueT9vLnk6cy55LHQsZSxpKSxwPU1CKGMsZCx0LGUsaSksZj1uLnByZXZaLG09bi5uZXh0Wjtmb3IoO2YmJmYuej49dSYmbSYmbS56PD1wOyl7aWYoZiE9PW4ucHJldiYmZiE9PW4ubmV4dCYmejAoci54LHIueSxvLngsby55LHMueCxzLnksZi54LGYueSkmJkZyKGYucHJldixmLGYubmV4dCk+PTB8fChmPWYucHJldlosbSE9PW4ucHJldiYmbSE9PW4ubmV4dCYmejAoci54LHIueSxvLngsby55LHMueCxzLnksbS54LG0ueSkmJkZyKG0ucHJldixtLG0ubmV4dCk+PTApKXJldHVybiExO209bS5uZXh0Wn1mb3IoO2YmJmYuej49dTspe2lmKGYhPT1uLnByZXYmJmYhPT1uLm5leHQmJnowKHIueCxyLnksby54LG8ueSxzLngscy55LGYueCxmLnkpJiZGcihmLnByZXYsZixmLm5leHQpPj0wKXJldHVybiExO2Y9Zi5wcmV2Wn1mb3IoO20mJm0uejw9cDspe2lmKG0hPT1uLnByZXYmJm0hPT1uLm5leHQmJnowKHIueCxyLnksby54LG8ueSxzLngscy55LG0ueCxtLnkpJiZGcihtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiB1MmUobix0LGUpe2xldCBpPW47ZG97bGV0IHI9aS5wcmV2LG89aS5uZXh0Lm5leHQ7IUtJKHIsbykmJmR0ZShyLGksaS5uZXh0LG8pJiZIeChyLG8pJiZIeChvLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChvLmkvZSksengoaSksengoaS5uZXh0KSxpPW49byksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiB4cChpKX1mdW5jdGlvbiBwMmUobix0LGUsaSxyLG8pe2xldCBzPW47ZG97bGV0IGE9cy5uZXh0Lm5leHQ7Zm9yKDthIT09cy5wcmV2Oyl7aWYocy5pIT09YS5pJiZ4MmUocyxhKSl7bGV0IGw9dXRlKHMsYSk7cmV0dXJuIHM9eHAocyxzLm5leHQpLGw9eHAobCxsLm5leHQpLFZ4KHMsdCxlLGkscixvKSx2b2lkIFZ4KGwsdCxlLGkscixvKX1hPWEubmV4dH1zPXMubmV4dH13aGlsZShzIT09bil9ZnVuY3Rpb24gbTJlKG4sdCl7cmV0dXJuIG4ueC10Lnh9ZnVuY3Rpb24gaDJlKG4sdCl7aWYodD1mdW5jdGlvbihuLHQpe2xldCBzLGU9dCxpPW4ueCxyPW4ueSxvPS0xLzA7ZG97aWYocjw9ZS55JiZyPj1lLm5leHQueSYmZS5uZXh0LnkhPT1lLnkpe2xldCBwPWUueCsoci1lLnkpKihlLm5leHQueC1lLngpLyhlLm5leHQueS1lLnkpO2lmKHA8PWkmJnA+byl7aWYobz1wLHA9PT1pKXtpZihyPT09ZS55KXJldHVybiBlO2lmKHI9PT1lLm5leHQueSlyZXR1cm4gZS5uZXh0fXM9ZS54PGUubmV4dC54P2U6ZS5uZXh0fX1lPWUubmV4dH13aGlsZShlIT09dCk7aWYoIXMpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHM7bGV0IHUsYT1zLGw9cy54LGM9cy55LGQ9MS8wO2U9cztkb3tpPj1lLngmJmUueD49bCYmaSE9PWUueCYmejAocjxjP2k6byxyLGwsYyxyPGM/bzppLHIsZS54LGUueSkmJih1PU1hdGguYWJzKHItZS55KS8oaS1lLngpLEh4KGUsbikmJih1PGR8fHU9PT1kJiYoZS54PnMueHx8ZS54PT09cy54JiZfMmUocyxlKSkpJiYocz1lLGQ9dSkpLGU9ZS5uZXh0fXdoaWxlKGUhPT1hKTtyZXR1cm4gc30obix0KSx0KXtsZXQgZT11dGUodCxuKTt4cCh0LHQubmV4dCkseHAoZSxlLm5leHQpfX1mdW5jdGlvbiBfMmUobix0KXtyZXR1cm4gRnIobi5wcmV2LG4sdC5wcmV2KTwwJiZGcih0Lm5leHQsbixuLm5leHQpPDB9ZnVuY3Rpb24gTUIobix0LGUsaSxyKXtyZXR1cm4obj0xNDMxNjU1NzY1Jigobj04NTg5OTM0NTkmKChuPTI1MjY0NTEzNSYoKG49MTY3MTE5MzUmKChuPTMyNzY3KihuLWUpKnIpfG48PDgpKXxuPDw0KSl8bjw8MikpfG48PDEpKXwodD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0PTMyNzY3Kih0LWkpKnIpfHQ8PDgpKXx0PDw0KSl8dDw8MikpfHQ8PDEpKTw8MX1mdW5jdGlvbiB5MmUobil7bGV0IHQ9bixlPW47ZG97KHQueDxlLnh8fHQueD09PWUueCYmdC55PGUueSkmJihlPXQpLHQ9dC5uZXh0fXdoaWxlKHQhPT1uKTtyZXR1cm4gZX1mdW5jdGlvbiB6MChuLHQsZSxpLHIsbyxzLGEpe3JldHVybihyLXMpKih0LWEpLShuLXMpKihvLWEpPj0wJiYobi1zKSooaS1hKS0oZS1zKSoodC1hKT49MCYmKGUtcykqKG8tYSktKHItcykqKGktYSk+PTB9ZnVuY3Rpb24geDJlKG4sdCl7cmV0dXJuIG4ubmV4dC5pIT09dC5pJiZuLnByZXYuaSE9PXQuaSYmIWZ1bmN0aW9uKG4sdCl7bGV0IGU9bjtkb3tpZihlLmkhPT1uLmkmJmUubmV4dC5pIT09bi5pJiZlLmkhPT10LmkmJmUubmV4dC5pIT09dC5pJiZkdGUoZSxlLm5leHQsbix0KSlyZXR1cm4hMDtlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuITF9KG4sdCkmJihIeChuLHQpJiZIeCh0LG4pJiZmdW5jdGlvbihuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLG89KG4ueSt0LnkpLzI7ZG97ZS55Pm8hPWUubmV4dC55Pm8mJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihvLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiBpfShuLHQpJiYoRnIobi5wcmV2LG4sdC5wcmV2KXx8RnIobix0LnByZXYsdCkpfHxLSShuLHQpJiZGcihuLnByZXYsbixuLm5leHQpPjAmJkZyKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gRnIobix0LGUpe3JldHVybih0Lnktbi55KSooZS54LXQueCktKHQueC1uLngpKihlLnktdC55KX1mdW5jdGlvbiBLSShuLHQpe3JldHVybiBuLng9PT10LngmJm4ueT09PXQueX1mdW5jdGlvbiBkdGUobix0LGUsaSl7bGV0IHI9ZkkoRnIobix0LGUpKSxvPWZJKEZyKG4sdCxpKSkscz1mSShGcihlLGksbikpLGE9ZkkoRnIoZSxpLHQpKTtyZXR1cm4hIShyIT09byYmcyE9PWF8fDA9PT1yJiZwSShuLGUsdCl8fDA9PT1vJiZwSShuLGksdCl8fDA9PT1zJiZwSShlLG4saSl8fDA9PT1hJiZwSShlLHQsaSkpfWZ1bmN0aW9uIHBJKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBmSShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gSHgobix0KXtyZXR1cm4gRnIobi5wcmV2LG4sbi5uZXh0KTwwP0ZyKG4sdCxuLm5leHQpPj0wJiZGcihuLG4ucHJldix0KT49MDpGcihuLHQsbi5wcmV2KTwwfHxGcihuLG4ubmV4dCx0KTwwfWZ1bmN0aW9uIHV0ZShuLHQpe2xldCBlPW5ldyB3QihuLmksbi54LG4ueSksaT1uZXcgd0IodC5pLHQueCx0LnkpLHI9bi5uZXh0LG89dC5wcmV2O3JldHVybiBuLm5leHQ9dCx0LnByZXY9bixlLm5leHQ9cixyLnByZXY9ZSxpLm5leHQ9ZSxlLnByZXY9aSxvLm5leHQ9aSxpLnByZXY9byxpfWZ1bmN0aW9uIGtlZShuLHQsZSxpKXtsZXQgcj1uZXcgd0Iobix0LGUpO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiB6eChuKXtuLm5leHQucHJldj1uLnByZXYsbi5wcmV2Lm5leHQ9bi5uZXh0LG4ucHJldlomJihuLnByZXZaLm5leHRaPW4ubmV4dFopLG4ubmV4dFomJihuLm5leHRaLnByZXZaPW4ucHJldlopfWZ1bmN0aW9uIHdCKG4sdCxlKXt0aGlzLmk9bix0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX12YXIgWWM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IGU9dC5sZW5ndGgsaT0wO2ZvcihsZXQgcj1lLTEsbz0wO288ZTtyPW8rKylpKz10W3JdLngqdFtvXS55LXRbb10ueCp0W3JdLnk7cmV0dXJuLjUqaX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIFljLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10sbz1bXTtGZWUodCksTmVlKGksdCk7bGV0IHM9dC5sZW5ndGg7ZS5mb3JFYWNoKEZlZSk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKHMpLHMrPWVbbF0ubGVuZ3RoLE5lZShpLGVbbF0pO2xldCBhPWZ1bmN0aW9uKG4sdCxlPTIpe2xldCBhLGwsYyxkLHUscCxmLGk9dCYmdC5sZW5ndGgscj1pP3RbMF0qZTpuLmxlbmd0aCxvPWN0ZShuLDAscixlLCEwKSxzPVtdO2lmKCFvfHxvLm5leHQ9PT1vLnByZXYpcmV0dXJuIHM7aWYoaSYmKG89ZnVuY3Rpb24obix0LGUsaSl7bGV0IG8scyxhLGwsYyxyPVtdO2ZvcihvPTAscz10Lmxlbmd0aDtvPHM7bysrKWE9dFtvXSppLGw9bzxzLTE/dFtvKzFdKmk6bi5sZW5ndGgsYz1jdGUobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHkyZShjKSk7Zm9yKHIuc29ydChtMmUpLG89MDtvPHIubGVuZ3RoO28rKyloMmUocltvXSxlKSxlPXhwKGUsZS5uZXh0KTtyZXR1cm4gZX0obix0LG8sZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9ZD1uWzFdO2ZvcihsZXQgbT1lO208cjttKz1lKXU9blttXSxwPW5bbSsxXSx1PGEmJihhPXUpLHA8bCYmKGw9cCksdT5jJiYoYz11KSxwPmQmJihkPXApO2Y9TWF0aC5tYXgoYy1hLGQtbCksZj0wIT09Zj8xL2Y6MH1yZXR1cm4gVngobyxzLGUsYSxsLGYpLHN9KGkscik7Zm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKz0zKW8ucHVzaChhLnNsaWNlKGwsbCszKSk7cmV0dXJuIG99fTtmdW5jdGlvbiBGZWUobil7bGV0IHQ9bi5sZW5ndGg7dD4yJiZuW3QtMV0uZXF1YWxzKG5bMF0pJiZuLnBvcCgpfWZ1bmN0aW9uIE5lZShuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBDcD1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9bmV3IHFkKFtuZXcgJGUoLjUsLjUpLG5ldyAkZSgtLjUsLjUpLG5ldyAkZSgtLjUsLS41KSxuZXcgJGUoLjUsLS41KV0pLGU9e30pe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczplfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IGk9dGhpcyxyPVtdLG89W107Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXModFthXSk7ZnVuY3Rpb24gcyhhKXtsZXQgbD1bXSxjPXZvaWQgMCE9PWUuY3VydmVTZWdtZW50cz9lLmN1cnZlU2VnbWVudHM6MTIsZD12b2lkIDAhPT1lLnN0ZXBzP2Uuc3RlcHM6MSx1PXZvaWQgMCE9PWUuZGVwdGg/ZS5kZXB0aDoxLHA9dm9pZCAwPT09ZS5iZXZlbEVuYWJsZWR8fGUuYmV2ZWxFbmFibGVkLGY9dm9pZCAwIT09ZS5iZXZlbFRoaWNrbmVzcz9lLmJldmVsVGhpY2tuZXNzOi4yLG09dm9pZCAwIT09ZS5iZXZlbFNpemU/ZS5iZXZlbFNpemU6Zi0uMSxiPXZvaWQgMCE9PWUuYmV2ZWxPZmZzZXQ/ZS5iZXZlbE9mZnNldDowLE09dm9pZCAwIT09ZS5iZXZlbFNlZ21lbnRzP2UuYmV2ZWxTZWdtZW50czozLHk9ZS5leHRydWRlUGF0aCx4PXZvaWQgMCE9PWUuVVZHZW5lcmF0b3I/ZS5VVkdlbmVyYXRvcjpTMmU7dm9pZCAwIT09ZS5hbW91bnQmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksdT1lLmFtb3VudCk7bGV0IFIsVix0ZSxLLHhlLEE9ITE7eSYmKFI9eS5nZXRTcGFjZWRQb2ludHMoZCksQT0hMCxwPSExLFY9eS5jb21wdXRlRnJlbmV0RnJhbWVzKGQsITEpLHRlPW5ldyAkLEs9bmV3ICQseGU9bmV3ICQpLHB8fChNPTAsZj0wLG09MCxiPTApO2xldCBYZT1hLmV4dHJhY3RQb2ludHMoYyksRGU9WGUuc2hhcGUsRD1YZS5ob2xlcztpZighWWMuaXNDbG9ja1dpc2UoRGUpKXtEZT1EZS5yZXZlcnNlKCk7Zm9yKGxldCBvZT0wLHN0PUQubGVuZ3RoO29lPHN0O29lKyspe2xldCBZZT1EW29lXTtZYy5pc0Nsb2NrV2lzZShZZSkmJihEW29lXT1ZZS5yZXZlcnNlKCkpfX1sZXQgY2U9WWMudHJpYW5ndWxhdGVTaGFwZShEZSxEKSxmZT1EZTtmb3IobGV0IG9lPTAsc3Q9RC5sZW5ndGg7b2U8c3Q7b2UrKylEZT1EZS5jb25jYXQoRFtvZV0pO2Z1bmN0aW9uIGJlKG9lLHN0LFllKXtyZXR1cm4gc3R8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0Iiksc3QuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihZZSkuYWRkKG9lKX1sZXQgbmU9RGUubGVuZ3RoLGRlPWNlLmxlbmd0aDtmdW5jdGlvbiBwZShvZSxzdCxZZSl7bGV0IF90LHV0LHNuLENuPW9lLngtc3QueCx0aT1vZS55LXN0Lnksa2k9WWUueC1vZS54LEZpPVllLnktb2UueSxaPUNuKkNuK3RpKnRpO2lmKE1hdGguYWJzKENuKkZpLXRpKmtpKT5OdW1iZXIuRVBTSUxPTil7bGV0IFZlPU1hdGguc3FydChaKSx2dD1NYXRoLnNxcnQoa2kqa2krRmkqRmkpLGVuPXN0LngtdGkvVmUsTGU9c3QueStDbi9WZSxGdD0oKFllLngtRmkvdnQtZW4pKkZpLShZZS55K2tpL3Z0LUxlKSpraSkvKENuKkZpLXRpKmtpKTtfdD1lbitDbipGdC1vZS54LHV0PUxlK3RpKkZ0LW9lLnk7bGV0IFB0PV90Kl90K3V0KnV0O2lmKFB0PD0yKXJldHVybiBuZXcgJGUoX3QsdXQpO3NuPU1hdGguc3FydChQdC8yKX1lbHNle2xldCBWZT0hMTtDbj5OdW1iZXIuRVBTSUxPTj9raT5OdW1iZXIuRVBTSUxPTiYmKFZlPSEwKTpDbjwtTnVtYmVyLkVQU0lMT04/a2k8LU51bWJlci5FUFNJTE9OJiYoVmU9ITApOk1hdGguc2lnbih0aSk9PT1NYXRoLnNpZ24oRmkpJiYoVmU9ITApLFZlPyhfdD0tdGksdXQ9Q24sc249TWF0aC5zcXJ0KFopKTooX3Q9Q24sdXQ9dGksc249TWF0aC5zcXJ0KFovMikpfXJldHVybiBuZXcgJGUoX3Qvc24sdXQvc24pfWxldCBqZT1bXTtmb3IobGV0IG9lPTAsc3Q9ZmUubGVuZ3RoLFllPXN0LTEsX3Q9b2UrMTtvZTxzdDtvZSsrLFllKyssX3QrKylZZT09PXN0JiYoWWU9MCksX3Q9PT1zdCYmKF90PTApLGplW29lXT1wZShmZVtvZV0sZmVbWWVdLGZlW190XSk7bGV0IE5lLENlPVtdLGx0PWplLmNvbmNhdCgpO2ZvcihsZXQgb2U9MCxzdD1ELmxlbmd0aDtvZTxzdDtvZSsrKXtsZXQgWWU9RFtvZV07TmU9W107Zm9yKGxldCBfdD0wLHV0PVllLmxlbmd0aCxzbj11dC0xLENuPV90KzE7X3Q8dXQ7X3QrKyxzbisrLENuKyspc249PT11dCYmKHNuPTApLENuPT09dXQmJihDbj0wKSxOZVtfdF09cGUoWWVbX3RdLFllW3NuXSxZZVtDbl0pO0NlLnB1c2goTmUpLGx0PWx0LmNvbmNhdChOZSl9Zm9yKGxldCBvZT0wO29lPE07b2UrKyl7bGV0IHN0PW9lL00sWWU9ZipNYXRoLmNvcyhzdCpNYXRoLlBJLzIpLF90PW0qTWF0aC5zaW4oc3QqTWF0aC5QSS8yKStiO2ZvcihsZXQgdXQ9MCxzbj1mZS5sZW5ndGg7dXQ8c247dXQrKyl7bGV0IENuPWJlKGZlW3V0XSxqZVt1dF0sX3QpO3d0KENuLngsQ24ueSwtWWUpfWZvcihsZXQgdXQ9MCxzbj1ELmxlbmd0aDt1dDxzbjt1dCsrKXtsZXQgQ249RFt1dF07TmU9Q2VbdXRdO2ZvcihsZXQgdGk9MCxraT1Dbi5sZW5ndGg7dGk8a2k7dGkrKyl7bGV0IEZpPWJlKENuW3RpXSxOZVt0aV0sX3QpO3d0KEZpLngsRmkueSwtWWUpfX19bGV0IE10PW0rYjtmb3IobGV0IG9lPTA7b2U8bmU7b2UrKyl7bGV0IHN0PXA/YmUoRGVbb2VdLGx0W29lXSxNdCk6RGVbb2VdO0E/KEsuY29weShWLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHN0LngpLHRlLmNvcHkoVi5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHN0LnkpLHhlLmNvcHkoUlswXSkuYWRkKEspLmFkZCh0ZSksd3QoeGUueCx4ZS55LHhlLnopKTp3dChzdC54LHN0LnksMCl9Zm9yKGxldCBvZT0xO29lPD1kO29lKyspZm9yKGxldCBzdD0wO3N0PG5lO3N0Kyspe2xldCBZZT1wP2JlKERlW3N0XSxsdFtzdF0sTXQpOkRlW3N0XTtBPyhLLmNvcHkoVi5ub3JtYWxzW29lXSkubXVsdGlwbHlTY2FsYXIoWWUueCksdGUuY29weShWLmJpbm9ybWFsc1tvZV0pLm11bHRpcGx5U2NhbGFyKFllLnkpLHhlLmNvcHkoUltvZV0pLmFkZChLKS5hZGQodGUpLHd0KHhlLngseGUueSx4ZS56KSk6d3QoWWUueCxZZS55LHUvZCpvZSl9Zm9yKGxldCBvZT1NLTE7b2U+PTA7b2UtLSl7bGV0IHN0PW9lL00sWWU9ZipNYXRoLmNvcyhzdCpNYXRoLlBJLzIpLF90PW0qTWF0aC5zaW4oc3QqTWF0aC5QSS8yKStiO2ZvcihsZXQgdXQ9MCxzbj1mZS5sZW5ndGg7dXQ8c247dXQrKyl7bGV0IENuPWJlKGZlW3V0XSxqZVt1dF0sX3QpO3d0KENuLngsQ24ueSx1K1llKX1mb3IobGV0IHV0PTAsc249RC5sZW5ndGg7dXQ8c247dXQrKyl7bGV0IENuPURbdXRdO05lPUNlW3V0XTtmb3IobGV0IHRpPTAsa2k9Q24ubGVuZ3RoO3RpPGtpO3RpKyspe2xldCBGaT1iZShDblt0aV0sTmVbdGldLF90KTtBP3d0KEZpLngsRmkueStSW2QtMV0ueSxSW2QtMV0ueCtZZSk6d3QoRmkueCxGaS55LHUrWWUpfX19ZnVuY3Rpb24gQW4ob2Usc3Qpe2xldCBZZT1vZS5sZW5ndGg7Zm9yKDstLVllPj0wOyl7bGV0IF90PVllLHV0PVllLTE7dXQ8MCYmKHV0PW9lLmxlbmd0aC0xKTtmb3IobGV0IHNuPTAsQ249ZCsyKk07c248Q247c24rKyl7bGV0IHRpPW5lKnNuLGtpPW5lKihzbisxKTt2ZShzdCtfdCt0aSxzdCt1dCt0aSxzdCt1dCtraSxzdCtfdCtraSl9fX1mdW5jdGlvbiB3dChvZSxzdCxZZSl7bC5wdXNoKG9lKSxsLnB1c2goc3QpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24ob2Usc3QsWWUpe210KG9lKSxtdChzdCksbXQoWWUpO2xldCBfdD1yLmxlbmd0aC8zLHV0PXguZ2VuZXJhdGVUb3BVVihpLHIsX3QtMyxfdC0yLF90LTEpO2Z0KHV0WzBdKSxmdCh1dFsxXSksZnQodXRbMl0pfWZ1bmN0aW9uIHZlKG9lLHN0LFllLF90KXttdChvZSksbXQoc3QpLG10KF90KSxtdChzdCksbXQoWWUpLG10KF90KTtsZXQgdXQ9ci5sZW5ndGgvMyxzbj14LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsdXQtNix1dC0zLHV0LTIsdXQtMSk7ZnQoc25bMF0pLGZ0KHNuWzFdKSxmdChzblszXSksZnQoc25bMV0pLGZ0KHNuWzJdKSxmdChzblszXSl9ZnVuY3Rpb24gbXQob2Upe3IucHVzaChsWzMqb2UrMF0pLHIucHVzaChsWzMqb2UrMV0pLHIucHVzaChsWzMqb2UrMl0pfWZ1bmN0aW9uIGZ0KG9lKXtvLnB1c2gob2UueCksby5wdXNoKG9lLnkpfShmdW5jdGlvbigpe2xldCBvZT1yLmxlbmd0aC8zO2lmKHApe2xldCBzdD0wLFllPW5lKnN0O2ZvcihsZXQgX3Q9MDtfdDxkZTtfdCsrKXtsZXQgdXQ9Y2VbX3RdO29uKHV0WzJdK1llLHV0WzFdK1llLHV0WzBdK1llKX1zdD1kKzIqTSxZZT1uZSpzdDtmb3IobGV0IF90PTA7X3Q8ZGU7X3QrKyl7bGV0IHV0PWNlW190XTtvbih1dFswXStZZSx1dFsxXStZZSx1dFsyXStZZSl9fWVsc2V7Zm9yKGxldCBzdD0wO3N0PGRlO3N0Kyspe2xldCBZZT1jZVtzdF07b24oWWVbMl0sWWVbMV0sWWVbMF0pfWZvcihsZXQgc3Q9MDtzdDxkZTtzdCsrKXtsZXQgWWU9Y2Vbc3RdO29uKFllWzBdK25lKmQsWWVbMV0rbmUqZCxZZVsyXStuZSpkKX19aS5hZGRHcm91cChvZSxyLmxlbmd0aC8zLW9lLDApfSkoKSxmdW5jdGlvbigpe2xldCBvZT1yLmxlbmd0aC8zLHN0PTA7QW4oZmUsc3QpLHN0Kz1mZS5sZW5ndGg7Zm9yKGxldCBZZT0wLF90PUQubGVuZ3RoO1llPF90O1llKyspe2xldCB1dD1EW1llXTtBbih1dCxzdCksc3QrPXV0Lmxlbmd0aH1pLmFkZEdyb3VwKG9lLHIubGVuZ3RoLzMtb2UsMSl9KCl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgTnIociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIobywyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspZS5zaGFwZXMucHVzaChuW2ldLnV1aWQpO2Vsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB2b2lkIDAhPT10LmV4dHJ1ZGVQYXRoJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9KHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnMsdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBvPTAscz10LnNoYXBlcy5sZW5ndGg7bzxzO28rKylpLnB1c2goZVt0LnNoYXBlc1tvXV0pO2xldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gdm9pZCAwIT09ciYmKHQub3B0aW9ucy5leHRydWRlUGF0aD0obmV3IGx0ZVtyLnR5cGVdKS5mcm9tSlNPTihyKSksbmV3IENwKGksdC5vcHRpb25zKX19LFMyZT17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBhPXRbMyppXSxsPXRbMyppKzFdLGM9dFszKnJdLGQ9dFszKnIrMV07cmV0dXJuW25ldyAkZSh0WzMqZV0sdFszKmUrMV0pLG5ldyAkZShhLGwpLG5ldyAkZShjLGQpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtsZXQgcz10WzMqZV0sYT10WzMqZSsxXSxsPXRbMyplKzJdLGM9dFszKmldLGQ9dFszKmkrMV0sdT10WzMqaSsyXSxwPXRbMypyXSxmPXRbMypyKzFdLG09dFszKnIrMl0sYj10WzMqb10sTT10WzMqbysxXSx5PXRbMypvKzJdO3JldHVybiBNYXRoLmFicyhhLWQpPE1hdGguYWJzKHMtYyk/W25ldyAkZShzLDEtbCksbmV3ICRlKGMsMS11KSxuZXcgJGUocCwxLW0pLG5ldyAkZShiLDEteSldOltuZXcgJGUoYSwxLWwpLG5ldyAkZShkLDEtdSksbmV3ICRlKGYsMS1tKSxuZXcgJGUoTSwxLXkpXX19LF9tPWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1uZXcgcWQoW25ldyAkZSgwLC41KSxuZXcgJGUoLS41LC0uNSksbmV3ICRlKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10sbz1bXSxzPVtdLGE9MCxsPTA7aWYoITE9PT1BcnJheS5pc0FycmF5KHQpKWModCk7ZWxzZSBmb3IobGV0IGQ9MDtkPHQubGVuZ3RoO2QrKyljKHRbZF0pLHRoaXMuYWRkR3JvdXAoYSxsLGQpLGErPWwsbD0wO2Z1bmN0aW9uIGMoZCl7bGV0IHU9ci5sZW5ndGgvMyxwPWQuZXh0cmFjdFBvaW50cyhlKSxmPXAuc2hhcGUsbT1wLmhvbGVzOyExPT09WWMuaXNDbG9ja1dpc2UoZikmJihmPWYucmV2ZXJzZSgpKTtmb3IobGV0IE09MCx5PW0ubGVuZ3RoO008eTtNKyspe2xldCB4PW1bTV07ITA9PT1ZYy5pc0Nsb2NrV2lzZSh4KSYmKG1bTV09eC5yZXZlcnNlKCkpfWxldCBiPVljLnRyaWFuZ3VsYXRlU2hhcGUoZixtKTtmb3IobGV0IE09MCx5PW0ubGVuZ3RoO008eTtNKyspZj1mLmNvbmNhdChtW01dKTtmb3IobGV0IE09MCx5PWYubGVuZ3RoO008eTtNKyspe2xldCB4PWZbTV07ci5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxzLnB1c2goeC54LHgueSl9Zm9yKGxldCBNPTAseT1iLmxlbmd0aDtNPHk7TSsrKXtsZXQgeD1iW01dO2kucHVzaCh4WzBdK3UseFsxXSt1LHhbMl0rdSksbCs9M319dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgTnIobywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgTnIocywyKSl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspdC5zaGFwZXMucHVzaChuW2VdLnV1aWQpO2Vsc2UgdC5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0fSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgcj0wLG89dC5zaGFwZXMubGVuZ3RoO3I8bztyKyspaS5wdXNoKGVbdC5zaGFwZXNbcl1dKTtyZXR1cm4gbmV3IF9tKGksdC5jdXJ2ZVNlZ21lbnRzKX19OyhjbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMCksdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzfX0pLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBCST1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9b18sdGhpcy5ub3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtCSS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIEJJe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgJGUoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMuaW9yPTEuNSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmVmbGVjdGl2aXR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEtzKDIuNSoodGhpcy5pb3ItMSkvKHRoaXMuaW9yKzEpLDAsMSl9LHNldDpmdW5jdGlvbihlKXt0aGlzLmlvcj0oMSsuNCplKS8oMS0uNCplKX19KSx0aGlzLnNoZWVuQ29sb3I9bmV3IGFuKDApLHRoaXMuc2hlZW5Db2xvck1hcD1udWxsLHRoaXMuc2hlZW5Sb3VnaG5lc3M9MSx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPW51bGwsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0wLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvbkNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyQ29sb3I9bmV3IGFuKDEsMSwxKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9bnVsbCx0aGlzLl9zaGVlbj0wLHRoaXMuX2NsZWFyY29hdD0wLHRoaXMuX3RyYW5zbWlzc2lvbj0wLHRoaXMuc2V0VmFsdWVzKHQpfWdldCBzaGVlbigpe3JldHVybiB0aGlzLl9zaGVlbn1zZXQgc2hlZW4odCl7dGhpcy5fc2hlZW4+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9zaGVlbj10fWdldCBjbGVhcmNvYXQoKXtyZXR1cm4gdGhpcy5fY2xlYXJjb2F0fXNldCBjbGVhcmNvYXQodCl7dGhpcy5fY2xlYXJjb2F0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fY2xlYXJjb2F0PXR9Z2V0IHRyYW5zbWlzc2lvbigpe3JldHVybiB0aGlzLl90cmFuc21pc3Npb259c2V0IHRyYW5zbWlzc2lvbih0KXt0aGlzLl90cmFuc21pc3Npb24+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl90cmFuc21pc3Npb249dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLmlvcj10Lmlvcix0aGlzLnNoZWVuPXQuc2hlZW4sdGhpcy5zaGVlbkNvbG9yLmNvcHkodC5zaGVlbkNvbG9yKSx0aGlzLnNoZWVuQ29sb3JNYXA9dC5zaGVlbkNvbG9yTWFwLHRoaXMuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPXQuc2hlZW5Sb3VnaG5lc3NNYXAsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uQ29sb3IuY29weSh0LmF0dGVudWF0aW9uQ29sb3IpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsdGhpcy5zcGVjdWxhckNvbG9yLmNvcHkodC5zcGVjdWxhckNvbG9yKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9dC5zcGVjdWxhckNvbG9yTWFwLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGFuKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9WUksdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnNwZWN1bGFyLmNvcHkodC5zcGVjdWxhciksdGhpcy5zaGluaW5lc3M9dC5zaGluaW5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1ZSSx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1vXyx0aGlzLm5vcm1hbFNjYWxlPW5ldyAkZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFdke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgUnI9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBSci5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LHZvaWQgMCE9PWU/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246Im51bWJlciI9PXR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2xldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydChmdW5jdGlvbihyLG8pe3JldHVybiBuW3JdLW5bb119KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IG89MCxzPTA7cyE9PWk7KytvKXtsZXQgYT1lW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbcysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEsbz1uWzBdO2Zvcig7dm9pZCAwIT09byYmdm9pZCAwPT09b1tpXTspbz1uW3IrK107aWYodm9pZCAwPT09bylyZXR1cm47bGV0IHM9b1tpXTtpZih2b2lkIDAhPT1zKWlmKEFycmF5LmlzQXJyYXkocykpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2guYXBwbHkoZSxzKSksbz1uW3IrK119d2hpbGUodm9pZCAwIT09byk7ZWxzZSBpZih2b2lkIDAhPT1zLnRvQXJyYXkpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxzLnRvQXJyYXkoZSxlLmxlbmd0aCkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2gocykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IG89bi5jbG9uZSgpO28ubmFtZT10O2xldCBzPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sZD1jLmdldFZhbHVlU2l6ZSgpLHU9W10scD1bXTtmb3IobGV0IGY9MDtmPGMudGltZXMubGVuZ3RoOysrZil7bGV0IG09Yy50aW1lc1tmXSpyO2lmKCEobTxlfHxtPj1pKSl7dS5wdXNoKGMudGltZXNbZl0pO2ZvcihsZXQgYj0wO2I8ZDsrK2IpcC5wdXNoKGMudmFsdWVzW2YqZCtiXSl9fTAhPT11Lmxlbmd0aCYmKGMudGltZXM9UnIuY29udmVydEFycmF5KHUsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9UnIuY29udmVydEFycmF5KHAsYy52YWx1ZXMuY29uc3RydWN0b3IpLHMucHVzaChjKSl9by50cmFja3M9cztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKWE+by50cmFja3NbbF0udGltZXNbMF0mJihhPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgsbz10L2k7Zm9yKGxldCBzPTA7czxyOysrcyl7bGV0IGE9ZS50cmFja3Nbc10sbD1hLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09bHx8InN0cmluZyI9PT1sKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24oeSl7cmV0dXJuIHkubmFtZT09PWEubmFtZSYmeS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKHZvaWQgMD09PWMpY29udGludWU7bGV0IGQ9MCx1PWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGQ9dS8zKTtsZXQgcD0wLGY9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYocD1mLzMpO2xldCBiLG09YS50aW1lcy5sZW5ndGgtMTtpZihvPD1hLnRpbWVzWzBdKWI9UnIuYXJyYXlTbGljZShhLnZhbHVlcyxkLHUtZCk7ZWxzZSBpZihvPj1hLnRpbWVzW21dKXtsZXQgeT1tKnUrZDtiPVJyLmFycmF5U2xpY2UoYS52YWx1ZXMseSx5K3UtZCl9ZWxzZXtsZXQgeT1hLmNyZWF0ZUludGVycG9sYW50KCkseD1kLFI9dS1kO3kuZXZhbHVhdGUobyksYj1Sci5hcnJheVNsaWNlKHkucmVzdWx0QnVmZmVyLHgsUil9InF1YXRlcm5pb24iPT09bCYmKG5ldyB0cykuZnJvbUFycmF5KGIpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoYik7bGV0IE09Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCB5PTA7eTxNOysreSl7bGV0IHg9eSpmK3A7aWYoInF1YXRlcm5pb24iPT09bCl0cy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyx4LGIsMCxjLnZhbHVlcyx4KTtlbHNle2xldCBSPWYtMipwO2ZvcihsZXQgQT0wO0E8UjsrK0EpYy52YWx1ZXNbeCtBXS09YltBXX19fXJldHVybiBuLmJsZW5kTW9kZT0yNTAxLG59fSxYYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9dm9pZCAwIT09cj9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLG89ZVtpLTFdO2U6e3Q6e2xldCBzO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHZvaWQgMD09PXIpe2lmKHQ8bylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQsbyl9aWYoaT09PWEpYnJlYWs7aWYobz1yLHI9ZVsrK2ldLHQ8cilicmVhayB0fXM9ZS5sZW5ndGg7YnJlYWsgbn1pZih0Pj1vKWJyZWFrIGU7e2xldCBhPWVbMV07dDxhJiYoaT0yLG89YSk7Zm9yKGxldCBsPWktMjs7KXtpZih2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihpPT09bClicmVhaztpZihyPW8sbz1lWy0taS0xXSx0Pj1vKWJyZWFrIHR9cz1pLGk9MH19Zm9yKDtpPHM7KXtsZXQgYT1pK3M+Pj4xO3Q8ZVthXT9zPWE6aT1hKzF9aWYocj1lW2ldLG89ZVtpLTFdLHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKHZvaWQgMD09PXIpcmV0dXJuIGk9ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmFmdGVyRW5kXyhpLTEsbyx0KX10aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhpLG8scil9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGksbyx0LHIpfWdldFNldHRpbmdzXygpe3JldHVybiB0aGlzLnNldHRpbmdzfHx0aGlzLkRlZmF1bHRTZXR0aW5nc199Y29weVNhbXBsZVZhbHVlXyh0KXtsZXQgZT10aGlzLnJlc3VsdEJ1ZmZlcixpPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUsbz10KnI7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWVbc109aVtvK3NdO3JldHVybiBlfWludGVycG9sYXRlXygpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX1pbnRlcnZhbENoYW5nZWRfKCl7fX07WGMucHJvdG90eXBlLmJlZm9yZVN0YXJ0Xz1YYy5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXyxYYy5wcm90b3R5cGUuYWZ0ZXJFbmRfPVhjLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3ZhciBPQj1jbGFzcyBleHRlbmRzIFhje2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpLHRoaXMuX3dlaWdodFByZXY9LTAsdGhpcy5fb2Zmc2V0UHJldj0tMCx0aGlzLl93ZWlnaHROZXh0PS0wLHRoaXMuX29mZnNldE5leHQ9LTAsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXtlbmRpbmdTdGFydDpWMCxlbmRpbmdFbmQ6VjB9fWludGVydmFsQ2hhbmdlZF8odCxlLGkpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG89dC0yLHM9dCsxLGE9cltvXSxsPXJbc107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBIMDpvPXQsYT0yKmUtaTticmVhaztjYXNlIDI0MDI6bz1yLmxlbmd0aC0yLGE9ZStyW29dLXJbbysxXTticmVhaztkZWZhdWx0Om89dCxhPWl9aWYodm9pZCAwPT09bClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgSDA6cz10LGw9MippLWU7YnJlYWs7Y2FzZSAyNDAyOnM9MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6cz10LTEsbD1lfWxldCBjPS41KihpLWUpLGQ9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PW8qZCx0aGlzLl9vZmZzZXROZXh0PXMqZH1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIscz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLGQ9dGhpcy5fb2Zmc2V0UHJldix1PXRoaXMuX29mZnNldE5leHQscD10aGlzLl93ZWlnaHRQcmV2LGY9dGhpcy5fd2VpZ2h0TmV4dCxtPShpLWUpLyhyLWUpLGI9bSptLE09YiptLHk9LXAqTSsyKnAqYi1wKm0seD0oMStwKSpNKygtMS41LTIqcCkqYisoLS41K3ApKm0rMSxSPSgtMS1mKSpNKygxLjUrZikqYisuNSptLEE9ZipNLWYqYjtmb3IobGV0IFY9MDtWIT09YTsrK1Ypb1tWXT15KnNbZCtWXSt4KnNbYytWXStSKnNbbCtWXStBKnNbdStWXTtyZXR1cm4gb319LFZJPWNsYXNzIGV4dGVuZHMgWGN7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSxkPShpLWUpLyhyLWUpLHU9MS1kO2ZvcihsZXQgcD0wO3AhPT1hOysrcClvW3BdPXNbYytwXSp1K3NbbCtwXSpkO3JldHVybiBvfX0sa0I9Y2xhc3MgZXh0ZW5kcyBYY3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sc2w9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Sci5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Sci5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGksZT10LmNvbnN0cnVjdG9yO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOlJyLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6UnIuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IGtCKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBWSSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgT0IodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMjMwMDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7aWYodD09PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiIsaSksdGhpc31yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGFudD1lLHRoaXN9Z2V0SW50ZXJwb2xhdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gMjMwMTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiAyMzAyfX1nZXRWYWx1ZVNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoL3RoaXMudGltZXMubGVuZ3RofXNoaWZ0KHQpe2lmKDAhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0rPXR9cmV0dXJuIHRoaXN9c2NhbGUodCl7aWYoMSE9PXQpe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7bGV0IGk9dGhpcy50aW1lcyxyPWkubGVuZ3RoLG89MCxzPXItMTtmb3IoO28hPT1yJiZpW29dPHQ7KSsrbztmb3IoOy0xIT09cyYmaVtzXT5lOyktLXM7aWYoKytzLDAhPT1vfHxzIT09cil7bz49cyYmKHM9TWF0aC5tYXgocywxKSxvPXMtMSk7bGV0IGE9dGhpcy5nZXRWYWx1ZVNpemUoKTt0aGlzLnRpbWVzPVJyLmFycmF5U2xpY2UoaSxvLHMpLHRoaXMudmFsdWVzPVJyLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsbyphLHMqYSl9cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7ZS1NYXRoLmZsb29yKGUpIT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLG89aS5sZW5ndGg7MD09PW8mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBzPW51bGw7Zm9yKGxldCBhPTA7YSE9PW87YSsrKXtsZXQgbD1pW2FdO2lmKCJudW1iZXIiPT10eXBlb2YgbCYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobnVsbCE9PXMmJnM+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxzKSx0PSExO2JyZWFrfXM9bH1pZih2b2lkIDAhPT1yJiZSci5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PVJyLmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1Sci5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj0yMzAyPT09dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCksbz10Lmxlbmd0aC0xLHM9MTtmb3IobGV0IGE9MTthPG87KythKXtsZXQgbD0hMSxjPXRbYV07aWYoYyE9PXRbYSsxXSYmKDEhPT1hfHxjIT09dFswXSkpaWYocilsPSEwO2Vsc2V7bGV0IHU9YSppLHA9dS1pLGY9dStpO2ZvcihsZXQgbT0wO20hPT1pOysrbSl7bGV0IGI9ZVt1K21dO2lmKGIhPT1lW3ArbV18fGIhPT1lW2YrbV0pe2w9ITA7YnJlYWt9fX1pZihsKXtpZihhIT09cyl7dFtzXT10W2FdO2xldCB1PWEqaSxwPXMqaTtmb3IobGV0IGY9MDtmIT09aTsrK2YpZVtwK2ZdPWVbdStmXX0rK3N9fWlmKG8+MCl7dFtzXT10W29dO2ZvcihsZXQgYT1vKmksbD1zKmksYz0wO2MhPT1pOysrYyllW2wrY109ZVthK2NdOysrc31yZXR1cm4gcyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPVJyLmFycmF5U2xpY2UodCwwLHMpLHRoaXMudmFsdWVzPVJyLmFycmF5U2xpY2UoZSwwLHMqaSkpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc31jbG9uZSgpe2xldCB0PVJyLmFycmF5U2xpY2UodGhpcy50aW1lcywwKSxlPVJyLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCkscj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtzbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LHNsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LHNsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxO3ZhciBNcD1jbGFzcyBleHRlbmRzIHNse307TXAucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiLE1wLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksTXAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsTXAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsTXAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEhJPWNsYXNzIGV4dGVuZHMgc2x7fTtISS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO3ZhciBuXz1jbGFzcyBleHRlbmRzIHNse307bl8ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9Im51bWJlciI7dmFyIEZCPWNsYXNzIGV4dGVuZHMgWGN7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPShpLWUpLyhyLWUpLGM9dCphO2ZvcihsZXQgZD1jK2E7YyE9PWQ7Yys9NCl0cy5zbGVycEZsYXQobywwLHMsYy1hLHMsYyxsKTtyZXR1cm4gb319LGJtPWNsYXNzIGV4dGVuZHMgc2x7SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgRkIodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfX07Ym0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InF1YXRlcm5pb24iLGJtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxLGJtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciB3cD1jbGFzcyBleHRlbmRzIHNse307d3AucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyIsd3AucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheSx3cC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMCx3cC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCx3cC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgaV89Y2xhc3MgZXh0ZW5kcyBzbHt9O2lfLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciB6ST1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPTI1MDApe3RoaXMubmFtZT10LHRoaXMudHJhY2tzPWksdGhpcy5kdXJhdGlvbj1lLHRoaXMuYmxlbmRNb2RlPXIsdGhpcy51dWlkPUpsKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7bGV0IGU9W10saT10LnRyYWNrcyxyPTEvKHQuZnBzfHwxKTtmb3IobGV0IHM9MCxhPWkubGVuZ3RoO3MhPT1hOysrcyllLnB1c2goSTJlKGlbc10pLnNjYWxlKHIpKTtsZXQgbz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gby51dWlkPXQudXVpZCxvfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBvPTAscz1pLmxlbmd0aDtvIT09czsrK28pZS5wdXNoKHNsLnRvSlNPTihpW29dKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBvPWUubGVuZ3RoLHM9W107Zm9yKGxldCBhPTA7YTxvO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErby0xKSVvLGEsKGErMSklbyksYy5wdXNoKDAsMSwwKTtsZXQgZD1Sci5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9UnIuc29ydGVkQXJyYXkobCwxLGQpLGM9UnIuc29ydGVkQXJyYXkoYywxLGQpLCFyJiYwPT09bFswXSYmKGwucHVzaChvKSxjLnB1c2goY1swXSkpLHMucHVzaChuZXcgbl8oIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEscyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O0FycmF5LmlzQXJyYXkodCl8fChpPXQuZ2VvbWV0cnkmJnQuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8dC5hbmltYXRpb25zKTtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpZihpW3JdLm5hbWU9PT1lKXJldHVybiBpW3JdO3JldHVybiBudWxsfXN0YXRpYyBDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlcyh0LGUsaSl7bGV0IHI9e30sbz0vXihbXHctXSo/KShbXGRdKykkLztmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV0sZD1jLm5hbWUubWF0Y2gobyk7aWYoZCYmZC5sZW5ndGg+MSl7bGV0IHU9ZFsxXSxwPXJbdV07cHx8KHJbdV09cD1bXSkscC5wdXNoKGMpfX1sZXQgcz1bXTtmb3IobGV0IGEgaW4gcilzLnB1c2godGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShhLHJbYV0sZSxpKSk7cmV0dXJuIHN9c3RhdGljIHBhcnNlQW5pbWF0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDtsZXQgaT1mdW5jdGlvbih1LHAsZixtLGIpe2lmKDAhPT1mLmxlbmd0aCl7bGV0IE09W10seT1bXTtSci5mbGF0dGVuSlNPTihmLE0seSxtKSwwIT09TS5sZW5ndGgmJmIucHVzaChuZXcgdShwLE0seSkpfX0scj1bXSxvPXQubmFtZXx8ImRlZmF1bHQiLHM9dC5mcHN8fDMwLGE9dC5ibGVuZE1vZGUsbD10Lmxlbmd0aHx8LTEsYz10LmhpZXJhcmNoeXx8W107Zm9yKGxldCB1PTA7dTxjLmxlbmd0aDt1Kyspe2xldCBwPWNbdV0ua2V5cztpZihwJiYwIT09cC5sZW5ndGgpaWYocFswXS5tb3JwaFRhcmdldHMpe2xldCBtLGY9e307Zm9yKG09MDttPHAubGVuZ3RoO20rKylpZihwW21dLm1vcnBoVGFyZ2V0cylmb3IobGV0IGI9MDtiPHBbbV0ubW9ycGhUYXJnZXRzLmxlbmd0aDtiKyspZltwW21dLm1vcnBoVGFyZ2V0c1tiXV09LTE7Zm9yKGxldCBiIGluIGYpe2xldCBNPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PXBbbV0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBSPXBbbV07TS5wdXNoKFIudGltZSkseS5wdXNoKFIubW9ycGhUYXJnZXQ9PT1iPzE6MCl9ci5wdXNoKG5ldyBuXygiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrYisiXSIsTSx5KSl9bD1mLmxlbmd0aCooc3x8MSl9ZWxzZXtsZXQgZj0iLmJvbmVzWyIrZVt1XS5uYW1lKyJdIjtpKGlfLGYrIi5wb3NpdGlvbiIscCwicG9zIixyKSxpKGJtLGYrIi5xdWF0ZXJuaW9uIixwLCJyb3QiLHIpLGkoaV8sZisiLnNjYWxlIixwLCJzY2wiLHIpfX1yZXR1cm4gMD09PXIubGVuZ3RoP251bGw6bmV3IHRoaXMobyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCBlPTA7Zm9yKGxldCBpPTAscj10aGlzLnRyYWNrcy5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz10aGlzLnRyYWNrc1tpXTtlPU1hdGgubWF4KGUsby50aW1lc1tvLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249ZSx0aGlzfXRyaW0oKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0udHJpbSgwLHRoaXMuZHVyYXRpb24pO3JldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQ9dCYmdGhpcy50cmFja3NbZV0udmFsaWRhdGUoKTtyZXR1cm4gdH1vcHRpbWl6ZSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfWNsb25lKCl7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5uYW1lLHRoaXMuZHVyYXRpb24sdCx0aGlzLmJsZW5kTW9kZSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9KU09OKHRoaXMpfX07ZnVuY3Rpb24gSTJlKG4pe2lmKHZvaWQgMD09PW4udHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9ZnVuY3Rpb24obil7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gbl87Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBpXztjYXNlImNvbG9yIjpyZXR1cm4gSEk7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gYm07Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBNcDtjYXNlInN0cmluZyI6cmV0dXJuIHdwfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrbil9KG4udHlwZSk7aWYodm9pZCAwPT09bi50aW1lcyl7bGV0IGU9W10saT1bXTtSci5mbGF0dGVuSlNPTihuLmtleXMsZSxpLCJ2YWx1ZSIpLG4udGltZXM9ZSxuLnZhbHVlcz1pfXJldHVybiB2b2lkIDAhPT10LnBhcnNlP3QucGFyc2Uobik6bmV3IHQobi5uYW1lLG4udGltZXMsbi52YWx1ZXMsbi5pbnRlcnBvbGF0aW9uKX12YXIgcl89e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKG4sdCl7ITEhPT10aGlzLmVuYWJsZWQmJih0aGlzLmZpbGVzW25dPXQpfSxnZXQ6ZnVuY3Rpb24obil7aWYoITEhPT10aGlzLmVuYWJsZWQpcmV0dXJuIHRoaXMuZmlsZXNbbl19LHJlbW92ZTpmdW5jdGlvbihuKXtkZWxldGUgdGhpcy5maWxlc1tuXX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX0sQTJlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IGwscj10aGlzLG89ITEscz0wLGE9MCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbihkKXthKyssITE9PT1vJiZ2b2lkIDAhPT1yLm9uU3RhcnQmJnIub25TdGFydChkLHMsYSksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKGQpe3MrKyx2b2lkIDAhPT1yLm9uUHJvZ3Jlc3MmJnIub25Qcm9ncmVzcyhkLHMsYSkscz09PWEmJihvPSExLHZvaWQgMCE9PXIub25Mb2FkJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24oZCl7dm9pZCAwIT09ci5vbkVycm9yJiZyLm9uRXJyb3IoZCl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbihkKXtyZXR1cm4gbD9sKGQpOmR9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24oZCl7cmV0dXJuIGw9ZCx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24oZCx1KXtyZXR1cm4gYy5wdXNoKGQsdSksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKGQpe2xldCB1PWMuaW5kZXhPZihkKTtyZXR1cm4tMSE9PXUmJmMuc3BsaWNlKHUsMiksdGhpc30sdGhpcy5nZXRIYW5kbGVyPWZ1bmN0aW9uKGQpe2ZvcihsZXQgdT0wLHA9Yy5sZW5ndGg7dTxwO3UrPTIpe2xldCBmPWNbdV0sbT1jW3UrMV07aWYoZi5nbG9iYWwmJihmLmxhc3RJbmRleD0wKSxmLnRlc3QoZCkpcmV0dXJuIG19cmV0dXJuIG51bGx9fX0sUWM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXZvaWQgMCE9PXQ/dDpBMmUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQsZSl7bGV0IGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXtpLmxvYWQodCxyLGUsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0semQ9e30sTEI9Y2xhc3MgZXh0ZW5kcyBRY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMD09PXQmJih0PSIiKSx2b2lkIDAhPT10aGlzLnBhdGgmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXJfLmdldCh0KTtpZih2b2lkIDAhPT1vKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntlJiZlKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKHZvaWQgMCE9PXpkW3RdKXJldHVybiB2b2lkIHpkW3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aSxvbkVycm9yOnJ9KTt6ZFt0XT1bXSx6ZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IHM9bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gocykudGhlbihjPT57aWYoMjAwPT09Yy5zdGF0dXN8fDA9PT1jLnN0YXR1cyl7aWYoMD09PWMuc3RhdHVzJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPiJ1Inx8dm9pZCAwPT09Yy5ib2R5LmdldFJlYWRlcilyZXR1cm4gYztsZXQgZD16ZFt0XSx1PWMuYm9keS5nZXRSZWFkZXIoKSxwPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZj1wP3BhcnNlSW50KHApOjAsbT0wIT09ZixiPTAsTT1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KHkpeyFmdW5jdGlvbiB4KCl7dS5yZWFkKCkudGhlbigoe2RvbmU6Uix2YWx1ZTpBfSk9PntpZihSKXkuY2xvc2UoKTtlbHNle2IrPUEuYnl0ZUxlbmd0aDtsZXQgVj1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOm0sbG9hZGVkOmIsdG90YWw6Zn0pO2ZvcihsZXQgdGU9MCxLPWQubGVuZ3RoO3RlPEs7dGUrKyl7bGV0IHhlPWRbdGVdO3hlLm9uUHJvZ3Jlc3MmJnhlLm9uUHJvZ3Jlc3MoVil9eS5lbnF1ZXVlKEEpLHgoKX19KX0oKX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKE0pfXRocm93IEVycm9yKGBmZXRjaCBmb3IgIiR7Yy51cmx9IiByZXNwb25kZWQgd2l0aCAke2Muc3RhdHVzfTogJHtjLnN0YXR1c1RleHR9YCl9KS50aGVuKGM9Pntzd2l0Y2gobCl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGMuYXJyYXlCdWZmZXIoKTtjYXNlImJsb2IiOnJldHVybiBjLmJsb2IoKTtjYXNlImRvY3VtZW50IjpyZXR1cm4gYy50ZXh0KCkudGhlbihkPT4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGQsYSkpO2Nhc2UianNvbiI6cmV0dXJuIGMuanNvbigpO2RlZmF1bHQ6aWYodm9pZCAwPT09YSlyZXR1cm4gYy50ZXh0KCk7e2xldCB1PS9jaGFyc2V0PSI/KFteOyJcc10qKSI/L2kuZXhlYyhhKSxwPXUmJnVbMV0/dVsxXS50b0xvd2VyQ2FzZSgpOnZvaWQgMCxmPW5ldyBUZXh0RGVjb2RlcihwKTtyZXR1cm4gYy5hcnJheUJ1ZmZlcigpLnRoZW4obT0+Zi5kZWNvZGUobSkpfX19KS50aGVuKGM9PntyXy5hZGQodCxjKTtsZXQgZD16ZFt0XTtkZWxldGUgemRbdF07Zm9yKGxldCB1PTAscD1kLmxlbmd0aDt1PHA7dSsrKXtsZXQgZj1kW3VdO2Yub25Mb2FkJiZmLm9uTG9hZChjKX19KS5jYXRjaChjPT57bGV0IGQ9emRbdF07aWYodm9pZCAwPT09ZCl0aHJvdyB0aGlzLm1hbmFnZXIuaXRlbUVycm9yKHQpLGM7ZGVsZXRlIHpkW3RdO2ZvcihsZXQgdT0wLHA9ZC5sZW5ndGg7dTxwO3UrKyl7bGV0IGY9ZFt1XTtmLm9uRXJyb3ImJmYub25FcnJvcihjKX10aGlzLm1hbmFnZXIuaXRlbUVycm9yKHQpfSkuZmluYWxseSgoKT0+e3RoaXMubWFuYWdlci5pdGVtRW5kKHQpfSksdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KX1zZXRSZXNwb25zZVR5cGUodCl7cmV0dXJuIHRoaXMucmVzcG9uc2VUeXBlPXQsdGhpc31zZXRNaW1lVHlwZSh0KXtyZXR1cm4gdGhpcy5taW1lVHlwZT10LHRoaXN9fSxVST1jbGFzcyBleHRlbmRzIFFje2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLHM9cl8uZ2V0KHQpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUocyksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLHM7bGV0IGE9TXgoImltZyIpO2Z1bmN0aW9uIGwoKXtkKCkscl8uYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKHUpe2QoKSxyJiZyKHUpLG8ubWFuYWdlci5pdGVtRXJyb3IodCksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gZCgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksImRhdGE6IiE9PXQuc3Vic3RyKDAsNSkmJnZvaWQgMCE9PXRoaXMuY3Jvc3NPcmlnaW4mJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLG8ubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sQkI9Y2xhc3MgZXh0ZW5kcyBRY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBRMCxzPW5ldyBVSSh0aGlzLm1hbmFnZXIpO3Muc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbikscy5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe3MubG9hZCh0W2NdLGZ1bmN0aW9uKGQpe28uaW1hZ2VzW2NdPWQsYSsrLDY9PT1hJiYoby5uZWVkc1VwZGF0ZT0hMCxlJiZlKG8pKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIG99fSxWQj1jbGFzcyBleHRlbmRzIFFje2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IG89bmV3IGxvLHM9bmV3IFVJKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbikscy5zZXRQYXRoKHRoaXMucGF0aCkscy5sb2FkKHQsZnVuY3Rpb24oYSl7by5pbWFnZT1hLG8ubmVlZHNVcGRhdGU9ITAsdm9pZCAwIT09ZSYmZShvKX0saSxyKSxvfX0sYWw9Y2xhc3MgZXh0ZW5kcyBCaXtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBhbih0KSx0aGlzLmludGVuc2l0eT1lfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx2b2lkIDAhPT10aGlzLmdyb3VuZENvbG9yJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5kaXN0YW5jZSYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYW5nbGUmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx2b2lkIDAhPT10aGlzLmRlY2F5JiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdm9pZCAwIT09dGhpcy5wZW51bWJyYSYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHZvaWQgMCE9PXRoaXMuc2hhZG93JiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX07YWwucHJvdG90eXBlLmlzTGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxpKSx0aGlzLnR5cGU9IkhlbWlzcGhlcmVMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KEJpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLmdyb3VuZENvbG9yPW5ldyBhbihlKX1jb3B5KHQpe3JldHVybiBhbC5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5ncm91bmRDb2xvci5jb3B5KHQuZ3JvdW5kQ29sb3IpLHRoaXN9fS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHQ9ITA7dmFyIExlZT1uZXcgeG4sQmVlPW5ldyAkLFZlZT1uZXcgJCxVeD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhbWVyYT10LHRoaXMuYmlhcz0wLHRoaXMubm9ybWFsQmlhcz0wLHRoaXMucmFkaXVzPTEsdGhpcy5ibHVyU2FtcGxlcz04LHRoaXMubWFwU2l6ZT1uZXcgJGUoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcgeG4sdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgWjAsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyAkZSgxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBaaSgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O0JlZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksZS5wb3NpdGlvbi5jb3B5KEJlZSksVmVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQoVmVlKSxlLnVwZGF0ZU1hdHJpeFdvcmxkKCksTGVlLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KExlZSksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSkmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sakk9Y2xhc3MgZXh0ZW5kcyBVeHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBlcyg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPTIqbkIqdC5hbmdsZSp0aGlzLmZvY3VzLHI9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxlLmZhcjsoaSE9PWUuZm92fHxyIT09ZS5hc3BlY3R8fG8hPT1lLmZhcikmJihlLmZvdj1pLGUuYXNwZWN0PXIsZS5mYXI9byxlLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O2pJLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGFse2NvbnN0cnVjdG9yKHQsZSxpPTAscj1NYXRoLlBJLzMsbz0wLHM9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KEJpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgQmksdGhpcy5kaXN0YW5jZT1pLHRoaXMuYW5nbGU9cix0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1zLHRoaXMuc2hhZG93PW5ldyBqSX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIEhlZT1uZXcgeG4sZng9bmV3ICQsWDM9bmV3ICQsR0k9Y2xhc3MgZXh0ZW5kcyBVeHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBlcyg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgJGUoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgWmkoMiwxLDEsMSksbmV3IFppKDAsMSwxLDEpLG5ldyBaaSgzLDEsMSwxKSxuZXcgWmkoMSwxLDEsMSksbmV3IFppKDMsMCwxLDEpLG5ldyBaaSgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyAkKDEsMCwwKSxuZXcgJCgtMSwwLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpLG5ldyAkKDAsMSwwKSxuZXcgJCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwwLDEpLG5ldyAkKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LG89dC5kaXN0YW5jZXx8aS5mYXI7byE9PWkuZmFyJiYoaS5mYXI9byxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksZnguc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShmeCksWDMuY29weShpLnBvc2l0aW9uKSxYMy5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChYMyksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1meC54LC1meC55LC1meC56KSxIZWUubXVsdGlwbHlNYXRyaWNlcyhpLnByb2plY3Rpb25NYXRyaXgsaS5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoSGVlKX19O0dJLnByb3RvdHlwZS5pc1BvaW50TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmRlY2F5PXIsdGhpcy5zaGFkb3c9bmV3IEdJfWdldCBwb3dlcigpe3JldHVybiA0KnRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzUG9pbnRMaWdodD0hMDt2YXIgV0k9Y2xhc3MgZXh0ZW5kcyBVeHtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBtbSgtNSw1LDUsLTUsLjUsNTAwKSl9fTtXSS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgYWx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KEJpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgQmksdGhpcy5zaGFkb3c9bmV3IFdJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBhbHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJBbWJpZW50TGlnaHQifX0ucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgYWx7Y29uc3RydWN0b3IodCxlLGk9MTAscj0xMCl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9aSx0aGlzLmhlaWdodD1yfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSp0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC53aWR0aD10aGlzLndpZHRoLGUub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodCxlfX0ucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodD0hMDt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3ICQpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkoc1swXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksZS5hZGRTY2FsZWRWZWN0b3Ioc1sxXSwuNDg4NjAzKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sLjQ4ODYwMypvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLC40ODg2MDMqaSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s0XSxpKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0scipvKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihzWzddLGkqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNTQ2Mjc0KihpKmktcipyKSksZX1nZXRJcnJhZGlhbmNlQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sMS4wMjMzMjgqciksZS5hZGRTY2FsZWRWZWN0b3Ioc1syXSwxLjAyMzMyOCpvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLDEuMDIzMzI4KmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0sLjg1ODA4NippKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0sLjg1ODA4NipyKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSwuODU4MDg2KmkqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNDI5MDQzKihpKmktcipyKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5sZXJwKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlKzMqcik7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlKzMqcik7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypvLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipvLGVbNl09LjMxNTM5MiooMypvKm8tMSksZVs3XT0xLjA5MjU0OCppKm8sZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O3FJLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIGp4PWNsYXNzIGV4dGVuZHMgYWx7Y29uc3RydWN0b3IodD1uZXcgcUksZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O2p4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIHFCPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlcjwidSIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2h7cmV0dXJuIGV9fXN0YXRpYyBleHRyYWN0VXJsQmFzZSh0KXtsZXQgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6dC5zdWJzdHIoMCxlKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0fHwiIj09PXQ/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fTsoY2xhc3MgZXh0ZW5kcyBVaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITAsY2xhc3MgZXh0ZW5kcyBRY3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA+InUiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLHM9cl8uZ2V0KHQpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUocyksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLHM7bGV0IGE9e307YS5jcmVkZW50aWFscz0iYW5vbnltb3VzIj09PXRoaXMuY3Jvc3NPcmlnaW4/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtyXy5hZGQodCxsKSxlJiZlKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19LnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBtSSxRQj1jbGFzcyBleHRlbmRzIFFje2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IG89dGhpcyxzPW5ldyBMQih0aGlzLm1hbmFnZXIpO3Muc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihhKXt0cnl7bGV0IGw9YS5zbGljZSgwKTsodm9pZCAwPT09bUkmJihtST1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLG1JKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbihkKXtlKGQpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fTsoY2xhc3MgZXh0ZW5kcyBqeHtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih2b2lkIDAsaSk7bGV0IHI9KG5ldyBhbikuc2V0KHQpLG89KG5ldyBhbikuc2V0KGUpLHM9bmV3ICQoci5yLHIuZyxyLmIpLGE9bmV3ICQoby5yLG8uZyxvLmIpLGw9TWF0aC5zcXJ0KE1hdGguUEkpLGM9bCpNYXRoLnNxcnQoLjc1KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5jb3B5KHMpLmFkZChhKS5tdWx0aXBseVNjYWxhcihsKSx0aGlzLnNoLmNvZWZmaWNpZW50c1sxXS5jb3B5KHMpLnN1YihhKS5tdWx0aXBseVNjYWxhcihjKX19KS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMCxjbGFzcyBleHRlbmRzIGp4e2NvbnN0cnVjdG9yKHQsZT0xKXtzdXBlcih2b2lkIDAsZSk7bGV0IGk9KG5ldyBhbikuc2V0KHQpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLnNldChpLnIsaS5nLGkuYikubXVsdGlwbHlTY2FsYXIoMipNYXRoLnNxcnQoTWF0aC5QSSkpfX0ucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0UHJvYmU9ITA7dmFyIGVWPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcixvLHM7c3dpdGNoKHRoaXMuYmluZGluZz10LHRoaXMudmFsdWVTaXplPWksZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxzPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoNippKSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoNSppKTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxzPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoNSppKX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PXMsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUsbz10KnIrcixzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZigwPT09cyl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbbythXT1pW2FdO3M9ZX1lbHNlIHMrPWUsdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGksbywwLGUvcyxyKTt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9c31hY2N1bXVsYXRlQWRkaXRpdmUodCl7bGV0IGU9dGhpcy5idWZmZXIsaT10aGlzLnZhbHVlU2l6ZSxyPWkqdGhpcy5fYWRkSW5kZXg7MD09PXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGUsciwwLHQsaSksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9YXBwbHkodCl7bGV0IGU9dGhpcy52YWx1ZVNpemUsaT10aGlzLmJ1ZmZlcixyPXQqZStlLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0LHM9dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUsYT10aGlzLmJpbmRpbmc7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxvPDEmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHIsZSp0aGlzLl9vcmlnSW5kZXgsMS1vLGUpLHM+MCYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoaSxyLHRoaXMuX2FkZEluZGV4KmUsMSxlKTtmb3IobGV0IGw9ZSxjPWUrZTtsIT09YzsrK2wpaWYoaVtsXSE9PWlbbCtlXSl7YS5zZXRWYWx1ZShpLHIpO2JyZWFrfX1zYXZlT3JpZ2luYWxTdGF0ZSgpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX29yaWdJbmRleDt0aGlzLmJpbmRpbmcuZ2V0VmFsdWUoZSxyKTtmb3IobGV0IG89aSxzPXI7byE9PXM7KytvKWVbb109ZVtyK28laV07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfXJlc3RvcmVPcmlnaW5hbFN0YXRlKCl7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLDMqdGhpcy52YWx1ZVNpemUpfV9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpe2xldCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9dDtpPGU7aSsrKXRoaXMuYnVmZmVyW2ldPTB9X3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uKCl7dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKSx0aGlzLmJ1ZmZlclt0aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSszXT0xfV9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIoKXtsZXQgdD10aGlzLl9vcmlnSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9MDtpPHRoaXMudmFsdWVTaXplO2krKyl0aGlzLmJ1ZmZlcltlK2ldPXRoaXMuYnVmZmVyW3QraV19X3NlbGVjdCh0LGUsaSxyLG8pe2lmKHI+PS41KWZvcihsZXQgcz0wO3MhPT1vOysrcyl0W2Urc109dFtpK3NdfV9zbGVycCh0LGUsaSxyKXt0cy5zbGVycEZsYXQodCxlLHQsZSx0LGkscil9X3NsZXJwQWRkaXRpdmUodCxlLGkscixvKXtsZXQgcz10aGlzLl93b3JrSW5kZXgqbzt0cy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LHMsdCxlLHQsaSksdHMuc2xlcnBGbGF0KHQsZSx0LGUsdCxzLHIpfV9sZXJwKHQsZSxpLHIsbyl7bGV0IHM9MS1yO2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IGw9ZSthO3RbbF09dFtsXSpzK3RbaSthXSpyfX1fbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7Zm9yKGxldCBzPTA7cyE9PW87KytzKXtsZXQgYT1lK3M7dFthXT10W2FdK3RbaStzXSpyfX19LGhWPSJcXFtcXF1cXC46XFwvIixQMmU9bmV3IFJlZ0V4cCgiWyIraFYrIl0iLCJnIiksZ1Y9IlteIitoVisiXSIsTzJlPSJbXiIraFYucmVwbGFjZSgiXFwuIiwiIikrIl0iLGsyZT0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLGdWKSxGMmU9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsTzJlKSxOMmU9Lyg/OlwuKFdDKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsZ1YpLEwyZT0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsZ1YpLEIyZT1uZXcgUmVnRXhwKCJeIitrMmUrRjJlK04yZStMMmUrIiQiKSxWMmU9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sdFY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fHhyLnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgcj10aGlzLl9iaW5kaW5nc1t0aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c19dO3ZvaWQgMCE9PXImJnIuZ2V0VmFsdWUodCxlKX1zZXRWYWx1ZSh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbz1pLmxlbmd0aDtyIT09bzsrK3IpaVtyXS5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18saT10Lmxlbmd0aDtlIT09aTsrK2UpdFtlXS51bmJpbmQoKX19LHhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMucGF0aD1pLHRoaXMucGFyc2VkUGF0aD1yfHxuLnBhcnNlVHJhY2tOYW1lKGkpLHRoaXMubm9kZT1uLmZpbmROb2RlKGUsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8ZSx0aGlzLnJvb3ROb2RlPWUsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKGUsaSxyKXtyZXR1cm4gZSYmZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBuLkNvbXBvc2l0ZShlLGkscik6bmV3IG4oZSxpLHIpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKGUpe3JldHVybiBlLnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKFAyZSwiIil9c3RhdGljIHBhcnNlVHJhY2tOYW1lKGUpe2xldCBpPUIyZS5leGVjKGUpO2lmKCFpKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK2UpO2xldCByPXtub2RlTmFtZTppWzJdLG9iamVjdE5hbWU6aVszXSxvYmplY3RJbmRleDppWzRdLHByb3BlcnR5TmFtZTppWzVdLHByb3BlcnR5SW5kZXg6aVs2XX0sbz1yLm5vZGVOYW1lJiZyLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYodm9pZCAwIT09byYmLTEhPT1vKXtsZXQgcz1yLm5vZGVOYW1lLnN1YnN0cmluZyhvKzEpOy0xIT09VjJlLmluZGV4T2YocykmJihyLm5vZGVOYW1lPXIubm9kZU5hbWUuc3Vic3RyaW5nKDAsbyksci5vYmplY3ROYW1lPXMpfWlmKG51bGw9PT1yLnByb3BlcnR5TmFtZXx8MD09PXIucHJvcGVydHlOYW1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrZSk7cmV0dXJuIHJ9c3RhdGljIGZpbmROb2RlKGUsaSl7aWYoIWl8fCIiPT09aXx8Ii4iPT09aXx8LTE9PT1pfHxpPT09ZS5uYW1lfHxpPT09ZS51dWlkKXJldHVybiBlO2lmKGUuc2tlbGV0b24pe2xldCByPWUuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShpKTtpZih2b2lkIDAhPT1yKXJldHVybiByfWlmKGUuY2hpbGRyZW4pe2xldCByPWZ1bmN0aW9uKHMpe2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgbD1zW2FdO2lmKGwubmFtZT09PWl8fGwudXVpZD09PWkpcmV0dXJuIGw7bGV0IGM9cihsLmNoaWxkcmVuKTtpZihjKXJldHVybiBjfXJldHVybiBudWxsfSxvPXIoZS5jaGlsZHJlbik7aWYobylyZXR1cm4gb31yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QoZSxpKXtlW2ldPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pZVtpKytdPXJbb119X2dldFZhbHVlX2FycmF5RWxlbWVudChlLGkpe2VbaV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheShlLGkpfV9zZXRWYWx1ZV9kaXJlY3QoZSxpKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtpXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pcltvXT1lW2krK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudChlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoZSxpKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZChlLGkpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUoZSxpKX1fc2V0VmFsdWVfdW5ib3VuZChlLGkpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUoZSxpKX1iaW5kKCl7bGV0IGU9dGhpcy5ub2RlLGk9dGhpcy5wYXJzZWRQYXRoLHI9aS5vYmplY3ROYW1lLG89aS5wcm9wZXJ0eU5hbWUscz1pLnByb3BlcnR5SW5kZXg7aWYoZXx8KGU9bi5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLGkubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT1lKSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIWUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7aWYocil7bGV0IGQ9aS5vYmplY3RJbmRleDtzd2l0Y2gocil7Y2FzZSJtYXRlcmlhbHMiOmlmKCFlLm1hdGVyaWFsKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7aWYoIWUubWF0ZXJpYWwubWF0ZXJpYWxzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtlPWUubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCFlLnNrZWxldG9uKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7ZT1lLnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8ZS5sZW5ndGg7dSsrKWlmKGVbdV0ubmFtZT09PWQpe2Q9dTticmVha31icmVhaztkZWZhdWx0OmlmKHZvaWQgMD09PWVbcl0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO2U9ZVtyXX1pZih2b2lkIDAhPT1kKXtpZih2b2lkIDA9PT1lW2RdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsZSk7ZT1lW2RdfX1sZXQgYT1lW29dO2lmKHZvaWQgMD09PWEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitpLm5vZGVOYW1lKyIuIitvKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLGUpO2xldCBsPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PWUsdm9pZCAwIT09ZS5uZWVkc1VwZGF0ZT9sPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp2b2lkIDAhPT1lLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUmJihsPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgYz10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZih2b2lkIDAhPT1zKXtpZigibW9ycGhUYXJnZXRJbmZsdWVuY2VzIj09PW8pe2lmKCFlLmdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7aWYoIWUuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7aWYoIWUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3ZvaWQgMCE9PWUubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdJiYocz1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSl9Yz10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9c31lbHNlIHZvaWQgMCE9PWEuZnJvbUFycmF5JiZ2b2lkIDAhPT1hLnRvQXJyYXk/KGM9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8oYz10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1vO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2NdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tjXVtsXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX1yZXR1cm4gbi5Db21wb3NpdGU9dFYsbn0pKCk7eHIucHJvdG90eXBlLkJpbmRpbmdUeXBlPXtEaXJlY3Q6MCxFbnRpcmVBcnJheToxLEFycmF5RWxlbWVudDoyLEhhc0Zyb21Ub0FycmF5OjN9LHhyLnByb3RvdHlwZS5WZXJzaW9uaW5nPXtOb25lOjAsTmVlZHNVcGRhdGU6MSxNYXRyaXhXb3JsZE5lZWRzVXBkYXRlOjJ9LHhyLnByb3RvdHlwZS5HZXR0ZXJCeUJpbmRpbmdUeXBlPVt4ci5wcm90b3R5cGUuX2dldFZhbHVlX2RpcmVjdCx4ci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5LHhyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXlFbGVtZW50LHhyLnByb3RvdHlwZS5fZ2V0VmFsdWVfdG9BcnJheV0seHIucHJvdG90eXBlLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nPVtbeHIucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3QseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW3hyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXkseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSx4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFt4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudCx4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSx4ci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbeHIucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXkseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUseHIucHJvdG90eXBlLl9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV1dLGNsYXNzIGV4dGVuZHMgVWR7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQsZSl7bGV0IGk9dC5fbG9jYWxSb290fHx0aGlzLl9yb290LHI9dC5fY2xpcC50cmFja3Msbz1yLmxlbmd0aCxzPXQuX3Byb3BlcnR5QmluZGluZ3MsYT10Ll9pbnRlcnBvbGFudHMsbD1pLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsZD1jW2xdO3ZvaWQgMD09PWQmJihkPXt9LGNbbF09ZCk7Zm9yKGxldCB1PTA7dSE9PW87Kyt1KXtsZXQgcD1yW3VdLGY9cC5uYW1lLG09ZFtmXTtpZih2b2lkIDAhPT1tKSsrbS5yZWZlcmVuY2VDb3VudCxzW3VdPW07ZWxzZXtpZihtPXNbdV0sdm9pZCAwIT09bSl7bnVsbD09PW0uX2NhY2hlSW5kZXgmJigrK20ucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKG0sbCxmKSk7Y29udGludWV9bT1uZXcgZVYoeHIuY3JlYXRlKGksZixlJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW3VdLmJpbmRpbmcucGFyc2VkUGF0aCkscC5WYWx1ZVR5cGVOYW1lLHAuZ2V0VmFsdWVTaXplKCkpLCsrbS5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcobSxsLGYpLHNbdV09bX1hW3VdLnJlc3VsdEJ1ZmZlcj1tLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYobnVsbD09PXQuX2NhY2hlSW5kZXgpe2xldCBpPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQscj10Ll9jbGlwLnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwW3JdO3RoaXMuX2JpbmRBY3Rpb24odCxvJiZvLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxyLGkpfWxldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09by51c2VDb3VudCsrJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IG89ZVtpXTswPT0tLW8udXNlQ291bnQmJihvLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKG8pKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gbnVsbCE9PWUmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLG89dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPW9bZV07aWYodm9pZCAwPT09cylzPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLG9bZV09cztlbHNle2xldCBhPXMua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLHMuYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBvPXQuX2NsaXAudXVpZCxzPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1zW29dLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLGQ9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PWQsbFtkXT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGRlbGV0ZSBhLmFjdGlvbkJ5Um9vdFsodC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkXSwwPT09bC5sZW5ndGgmJmRlbGV0ZSBzW29dLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IG89ZVtpXTswPT0tLW8ucmVmZXJlbmNlQ291bnQmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhvKX19X2xlbmRBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQuX2NhY2hlSW5kZXgscj10aGlzLl9uQWN0aXZlQWN0aW9ucysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxlLGkpe2xldCByPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPXRoaXMuX2JpbmRpbmdzLHM9cltlXTt2b2lkIDA9PT1zJiYocz17fSxyW2VdPXMpLHNbaV09dCx0Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5iaW5kaW5nLHI9aS5yb290Tm9kZS51dWlkLG89aS5wYXRoLHM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGE9c1tyXSxsPWVbZS5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxlW2NdPWwsZS5wb3AoKSxkZWxldGUgYVtvXSwwPT09T2JqZWN0LmtleXMoYSkubGVuZ3RoJiZkZWxldGUgc1tyXX1fbGVuZEJpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxpPXRbZV07cmV0dXJuIHZvaWQgMD09PWkmJihpPW5ldyBWSShuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxpLl9fY2FjaGVJbmRleD1lLHRbZV09aSksaX1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxpPXQuX19jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxvPWVbcl07dC5fX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fX2NhY2hlSW5kZXg9aSxlW2ldPW99Y2xpcEFjdGlvbih0LGUsaSl7bGV0IHI9ZXx8dGhpcy5fcm9vdCxvPXIudXVpZCxzPSJzdHJpbmciPT10eXBlb2YgdD96SS5maW5kQnlOYW1lKHIsdCk6dCxhPW51bGwhPT1zP3MudXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXSxjPW51bGw7aWYodm9pZCAwPT09aSYmKGk9bnVsbCE9PXM/cy5ibGVuZE1vZGU6MjUwMCksdm9pZCAwIT09bCl7bGV0IHU9bC5hY3Rpb25CeVJvb3Rbb107aWYodm9pZCAwIT09dSYmdS5ibGVuZE1vZGU9PT1pKXJldHVybiB1O2M9bC5rbm93bkFjdGlvbnNbMF0sbnVsbD09PXMmJihzPWMuX2NsaXApfWlmKG51bGw9PT1zKXJldHVybiBudWxsO2xldCBkPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsLHI9ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1pLHRoaXMuYmxlbmRNb2RlPXI7bGV0IG89ZS50cmFja3Mscz1vLmxlbmd0aCxhPW5ldyBBcnJheShzKSxsPXtlbmRpbmdTdGFydDpWMCxlbmRpbmdFbmQ6VjB9O2ZvcihsZXQgYz0wO2MhPT1zOysrYyl7bGV0IGQ9b1tjXS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTthW2NdPWQsZC5zZXR0aW5ncz1sfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bCx0aGlzLl9pbnRlcnBvbGFudHM9YSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShzKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9MjIwMSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmMCE9PXRoaXMudGltZVNjYWxlJiZudWxsPT09dGhpcy5fc3RhcnRUaW1lJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LGUpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPWUsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LGUsaSl7aWYodC5mYWRlT3V0KGUpLHRoaXMuZmFkZUluKGUpLGkpe2xldCByPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9ci9vO3Qud2FycCgxLG8vcixlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxzPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbD09PWEmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPW8sbFsxXT1vK2ksY1swXT10L3MsY1sxXT1lL3MsdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkIHRoaXMuX3VwZGF0ZVdlaWdodCh0KTtsZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobnVsbCE9PW8pe2xldCBsPSh0LW8pKmk7aWYobDwwfHwwPT09aSlyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwsZT1pKmx9ZSo9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBzPXRoaXMuX3VwZGF0ZVRpbWUoZSksYT10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYoYT4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO2lmKDI1MDE9PT10aGlzLmJsZW5kTW9kZSlmb3IobGV0IGQ9MCx1PWwubGVuZ3RoO2QhPT11OysrZClsW2RdLmV2YWx1YXRlKHMpLGNbZF0uYWNjdW11bGF0ZUFkZGl0aXZlKGEpO2Vsc2UgZm9yKGxldCBkPTAsdT1sLmxlbmd0aDtkIT09dTsrK2QpbFtkXS5ldmFsdWF0ZShzKSxjW2RdLmFjY3VtdWxhdGUocixhKX19X3VwZGF0ZVdlaWdodCh0KXtsZXQgZT0wO2lmKHRoaXMuZW5hYmxlZCl7ZT10aGlzLndlaWdodDtsZXQgaT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtpZihudWxsIT09aSl7bGV0IHI9aS5ldmFsdWF0ZSh0KVswXTtlKj1yLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BGYWRpbmcoKSwwPT09ciYmKHRoaXMuZW5hYmxlZD0hMSkpfX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PWUsZX1fdXBkYXRlVGltZVNjYWxlKHQpe2xldCBlPTA7aWYoIXRoaXMucGF1c2VkKXtlPXRoaXMudGltZVNjYWxlO2xldCBpPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGwhPT1pJiYoZSo9aS5ldmFsdWF0ZSh0KVswXSx0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wV2FycGluZygpLDA9PT1lP3RoaXMucGF1c2VkPSEwOnRoaXMudGltZVNjYWxlPWUpKX1yZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPWUsZX1fdXBkYXRlVGltZSh0KXtsZXQgZT10aGlzLl9jbGlwLmR1cmF0aW9uLGk9dGhpcy5sb29wLHI9dGhpcy50aW1lK3Qsbz10aGlzLl9sb29wQ291bnQscz0yMjAyPT09aTtpZigwPT09dClyZXR1cm4tMT09PW8/cjpzJiYxPT0oMSZvKT9lLXI6cjtpZigyMjAwPT09aSl7LTE9PT1vJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO2U6e2lmKHI+PWUpcj1lO2Vsc2V7aWYoIShyPDApKXt0aGlzLnRpbWU9cjticmVhayBlfXI9MH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYoLTE9PT1vJiYodD49MD8obz0wLHRoaXMuX3NldEVuZGluZ3MoITAsMD09PXRoaXMucmVwZXRpdGlvbnMscykpOnRoaXMuX3NldEVuZGluZ3MoMD09PXRoaXMucmVwZXRpdGlvbnMsITAscykpLHI+PWV8fHI8MCl7bGV0IGE9TWF0aC5mbG9vcihyL2UpO3ItPWUqYSxvKz1NYXRoLmFicyhhKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLW87aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxyPXQ+MD9lOjAsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYoMT09PWwpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMscyl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLHMpO3RoaXMuX2xvb3BDb3VudD1vLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTphfSl9fWVsc2UgdGhpcy50aW1lPXI7aWYocyYmMT09KDEmbykpcmV0dXJuIGUtcn1yZXR1cm4gcn1fc2V0RW5kaW5ncyh0LGUsaSl7bGV0IHI9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztpPyhyLmVuZGluZ1N0YXJ0PUgwLHIuZW5kaW5nRW5kPUgwKTooci5lbmRpbmdTdGFydD10P3RoaXMuemVyb1Nsb3BlQXRTdGFydD9IMDpWMDoyNDAyLHIuZW5kaW5nRW5kPWU/dGhpcy56ZXJvU2xvcGVBdEVuZD9IMDpWMDoyNDAyKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLG89ci50aW1lLHM9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bnVsbD09PXMmJihzPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1zKTtsZXQgYT1zLnBhcmFtZXRlclBvc2l0aW9ucyxsPXMuc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPW8sbFswXT1lLGFbMV09byt0LGxbMV09aSx0aGlzfX0odGhpcyxzLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24oZCxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbihkLGEsbyksZH1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQsbz0ic3RyaW5nIj09dHlwZW9mIHQ/ekkuZmluZEJ5TmFtZShpLHQpOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW28/by51dWlkOnRdO3JldHVybiB2b2lkIDAhPT1hJiZhLmFjdGlvbkJ5Um9vdFtyXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucztmb3IobGV0IGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMtMTtpPj0wOy0taSl0W2ldLnN0b3AoKTtyZXR1cm4gdGhpc311cGRhdGUodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXRoaXMuX25BY3RpdmVBY3Rpb25zLHI9dGhpcy50aW1lKz10Kj10aGlzLnRpbWVTY2FsZSxvPU1hdGguc2lnbih0KSxzPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09aTsrK2MpZVtjXS5fdXBkYXRlKHIsdCxvLHMpO2xldCBhPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylhW2NdLmFwcGx5KHMpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCBlPTA7ZTx0aGlzLl9hY3Rpb25zLmxlbmd0aDtlKyspdGhpcy5fYWN0aW9uc1tlXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC51dWlkLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXJbaV07aWYodm9pZCAwIT09byl7bGV0IHM9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBhPTAsbD1zLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXNbYV07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgZD1jLl9jYWNoZUluZGV4LHU9ZVtlLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHUuX2NhY2hlSW5kZXg9ZCxlW2RdPXUsZS5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSByW2ldfX11bmNhY2hlUm9vdCh0KXtsZXQgZT10LnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgcyBpbiBpKXtsZXQgbD1pW3NdLmFjdGlvbkJ5Um9vdFtlXTt2b2lkIDAhPT1sJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihsKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihsKSl9bGV0IG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lW2VdO2lmKHZvaWQgMCE9PW8pZm9yKGxldCBzIGluIG8pe2xldCBhPW9bc107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtudWxsIT09aSYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX0ucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIEd4PWNsYXNze2NvbnN0cnVjdG9yKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBHeCh2b2lkIDA9PT10aGlzLnZhbHVlLmNsb25lP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19OyhjbGFzcyBleHRlbmRzIGhte2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHQsZSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9Y2xvbmUodCl7bGV0IGU9c3VwZXIuY2xvbmUodCk7cmV0dXJuIGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI9ITAsZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciB6ZWU9bmV3ICRlLHZtPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRlKDEvMCwxLzApLGU9bmV3ICRlKC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT16ZWUuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5taW4uY29weSh0Lm1pbiksdGhpcy5tYXguY29weSh0Lm1heCksdGhpc31tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5taW4ueD10aGlzLm1pbi55PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl9Z2V0Q2VudGVyKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4LnkpfWNvbnRhaW5zQm94KHQpe3JldHVybiB0aGlzLm1pbi54PD10Lm1pbi54JiZ0Lm1heC54PD10aGlzLm1heC54JiZ0aGlzLm1pbi55PD10Lm1pbi55JiZ0Lm1heC55PD10aGlzLm1heC55fWdldFBhcmFtZXRlcih0LGUpe3JldHVybiBlLnNldCgodC54LXRoaXMubWluLngpLyh0aGlzLm1heC54LXRoaXMubWluLngpLCh0LnktdGhpcy5taW4ueSkvKHRoaXMubWF4LnktdGhpcy5taW4ueSkpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4LnkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHplZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dm0ucHJvdG90eXBlLmlzQm94Mj0hMDt2YXIgdXA9bmV3ICQsZ0k9bmV3IHhuLFEzPW5ldyB4bjtmdW5jdGlvbiBwdGUobil7bGV0IHQ9W107biYmbi5pc0JvbmUmJnQucHVzaChuKTtmb3IobGV0IGU9MDtlPG4uY2hpbGRyZW4ubGVuZ3RoO2UrKyl0LnB1c2guYXBwbHkodCxwdGUobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBIMmU9bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBfVihuLHQsZSl7aWYoMT09PWUpcmV0dXJuIG5ldyBhbih0KTtsZXQgaT1WZih0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBhbihmTChpLG4pKDEtZSkpfW5ldyBJbnQzMkFycmF5KEgyZS5idWZmZXIpLCRzLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoJHMucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmdldFBvaW50PXQsbn0sQngucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKG4pfSxjbGFzcyBleHRlbmRzIGt4e2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBhbihpKSxyPW5ldyBhbihyKTtsZXQgbz1lLzIscz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgcD0wLGY9MCxtPS1hO3A8PWU7cCsrLG0rPXMpe2wucHVzaCgtYSwwLG0sYSwwLG0pLGwucHVzaChtLDAsLWEsbSwwLGEpO2xldCBiPXA9PT1vP2k6cjtiLnRvQXJyYXkoYyxmKSxmKz0zLGIudG9BcnJheShjLGYpLGYrPTMsYi50b0FycmF5KGMsZiksZis9MyxiLnRvQXJyYXkoYyxmKSxmKz0zfWxldCBkPW5ldyBVaTtkLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihsLDMpKSxkLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBOcihjLDMpKSxzdXBlcihkLG5ldyBXZCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9LGNsYXNzIGV4dGVuZHMga3h7Y29uc3RydWN0b3IodCl7bGV0IGU9cHRlKHQpLGk9bmV3IFVpLHI9W10sbz1bXSxzPW5ldyBhbigwLDAsMSksYT1uZXcgYW4oMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgZD1lW2NdO2QucGFyZW50JiZkLnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCksby5wdXNoKHMucixzLmcscy5iKSxvLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBOcihyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBOcihvLDMpKSxzdXBlcihpLG5ldyBXZCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT10aGlzLmJvbmVzLGk9dGhpcy5nZW9tZXRyeSxyPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO1EzLmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxzPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWVbb107YS5wYXJlbnQmJmEucGFyZW50LmlzQm9uZSYmKGdJLm11bHRpcGx5TWF0cmljZXMoUTMsYS5tYXRyaXhXb3JsZCksdXAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGdJKSxyLnNldFhZWihzLHVwLngsdXAueSx1cC56KSxnSS5tdWx0aXBseU1hdHJpY2VzKFEzLGEucGFyZW50Lm1hdHJpeFdvcmxkKSx1cC5zZXRGcm9tTWF0cml4UG9zaXRpb24oZ0kpLHIuc2V0WFlaKHMrMSx1cC54LHVwLnksdXAueikscys9Mil9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9LFFjLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIikscUIuZXh0cmFjdFVybEJhc2Uobil9LFFjLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fSx2bS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0sdm0ucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx2bS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sdm0ucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKG4pfSx4YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0seGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx4YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0seGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9LHhhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sYnAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LFowLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4pfSxiby5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSxiby5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sYm8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sYm8ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sYm8ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJvLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LHhuLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfSx4bi5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSx4bi5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksKG5ldyAkKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9LHhuLnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfSx4bi5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9LHhuLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSx4bi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4bi5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfSx4bi5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9LHhuLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHhuLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4bi5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4bi5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSx4bi5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0seG4ucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixvKX0seG4ucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX0sS2wucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX0sdHMucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX0sdHMucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX0sdnAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sdnAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfSx2cC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxWci5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX0sVnIucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX0sVnIucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9LFZyLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfSxWci5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX0sVnIuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxWci5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX0sVnIubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksVnIuZ2V0Tm9ybWFsKG4sdCxlLGkpfSxxZC5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX0scWQucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IENwKHRoaXMsbil9LHFkLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IF9tKHRoaXMsbil9LCRlLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfSwkZS5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9LCRlLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sJC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX0sJC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX0sJC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX0sJC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX0sJC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfSwkLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX0sJC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sJC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9LCQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfSxaaS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sWmkucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfSxCaS5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfSxCaS5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX0sQmkucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfSxCaS5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9LEJpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJpLnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSksYW8ucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYW8ucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLDB9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KSxQSS5wcm90b3R5cGUuaW5pdEJvbmVzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGVzLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKG4sdCl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHZvaWQgMCE9PXQmJih0aGlzLmZpbG1HYXVnZT10KSx0aGlzLnNldEZvY2FsTGVuZ3RoKG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhbC5wcm90b3R5cGUse29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ufX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PW59fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PW59fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnRvcD1ufX0sc2hhZG93Q2FtZXJhQm90dG9tOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUJvdHRvbSBpcyBub3cgLnNoYWRvdy5jYW1lcmEuYm90dG9tLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5ib3R0b209bn19LHNoYWRvd0NhbWVyYU5lYXI6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTmVhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEubmVhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubmVhcj1ufX0sc2hhZG93Q2FtZXJhRmFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZmFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mYXI9bn19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpLHRoaXMuc2hhZG93LmJpYXM9bn19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIiksdGhpcy5zaGFkb3cubWFwU2l6ZS53aWR0aD1ufX0sc2hhZG93TWFwSGVpZ2h0OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcEhlaWdodCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLmhlaWdodC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLmhlaWdodD1ufX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQci5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4iKSx0aGlzLmFycmF5Lmxlbmd0aH19LGR5bmFtaWM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMudXNhZ2U9PT14SX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKHhJKX19fSksUHIucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoITA9PT1uP3hJOkN4KSx0aGlzfSxQci5wcm90b3R5cGUuY29weUluZGljZXNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxQci5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfSxVaS5wcm90b3R5cGUuYWRkSW5kZXg9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKSx0aGlzLnNldEluZGV4KG4pfSxVaS5wcm90b3R5cGUuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRBdHRyaWJ1dGUoKS4iKSx0JiZ0LmlzQnVmZmVyQXR0cmlidXRlfHx0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ImluZGV4Ij09PW4/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4iKSx0aGlzLnNldEluZGV4KHQpLHRoaXMpOnRoaXMuc2V0QXR0cmlidXRlKG4sdCk6KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLiIpLHRoaXMuc2V0QXR0cmlidXRlKG4sbmV3IFByKGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pKSl9LFVpLnByb3RvdHlwZS5hZGREcmF3Q2FsbD1mdW5jdGlvbihuLHQsZSl7dm9pZCAwIT09ZSYmY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIGluZGV4T2Zmc2V0LiIpLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKSx0aGlzLmFkZEdyb3VwKG4sdCl9LFVpLnByb3RvdHlwZS5jbGVhckRyYXdDYWxscz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9LFVpLnByb3RvdHlwZS5jb21wdXRlT2Zmc2V0cz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFVpLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5yZW1vdmVBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5kZWxldGVBdHRyaWJ1dGUoKS4iKSx0aGlzLmRlbGV0ZUF0dHJpYnV0ZShuKX0sVWkucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVWkucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KSxobS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj94STpDeCksdGhpc30saG0ucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfSxDcC5wcm90b3R5cGUuZ2V0QXJyYXlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sQ3AucHJvdG90eXBlLmFkZFNoYXBlTGlzdD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LENwLnByb3RvdHlwZS5hZGRTaGFwZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSjAucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZTogLmRpc3Bvc2UoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxHeC5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAub25VcGRhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBby5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IGFufX0sc2hhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz0xPT09bn19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9bn19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHZC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPW59fX0pLGppLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihuLHQsZSxpKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQobiksdGhpcy5jbGVhcih0LGUsaSl9LGppLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3Aobil9LGppLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9LGppLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfSxqaS5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259LGppLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX0samkucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX0samkucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX0samkucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfSxqaS5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX0samkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfSxqaS5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfSxqaS5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9LGppLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX0samkucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3Qobil9LGppLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxqaS5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGppLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGppLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0samkucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamkucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPW59fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPW59fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz0hMD09PW4/QXI6X3B9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdGUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEpzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPW59fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9bn19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9bn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9bn19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PW59fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PW59fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PW59fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PW59fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1ufX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1ufX19KSxjbGFzcyBleHRlbmRzIEJpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYoITA9PT10aGlzLmlzUGxheWluZylyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiBBdWRpbyBpcyBhbHJlYWR5IHBsYXlpbmcuIik7aWYoITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3RoaXMuX3N0YXJ0ZWRBdD10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdDtsZXQgZT10aGlzLmNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7cmV0dXJuIGUuYnVmZmVyPXRoaXMuYnVmZmVyLGUubG9vcD10aGlzLmxvb3AsZS5sb29wU3RhcnQ9dGhpcy5sb29wU3RhcnQsZS5sb29wRW5kPXRoaXMubG9vcEVuZCxlLm9uZW5kZWQ9dGhpcy5vbkVuZGVkLmJpbmQodGhpcyksZS5zdGFydCh0aGlzLl9zdGFydGVkQXQsdGhpcy5fcHJvZ3Jlc3MrdGhpcy5vZmZzZXQsdGhpcy5kdXJhdGlvbiksdGhpcy5pc1BsYXlpbmc9ITAsdGhpcy5zb3VyY2U9ZSx0aGlzLnNldERldHVuZSh0aGlzLmRldHVuZSksdGhpcy5zZXRQbGF5YmFja1JhdGUodGhpcy5wbGF5YmFja1JhdGUpLHRoaXMuY29ubmVjdCgpfXBhdXNlKCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsITA9PT10aGlzLmxvb3AmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c3RvcCgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLCEwPT09dGhpcy5fY29ubmVjdGVkPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdm9pZCAwIT09dGhpcy5zb3VyY2UuZGV0dW5lKXJldHVybiEwPT09dGhpcy5pc1BsYXlpbmcmJnRoaXMuc291cmNlLmRldHVuZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5kZXR1bmUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXREZXR1bmUoKXtyZXR1cm4gdGhpcy5kZXR1bmV9Z2V0RmlsdGVyKCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVycygpWzBdfXNldEZpbHRlcih0KXtyZXR1cm4gdGhpcy5zZXRGaWx0ZXJzKHQ/W3RdOltdKX1zZXRQbGF5YmFja1JhdGUodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4hMT09PXRoaXMuaGFzUGxheWJhY2tDb250cm9sPyhjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpLCExKTp0aGlzLmxvb3B9c2V0TG9vcCh0KXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLmxvb3A9dCwhMD09PXRoaXMuaXNQbGF5aW5nJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXM7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKX1zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fS5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybihuZXcgUUIpLmxvYWQobixmdW5jdGlvbihpKXt0LnNldEJ1ZmZlcihpKX0pLHRoaXN9LEV4LnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKG4sdCl9LEV4LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKG4sdCxlLGkpfSxqZC5jcm9zc09yaWdpbj12b2lkIDAsamQubG9hZFRleHR1cmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgVkI7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxqZC5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCByPW5ldyBCQjtyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPXIubG9hZChuLGUsdm9pZCAwLGkpO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99LGpkLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX0samQubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjpkVn19KSksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuX19USFJFRV9fP2NvbnNvbGUud2FybigiV0FSTklORzogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIFRocmVlLmpzIGJlaW5nIGltcG9ydGVkLiIpOndpbmRvdy5fX1RIUkVFX189ZFYpO3ZhciAkbD0oKCk9PihmdW5jdGlvbihuKXtuW24uQ0lSQ0xFPTBdPSJDSVJDTEUiLG5bbi5MSU5FPTFdPSJMSU5FIixuW24uVFJJQU5HTEU9Ml09IlRSSUFOR0xFIixuW24uVFJBUEVaT0lEPTNdPSJUUkFQRVpPSUQifSgkbHx8KCRsPXt9KSksJGwpKSgpO2Z1bmN0aW9uIG10ZShuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09MyplKSYmKGk9bmV3IFByKG5ldyBGbG9hdDMyQXJyYXkoMyplKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgbz0wO288ZTtvKyspclszKm9dPXRbMipvXSxyWzMqbysxXT10WzIqbysxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsMyplKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIGh0ZShuLHQsZSl7bGV0IGk9TWF0aC5tYXgodC5sZW5ndGgvMi0xLDApLHI9MippKjMsbz0zKnIscz1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFzfHxzLmNvdW50IT09cikmJihzPW5ldyBQcihuZXcgRmxvYXQzMkFycmF5KG8pLDMpLG4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIscykpO2xldCBhPXMuYXJyYXk7Zm9yKGxldCBsPTA7bDxpO2wrKyl7bGV0W2MsZCx1LHBdPVt0WzIqbF0sdFsyKmwrMV0sdFsyKmwrMl0sdFsyKmwrM11dLGY9bmV3ICRlKGMsZCksbT1uZXcgJGUodSxwKSxiPW5ldyAkZSh1LWMscC1kKSxNPW5ldyAkZSgtYi55LGIueCkuc2V0TGVuZ3RoKGUvMikseT1mLmNsb25lKCkuYWRkKE0pLHg9Zi5jbG9uZSgpLnN1YihNKSxSPW0uY2xvbmUoKS5hZGQoTSksQT1tLmNsb25lKCkuc3ViKE0pLFY9W3kueCx5LnksMCx4LngseC55LDAsUi54LFIueSwwLFIueCxSLnksMCx4LngseC55LDAsQS54LEEueSwwXTthLnNldChWLGwqVi5sZW5ndGgpfXMubmVlZHNVcGRhdGU9ITAsbi5zZXREcmF3UmFuZ2UoMCxvKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEpJKG4sdCxlLGkpe2xldHt2aXNpYmxlOnIsY29sb3I6byxvcGFjaXR5OnN9PWk7aWYoQXJyYXkuaXNBcnJheSh0Lm1hdGVyaWFsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFyaWFudCBlcnJvcjogb25seSBleHBlY3Qgb25lIG1hdGVyaWFsIG9uIGFuIG9iamVjdCIpO2xldCBhPXQubWF0ZXJpYWw7aWYoYS52aXNpYmxlIT09ciYmKGEudmlzaWJsZT1yLGEubmVlZHNVcGRhdGU9ITApLCFyKXJldHVybiExO2xldCBsPV9WKG4sbyxzPz8xKSxjPWUodC5nZW9tZXRyeSk7cmV0dXJuIHQuZ2VvbWV0cnkhPT1jJiYodC5nZW9tZXRyeT1jKSxhLmNvbG9yLmVxdWFscyhsKXx8KGEuY29sb3Iuc2V0KGwpLGEubmVlZHNVcGRhdGU9ITApLCEwfXZhciBlQT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnJhd1Nlcmllc0RhdGE9W10sdGhpcy5zZXJpZXM9W10sdGhpcy5wYWludERpcnR5PSEwLHRoaXMucmVuZGVyQ2FjaGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wcmV2RnJhbWVDYWNoZT1uZXcgTWFwLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcH1nZXRGcm9tUHJldmlvdXNGcmFtZSh0KXtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk/P251bGx9c2V0VG9DdXJyZW50RnJhbWUodCxlKXt0aGlzLmN1cnJGcmFtZUNhY2hlLnNldCh0LGUpfWZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCl7bGV0IHQ9W107Zm9yKGxldFtlLGldb2YgdGhpcy5wcmV2RnJhbWVDYWNoZS5lbnRyaWVzKCkpdGhpcy5jdXJyRnJhbWVDYWNoZS5oYXMoZSl8fHQucHVzaChpKTtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZT10aGlzLmN1cnJGcmFtZUNhY2hlLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcCx0fX0sdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5yZW5kZXJDYWNoZT10LHRoaXMucmVuZGVyZXI9ZX1zZXRMaW5lKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyaWFuZ2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRDaXJjbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmFwZXpvaWQodCxlLGkscil7bGV0IG89dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSxyKTtvJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQsbyl9fSh0aGlzLnJlbmRlckNhY2hlLHRoaXMucmVuZGVyZXIpfXNldExheW91dFJlY3QodCl7KHRoaXMubGF5b3V0LnghPT10Lnh8fHRoaXMubGF5b3V0LndpZHRoIT09dC53aWR0aHx8dGhpcy5sYXlvdXQueSE9PXQueXx8dGhpcy5sYXlvdXQuaGVpZ2h0IT09dC5oZWlnaHQpJiYodGhpcy5wYWludERpcnR5PSEwKSx0aGlzLmxheW91dD10fWdldExheW91dFJlY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXR9Z2V0TWV0YWRhdGFNYXAoKXtyZXR1cm4gdGhpcy5nZXRNZXRhZGF0YU1hcEltcGwoKX1tYXJrQXNQYWludERpcnR5KCl7dGhpcy5wYWludERpcnR5PSEwfXJlbmRlcigpe2lmKHRoaXMudHJhbnNmb3JtQ29vcmRpbmF0ZXNJZlN0YWxlKCksdGhpcy5wYWludERpcnR5KXt0aGlzLnJlZHJhdygpO2ZvcihsZXQgdCBvZiB0aGlzLnJlbmRlckNhY2hlLmZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCkpdGhpcy5yZW5kZXJlci5kZXN0cm95T2JqZWN0KHQpO3RoaXMucGFpbnREaXJ0eT0hMX19aXNDb29yZGluYXRlVXBkYXRlZCgpe3JldHVybiB0aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSE9PXRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXJ9Y2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpe3RoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbH1zZXREYXRhKHQpe3RoaXMuY2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpLHRoaXMucmF3U2VyaWVzRGF0YT10fXRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpe2lmKCF0aGlzLmlzQ29vcmRpbmF0ZVVwZGF0ZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRMYXlvdXRSZWN0KCk7dGhpcy5zZXJpZXM9bmV3IEFycmF5KHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aDtlKyspe2xldCBpPXRoaXMucmF3U2VyaWVzRGF0YVtlXTt0aGlzLnNlcmllc1tlXT17aWQ6aS5pZCxwb2x5bGluZTpuZXcgRmxvYXQzMkFycmF5KDIqaS5wb2ludHMubGVuZ3RoKX07Zm9yKGxldCByPTA7cjxpLnBvaW50cy5sZW5ndGg7cisrKXtsZXRbbyxzXT10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxbaS5wb2ludHNbcl0ueCxpLnBvaW50c1tyXS55XSk7dGhpcy5zZXJpZXNbZV0ucG9seWxpbmVbMipyXT1vLHRoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcisxXT1zfX10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPXRoaXMuY29vcmRpbmF0b3IuZ2V0VXBkYXRlSWRlbnRpZmllcigpLHRoaXMubWFya0FzUGFpbnREaXJ0eSgpfX0sYV89KCgpPT4oZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifShhX3x8KGFfPXt9KSksYV8pKSgpLHRBPWNsYXNzIGV4dGVuZHMgZUF7cmVjb3JkUGFydGl0aW9uKHQsZSxpKXtyZXR1cm4gdD97dHlwZTphXy5OVU1CRVIscG9seWxpbmU6ZX06e3R5cGU6YV8uTkFOLHBvbHlsaW5lOmUubWFwKChyLG8pPT5pc05hTihyKT9vJTI9PTA/aS54OmkueTpyKX19cGFydGl0aW9uUG9seWxpbmUodCl7bGV0IGU9W10saT0wLHI9ITEsbz10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodGhpcy5nZXRMYXlvdXRSZWN0KCksWzAsMF0pLHM9e3g6b1swXSx5Om9bMV19LGE9bnVsbDtmb3IobGV0IGw9MDtsPHQubGVuZ3RoO2wrPTIpe2xldCBjPXRbbF0sZD10W2wrMV0sdT1pc05hTihjKXx8aXNOYU4oZCk7dSE9PXImJmkhPT1sJiYoZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSxsKSxudWxsPT09YT97eDpjLHk6ZH06YSkpLGk9bCksdXx8KGE9e3g6Yyx5OmR9KSxyPXV9cmV0dXJuIGkhPT10Lmxlbmd0aC0xJiZlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLHQubGVuZ3RoKSxhPz9zKSksZX1yZWRyYXcoKXtmb3IobGV0IHQgb2YgdGhpcy5zZXJpZXMpe2xldCBpPXRoaXMuZ2V0TWV0YWRhdGFNYXAoKVt0LmlkXTtpZighaSljb250aW51ZTtpZih0LnBvbHlsaW5lLmxlbmd0aCUyIT0wKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGhhdmUgb2RkIGxlbmd0aC1lZCBwb2x5bGluZTogJHt0LnBvbHlsaW5lLmxlbmd0aH1gKTtsZXQgcj10aGlzLnBhcnRpdGlvblBvbHlsaW5lKHQucG9seWxpbmUpO2ZvcihsZXRbbyx7dHlwZTpzLHBvbHlsaW5lOmF9XW9mIHIuZW50cmllcygpKWlmKHM9PT1hXy5OVU1CRVIpMj09PWEubGVuZ3RoP3RoaXMucGFpbnRCcnVzaC5zZXRDaXJjbGUoSlNPTi5zdHJpbmdpZnkoWyJjaXJjbGUiLHQuaWQsb10pLHt4OmFbMF0seTphWzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxyYWRpdXM6NH0pOnRoaXMucGFpbnRCcnVzaC5zZXRMaW5lKEpTT04uc3RyaW5naWZ5KFsibGluZSIsdC5pZCxvXSksYSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSx3aWR0aDoyfSk7ZWxzZSBpZighaS5hdXgpZm9yKGxldCBsPTA7bDxhLmxlbmd0aDtsKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsdC5pZCxhW2xdLGFbbCsxXV0pLHt4OmFbbF0seTphW2wrMV19LHtjb2xvcjppLmNvbG9yLHZpc2libGU6aS52aXNpYmxlLG9wYWNpdHk6aS5vcGFjaXR5Pz8xLHNpemU6MTJ9KX19fSxuQT1jbGFzcyBleHRlbmRzIGIwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgbW0oMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19LGlBPWNsYXNze2NvbnN0cnVjdG9yKHQpe3N3aXRjaCh0aGlzLm1ldGFkYXRhTWFwPXt9LHRoaXMuc2hvdWxkUmVwYWludD0hMSx0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUpe2Nhc2UgUWkuU1ZHOnRoaXMuY29vcmRpbmF0b3I9bmV3IGIwLHRoaXMucmVuZGVyZXI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFsyKmldfSwke3RbMippKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj1MRCh0Py5kb20sKCk9PntsZXQgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO28uc3R5bGUuZmlsbD0ibm9uZSI7bGV0IHM9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoImQiLHMpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKG8pLG99LG89PntpZighdD8uZGF0YXx8IVlsX2FyZVBvbHlsaW5lc0VxdWFsKGUsdD8uZGF0YSkpe2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7by5zZXRBdHRyaWJ1dGUoImQiLHMpfXJldHVybiBvfSxpKTtyZXR1cm4gbnVsbD09PXI/bnVsbDooci5zdHlsZS5zdHJva2VXaWR0aD1TdHJpbmcoaS53aWR0aCkse2RvbTpyLGRhdGE6ZX0pfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnIsY29sb3I6b309aSxzPXIqTWF0aC5zcXJ0KDMpLzIsYT1uZXcgRmxvYXQzMkFycmF5KFtlLngtci8yLGUueStzLzMsZS54K3IvMixlLnkrcy8zLGUueCxlLnktMipzLzNdKSxsPUxEKHQ/LmRvbSwoKT0+e2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7Yy5jbGFzc0xpc3QuYWRkKCJ0cmlhbmdsZSIpLGMuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChjKSxjfSxjPT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSxjfSxpKTtyZXR1cm4gbnVsbD09PWw/bnVsbDoobC5zdHlsZS5maWxsPW8se2RvbTpsLGRhdGE6YX0pfWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7Y29sb3I6cixyYWRpdXM6b309aSxzPUxEKHQ/LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhvKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLGEpLGkpO3JldHVybiBudWxsPT09cz9udWxsOntkb206cyxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm8sY29sb3I6c309cixhPTIvTWF0aC5zcXJ0KDMpKm8sbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStvLzIsZS54LGUueS1vLzIsaS54LGkueS1vLzIsaS54K2EvMixpLnkrby8yXSksYz1MRCh0Py5kb20sKCk9PntsZXQgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2QuY2xhc3NMaXN0LmFkZCgidHJhcGV6b2lkIiksZC5zdHlsZS5maWxsPSJub25lIjtsZXQgdT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGwpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiZCIsdSsiWiIpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGQpLGR9LGQ9PntsZXQgdT10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGwpO3JldHVybiBkLnNldEF0dHJpYnV0ZSgiZCIsdSsiWiIpLGR9LHIpO3JldHVybiBudWxsPT09Yz9udWxsOihjLnN0eWxlLmZpbGw9cyx7ZG9tOmMsZGF0YTpsfSl9ZGlzcG9zZSgpe319KHQuY29udGFpbmVyKTticmVhaztjYXNlIFFpLldFQkdMOntsZXQgZT1uZXcgbkE7dGhpcy5jb29yZGluYXRvcj1lLHRoaXMucmVuZGVyZXI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnNjZW5lPW5ldyBKMCx0aGlzLmJhY2tncm91bmRDb2xvcj0iI2ZmZiIsWWxfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKSYmdCBpbnN0YW5jZW9mIE9mZnNjcmVlbkNhbnZhcyYmKHQuc3R5bGU9dC5zdHlsZXx8e30pLHImJnQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsciksdGhpcy5yZW5kZXJlcj1uZXcgamkoe2NhbnZhczp0LGFudGlhbGlhczohMCxhbHBoYTohMH0pLHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyhpKX1vblJlc2l6ZSh0KXt0aGlzLnJlbmRlcmVyLnNldFNpemUodC53aWR0aCx0LmhlaWdodCl9ZGVzdHJveU9iamVjdCh0KXtsZXQgZT10Lm9iajNkO2lmKHRoaXMuc2NlbmUucmVtb3ZlKGUpLGUgaW5zdGFuY2VvZiBhbyl7ZS5nZW9tZXRyeS5kaXNwb3NlKCk7bGV0IGk9QXJyYXkuaXNBcnJheShlLm1hdGVyaWFsKT9lLm1hdGVyaWFsOltlLm1hdGVyaWFsXTtmb3IobGV0IHIgb2YgaSlyLmRpc3Bvc2UoKX19c2V0VXNlRGFya01vZGUodCl7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9dD8iIzMwMzAzMCI6IiNmZmYifWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7aWYoIXQmJiFpLnZpc2libGUpcmV0dXJuIG51bGw7bGV0e3Zpc2libGU6cix3aWR0aDpvfT1pO2lmKCF0KXtsZXQgZD1fVih0aGlzLmJhY2tncm91bmRDb2xvcixpLmNvbG9yLGkub3BhY2l0eT8/MSksdT1uZXcgVWkscD1uZXcgV2Qoe2NvbG9yOmR9KSxmPW5ldyBhbyh1LHApO3JldHVybiBwLnZpc2libGU9cixodGUodSxlLG8pLHRoaXMuc2NlbmUuYWRkKGYpLHt0eXBlOiRsLkxJTkUsZGF0YTplLG9iajNkOmYsd2lkdGg6b319bGV0e2RhdGE6cyxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIEpJKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsZD0+KChvIT09bHx8IXN8fCFZbF9hcmVQb2x5bGluZXNFcXVhbChzLGUpKSYmaHRlKGQsZSxvKSxkKSxpKT97dHlwZTokbC5MSU5FLGRhdGE6ZSxvYmozZDphLHdpZHRoOm99OnR9Y3JlYXRlTWVzaCh0LGUpe2lmKCFlLnZpc2libGUpcmV0dXJuIG51bGw7bGV0e3Zpc2libGU6aSxjb2xvcjpyLG9wYWNpdHk6b309ZSxzPV9WKHRoaXMuYmFja2dyb3VuZENvbG9yLHIsbz8/MSksYT1uZXcgcG0oe2NvbG9yOnMsdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBhbyh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWksbz1yKk1hdGguc3FydCgzKS8yLHM9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktby8zLGUueCtyLzIsZS55LW8vMyxlLngsZS55KzIqby8zXSk7aWYoIXQpe2xldCBsPW5ldyBVaTttdGUobCxzKTtsZXQgYz10aGlzLmNyZWF0ZU1lc2gobCxpKTtyZXR1cm4gbnVsbD09PWM/bnVsbDoodGhpcy5zY2VuZS5hZGQoYykse3R5cGU6JGwuVFJJQU5HTEUsZGF0YTplLG9iajNkOmN9KX1yZXR1cm4gSkkodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCxsPT4obXRlKGwscyksbCksaSk/e3R5cGU6JGwuVFJJQU5HTEUsZGF0YTplLG9iajNkOnQub2JqM2R9OnR9Y3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodCxlLGkpe2xldHtyYWRpdXM6cn09aSxvPW5ldyAkMChpLnJhZGl1cyk7aWYoIXQpe2xldCBhPXRoaXMuY3JlYXRlTWVzaChvLGkpO3JldHVybiBudWxsPT09YT9udWxsOihhLnBvc2l0aW9uLnNldChlLngsZS55LDApLHRoaXMuc2NlbmUuYWRkKGEpLHt0eXBlOiRsLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6YX0pfXJldHVybiBKSSh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgpPT5vLGkpPyh0Lm9iajNkLnBvc2l0aW9uLnNldChlLngsZS55LDApLHt0eXBlOiRsLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6dC5vYmozZH0pOnR9Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLGkscil7aWYoZS55IT09aS55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtsZXR7YWx0aXR1ZGU6b309cixzPTIvTWF0aC5zcXJ0KDMpKm8sYT1uZXcgcWQoW25ldyAkZShlLngtcy8yLGUueS1vLzIpLG5ldyAkZShlLngsZS55K28vMiksbmV3ICRlKGkueCxpLnkrby8yKSxuZXcgJGUoaS54K3MvMixpLnktby8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBfbShhKTtpZighdCl7bGV0IGQ9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIG51bGw9PT1kP251bGw6KHRoaXMuc2NlbmUuYWRkKGQpLHt0eXBlOiRsLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOmR9KX1yZXR1cm4gSkkodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTokbC5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fSh0LmNvbnRhaW5lcixlLHQuZGV2aWNlUGl4ZWxSYXRpbyx0LmNhbGxiYWNrcy5vbkNvbnRleHRMb3N0KTticmVha319dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0LnVzZURhcmtNb2RlKSx0aGlzLnNlcmllc0xpbmVWaWV3PW5ldyB0QSh7cmVuZGVyZXI6dGhpcy5yZW5kZXJlcixjb29yZGluYXRvcjp0aGlzLmNvb3JkaW5hdG9yLGdldE1ldGFkYXRhTWFwOigpPT50aGlzLm1ldGFkYXRhTWFwfSksdGhpcy5yZXNpemUodC5kb21EaW1lbnNpb24pfWRpc3Bvc2UoKXt9c2V0WFNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFhTY2FsZShxbCh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0WVNjYWxlKHFsKHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXJlc2l6ZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldERvbUNvbnRhaW5lclJlY3Qoe3g6MCx5OjAsLi4udH0pLHRoaXMucmVuZGVyZXIub25SZXNpemUoe3g6MCx5OjAsLi4udH0pLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh7Li4udCx4OjAseTowfSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRNZXRhZGF0YSh0KXtsZXQgZT0hMTtPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbaSxyXSk9PntsZXQgbz10aGlzLm1ldGFkYXRhTWFwW2ldOyghb3x8ci5jb2xvciE9PW8uY29sb3J8fHIudmlzaWJsZSE9PW8udmlzaWJsZXx8ci5vcGFjaXR5IT09by5vcGFjaXR5KSYmKGU9ITApLHRoaXMubWV0YWRhdGFNYXBbaV09cn0pLGUmJnRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0Vmlld0JveCh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFZpZXdCb3hSZWN0KHt4OnQueFswXSx3aWR0aDp0LnhbMV0tdC54WzBdLHk6dC55WzBdLGhlaWdodDp0LnlbMV0tdC55WzBdfSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXREYXRhKHQpe3RoaXMuc2VyaWVzTGluZVZpZXcuc2V0RGF0YSh0KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFVzZURhcmtNb2RlKHQpe3RoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodCksdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zY2hlZHVsZVJlcGFpbnQoKXt0aGlzLnNob3VsZFJlcGFpbnR8fCh0aGlzLnNob3VsZFJlcGFpbnQ9ITAsKG49PntzZWxmLnJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0pKCgpPT57dGhpcy5yZXBhaW50KCksdGhpcy5zaG91bGRSZXBhaW50PSExfSkpfXJlcGFpbnQoKXt0aGlzLnNlcmllc0xpbmVWaWV3LnJlbmRlcigpLHRoaXMucmVuZGVyZXIuZmx1c2goKSx0aGlzLmNhbGxiYWNrcy5vbkRyYXdFbmQoKX19LENhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TRVJJRVNfREFUQV9VUERBVEVEPTBdPSJTRVJJRVNfREFUQV9VUERBVEVEIixuW24uU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQ9MV09IlNFUklFU19NRVRBREFUQV9DSEFOR0VEIixuW24uU0NBTEVfVVBEQVRFRD0yXT0iU0NBTEVfVVBEQVRFRCIsbltuLlZJRVdfQk9YX1VQREFURUQ9M109IlZJRVdfQk9YX1VQREFURUQiLG5bbi5JTklUPTRdPSJJTklUIixuW24uRE9NX1JFU0laRUQ9NV09IkRPTV9SRVNJWkVEIixuW24uREFSS19NT0RFX1VQREFURUQ9Nl09IkRBUktfTU9ERV9VUERBVEVEIixuW24uRElTUE9TRUQ9N109IkRJU1BPU0VEIn0oQ2F8fChDYT17fSkpLENhKSkoKSxsXz0oKCk9PihmdW5jdGlvbihuKXtuW24uT05fUkVEUkFXX0VORD0wXT0iT05fUkVEUkFXX0VORCIsbltuLk9OX0NPTlRFWFRfTE9TVD0xXT0iT05fQ09OVEVYVF9MT1NUIn0obF98fChsXz17fSkpLGxfKSkoKTtmdW5jdGlvbiBfdGUobil7aWYobi5pbmNsdWRlcygiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCJXb3JrZXIgZmFjdG9yeSBvbmx5IGFsbG93cyBmaWxlIG5hbWUgYW5kIG5vIHJlc291cmNlIHBhdGguIik7cmV0dXJuIG5ldyBXb3JrZXIobil9dmFyIHltPWNsYXNze2NvbnN0cnVjdG9yKHQpe2lmKHRoaXMuY2FsbGJhY2tzPXQuY2FsbGJhY2tzLHQudHlwZSE9PVFpLldFQkdMKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgdXNlIG5vbiBXRUJHTCByZW5kZXJlciBmb3IgdGhlIG9mZnNjcmVlbiBsaW5lIGNoYXJ0LiBSZWNlaXZlZCAke1FpW3QudHlwZV19IGApO2xldCBlPW5ldyBNZXNzYWdlQ2hhbm5lbDtlLnBvcnQxLm9ubWVzc2FnZT1vPT57dGhpcy5vbk1lc3NhZ2VGcm9tV29ya2VyKG8uZGF0YSl9LHRoaXMudHhNZXNzYWdlUG9ydD1lLnBvcnQxO2xldCBpPXQuY29udGFpbmVyLnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKCk7dGhpcy53b3JrZXJJbnN0YW5jZT15bS53b3JrZXJQb29sLmdldE5leHQoKTtsZXQgcj17dHlwZTpDYS5JTklULGNhbnZhczppLGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sZGltOnQuZG9tRGltZW5zaW9uLHJlbmRlcmVyVHlwZTp0LnR5cGUsdXNlRGFya01vZGU6dC51c2VEYXJrTW9kZX07dGhpcy53b3JrZXJJbnN0YW5jZS5wb3N0TWVzc2FnZShyLFtpLGUucG9ydDJdKX1kaXNwb3NlKCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5ESVNQT1NFRH0pLHRoaXMud29ya2VySW5zdGFuY2UuZnJlZSgpLHRoaXMudHhNZXNzYWdlUG9ydC5jbG9zZSgpfXNldFhTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5TQ0FMRV9VUERBVEVELGF4aXM6IngiLHNjYWxlVHlwZTp0fSl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkNhLlNDQUxFX1VQREFURUQsYXhpczoieSIsc2NhbGVUeXBlOnR9KX1yZXNpemUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5ET01fUkVTSVpFRCxkaW06dH0pfXNldE1ldGFkYXRhKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6Q2EuU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQsbWV0YWRhdGE6dH0pfXNldFZpZXdCb3godCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5WSUVXX0JPWF9VUERBVEVELGV4dGVudDp0fSl9c2V0RGF0YSh0KXtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uLnJlZHVjZSgobyxzKT0+bytzLnBvaW50cy5sZW5ndGgsMCksZT0wLGk9bmV3IEZsb2F0NjRBcnJheSgyKnQpLHI9W107Zm9yKGxldCBvIG9mIG4pe3IucHVzaCh7aWQ6by5pZCxsZW5ndGg6by5wb2ludHMubGVuZ3RofSk7Zm9yKGxldCBzPTA7czxvLnBvaW50cy5sZW5ndGg7cysrKWlbZSsrXT1vLnBvaW50c1tzXS54LGlbZSsrXT1vLnBvaW50c1tzXS55fXJldHVybntpZHNBbmRMZW5ndGhzOnIsZmxhdHRlbmVkU2VyaWVzOmkuYnVmZmVyfX0odCk7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpDYS5TRVJJRVNfREFUQV9VUERBVEVELGNvbXBhY3REYXRhU2VyaWVzOmV9LFtlLmZsYXR0ZW5lZFNlcmllc10pfXNldFVzZURhcmtNb2RlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6Q2EuREFSS19NT0RFX1VQREFURUQsdXNlRGFya01vZGU6dH0pfXNlbmRNZXNzYWdlKHQsZSl7ZT90aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCxlKTp0aGlzLnR4TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UodCl9b25NZXNzYWdlRnJvbVdvcmtlcih0KXtzd2l0Y2godC50eXBlKXtjYXNlIGxfLk9OX1JFRFJBV19FTkQ6dGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCk7YnJlYWs7Y2FzZSBsXy5PTl9DT05URVhUX0xPU1Q6dGhpcy5jYWxsYmFja3Mub25Db250ZXh0TG9zdCgpfX19O2Z1bmN0aW9uIFpjKG4sdCl7cmV0dXJuIngiPT09dD9bMCxuLndpZHRoXTpbbi5oZWlnaHQsMF19ZnVuY3Rpb24gWHgobix0KXtsZXQgZT1NYXRoLmZsb29yKG4vNTApO3JldHVybiBNYXRoLm1pbihlLHQpfWZ1bmN0aW9uIG9BKG4sdCxlLGkpe3JldHVybnttYWpvcjpbXSxtaW5vcjpuLnRpY2tzKGksZSkubWFwKG89Pih7dmFsdWU6byx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhvKX0pKX19eW0ud29ya2VyUG9vbD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlPTEwLGk9X3RlKXt0aGlzLndvcmtlclJlc291cmNlUGF0aD10LHRoaXMubWF4UG9vbFNpemU9ZSx0aGlzLndvcmtlckZhY3Rvcnk9aSx0aGlzLndvcmtlcnM9W119Z2V0TmV4dCgpe2xldCB0O2lmKHRoaXMud29ya2Vycy5ldmVyeSgoe2FjdGl2ZUNvdW50Oml9KT0+aT4wKSYmdGhpcy53b3JrZXJzLmxlbmd0aDx0aGlzLm1heFBvb2xTaXplKXtsZXQgaT10aGlzLndvcmtlckZhY3RvcnkodGhpcy53b3JrZXJSZXNvdXJjZVBhdGgpO3Q9e2FjdGl2ZUNvdW50OjAscG9zdE1lc3NhZ2U6KHIsbyk9PntpLnBvc3RNZXNzYWdlKHIsbyl9LGZyZWU6KCk9Pnt0LmFjdGl2ZUNvdW50PU1hdGgubWF4KHQuYWN0aXZlQ291bnQtMSwwKX19LHRoaXMud29ya2Vycy5wdXNoKHQpfWVsc2V7bGV0IGk9dGhpcy53b3JrZXJzLm1hcCgoe2FjdGl2ZUNvdW50Om99KT0+bykscj1pLmluZGV4T2YoTWF0aC5taW4oLi4uaSkpO3Q9dGhpcy53b3JrZXJzW3JdfXJldHVybiB0LmFjdGl2ZUNvdW50KyssdH19KCJjaGFydF93b3JrZXIuanM/X2ZpbGVfaGFzaD0yYzFlNzFjNSIpO3ZhciB2Vj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO2Z1bmN0aW9uIHh0ZShuKXtmb3IobGV0IHQgb2YgbilpZihTdHJpbmcodCkuaW5jbHVkZXMoImUiKSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgUXg9e2dldFN0YW5kYXJkVGlja3M6b0EsZ2V0VGlja3NGb3JUZW1wb3JhbFNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWkscz1uLnRpY2tzKGksMik7aWYoby1yPj04NjRlNXx8cy5sZW5ndGg+MilyZXR1cm4gb0Eobix0LGUsaSk7bGV0IGE9bi50aWNrcyhpLGUpO3JldHVybnttYWpvcjpzLm1hcChsPT4oe3N0YXJ0OmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFNob3J0KGwpfSkpLG1pbm9yOmEubWFwKGw9Pih7dmFsdWU6bCx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhsKX0pKX19LGdldFRpY2tzRm9yTGluZWFyU2NhbGU6ZnVuY3Rpb24obix0LGUsaSl7bGV0W3Isb109aSxzPU1hdGguYWJzKG8tcik7aWYocz4uMDAxKXJldHVybiBvQShuLHQsZSxpKTtsZXQgYT1uLnRpY2tzKFtyLG9dLGUpLGw9bi50aWNrcyhbcixvXSwyKTtpZih4dGUoYSl8fHh0ZShsKSlyZXR1cm4gb0Eobix0LGUsaSk7bGV0IGM9W10sZD1mdW5jdGlvbihuKXtsZXQgdD1uLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZS0iLDIpO3JldHVybiAyPT09dC5sZW5ndGg/TnVtYmVyKHRbMV0pLTE6MH0ocyk7czwxJiZsLmV2ZXJ5KGY9PntsZXQgbT1NYXRoLmFicyhmKTtyZXR1cm4gbT49MCYmbTwxfSkmJihkKz0xKTtsZXQgdT1uZXcgTWFwO2ZvcihsZXQgZiBvZiBsKXtsZXRbbSxiPSIiXT1TdHJpbmcoZikuc3BsaXQoIi4iLDIpLE09TnVtYmVyKG0rIi4iK2Iuc2xpY2UoMCxkKSk7dS5zZXQoTSx7c3RhcnQ6TSx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT1NPyJcdTIwMTQiOnQuZm9ybWF0UmVhZGFibGUoTSl9KX1sZXQgcD0xMCpNYXRoLnBvdygxMCwtZCk7Zm9yKGxldCBmIG9mIGEpZm9yKGxldCBtIG9mWy4uLnUua2V5cygpXS5yZXZlcnNlKCkpe2xldCBiPWYtbTtpZihiPj0wJiZiPHApe2lmKDA9PT1tKWMucHVzaCh7dmFsdWU6Zix0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhmKX0pO2Vsc2V7bGV0IE09U3RyaW5nKGYpLnNsaWNlKFN0cmluZyhtKS5sZW5ndGgpO2MucHVzaCh7dmFsdWU6Zix0aWNrRm9ybWF0dGVkU3RyaW5nOmBcdTIwMjYke018fCIwIn1gfSl9YnJlYWt9fXJldHVybnttYWpvcjpBcnJheS5mcm9tKHUudmFsdWVzKCkpLG1pbm9yOmN9fSxmaWx0ZXJUaWNrc0J5VmlzaWJpbGl0eTpmdW5jdGlvbihuLHQsZSxpLHI9NSl7aWYoIW4ubGVuZ3RofHwhdlYpcmV0dXJuIG47bGV0IG89IngiPT09ZT8xOi0xLHM9bnVsbDtyZXR1cm4gbi5maWx0ZXIoYT0+e2xldCBsPXQoYSk7dlYuZm9udD1pO2xldCBjPXZWLm1lYXN1cmVUZXh0KGEudGlja0Zvcm1hdHRlZFN0cmluZyksZD0ieCI9PT1lP2Mud2lkdGg6Yy5hY3R1YWxCb3VuZGluZ0JveEFzY2VudC1jLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudDtyZXR1cm4gbnVsbD09PXM/IShsK28qZDwwfHwocz1sK28qZCwwKSk6IShvKihzK28qci1sKT4wfHwocz1sK28qZCwwKSl9KX19O2Z1bmN0aW9uIFkyZShuLHQpe2lmKDEmbiYmKE5uKCksaCgwLCJnIiwxNykoMSwidGV4dCIpLFQoMiksZygpLGgoMywidGl0bGUiKSxUKDQpLGcoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksVHQoImZvbnQiLGkuYXhpc0ZvbnQpLEJlKCJ4IixpLnRleHRYUG9zaXRpb24oZS52YWx1ZSkpKCJ5IixpLnRleHRZUG9zaXRpb24oZS52YWx1ZSkpLHYoMSksSGUoIiAiLGUudGlja0Zvcm1hdHRlZFN0cmluZywiICIpLHYoMiksYnQoaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUudmFsdWUpKX19ZnVuY3Rpb24gWDJlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyMCkoMSwic3BhbiIpLFQoMiksZygpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dC5sYXN0LG89dygyKTtUdCgibGVmdCIsby5nZXRNYWpvclhQb3NpdGlvbihlKSwicHgiKSgid2lkdGgiLG8uZ2V0TWFqb3JXaWR0aFN0cmluZyhlLHIsby5tYWpvclRpY2tzW2krMV0pKSgiYm90dG9tIixvLmdldE1ham9yWVBvc2l0aW9uKGUpLCJweCIpKCJoZWlnaHQiLG8uZ2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImZvbnQiLG8uYXhpc0ZvbnQpLG50KCJtYWpvci1sYWJlbCIsITApKCJsYXN0IixyKSxfKCJ0aXRsZSIsby5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUuc3RhcnQpKSx2KDIpLGJ0KGUudGlja0Zvcm1hdHRlZFN0cmluZyl9fWZ1bmN0aW9uIFEyZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOCksUygxLFgyZSwzLDE2LCJzcGFuIiwxOSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nRm9yT2YiLGUubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWFqb3JUaWNrKX19dmFyIEN0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IEYsdGhpcy5lZGl0TWVudU9wZW5lZD0hMSx0aGlzLm1ham9yVGlja3M9W10sdGhpcy5taW5vclRpY2tzPVtdfW5nT25DaGFuZ2VzKCl7bGV0IGU9bnVsbCxyPVh4KCJ4Ij09PXRoaXMuYXhpcz90aGlzLmRvbURpbS53aWR0aDp0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy5ncmlkQ291bnQpO2U9dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG54P1F4LmdldFRpY2tzRm9yTGluZWFyU2NhbGUodGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KTp0aGlzLnNjYWxlIGluc3RhbmNlb2YgaXg/UXguZ2V0VGlja3NGb3JUZW1wb3JhbFNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6UXguZ2V0U3RhbmRhcmRUaWNrcyh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpLHRoaXMubWFqb3JUaWNrcz1lLm1ham9yLHRoaXMubWlub3JUaWNrcz1ReC5maWx0ZXJUaWNrc0J5VmlzaWJpbGl0eShlLm1pbm9yLG89PnRoaXMuZ2V0RG9tUG9zKG8udmFsdWUpLHRoaXMuYXhpcywiMTFweCBSb2JvdG8sIHNhbnMtc2VyaWYiKX1nZXRGb3JtYXR0ZXIoKXtyZXR1cm4gdGhpcy5jdXN0b21Gb3JtYXR0ZXI/P3RoaXMuc2NhbGUuZGVmYXVsdEZvcm1hdHRlcn10cmFja0J5TWlub3JUaWNrKGUpe3JldHVybiBlLnZhbHVlfXRyYWNrQnlNYWpvclRpY2soZSl7cmV0dXJuIGUuc3RhcnR9Z2V0RG9tUG9zKGUpe3JldHVybiB0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5heGlzRXh0ZW50LFpjKHRoaXMuZG9tRGltLHRoaXMuYXhpcyksZSl9dGV4dFhQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKToiMTAwJSJ9dGV4dFlQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKX1nZXRNYWpvclhQb3NpdGlvbihlKXtyZXR1cm4ieSI9PT10aGlzLmF4aXM/MDpNYXRoLm1pbih0aGlzLmRvbURpbS53aWR0aCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JXaWR0aFN0cmluZyhlLGkscil7cmV0dXJuInkiPT09dGhpcy5heGlzPyIiOihpfHwhcj90aGlzLmRvbURpbS53aWR0aDp0aGlzLmdldE1ham9yWFBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWFBvc2l0aW9uKGUpKyJweCJ9Z2V0TWFqb3JZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPzA6dGhpcy5kb21EaW0uaGVpZ2h0LU1hdGgubWluKHRoaXMuZG9tRGltLmhlaWdodCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxpLHIpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0uaGVpZ2h0OnRoaXMuZ2V0TWFqb3JZUG9zaXRpb24ocikpLXRoaXMuZ2V0TWFqb3JZUG9zaXRpb24oZSkrInB4In1rZXlkb3duUHJldmVudENsb3NlKGUpeyJFc2NhcGUiIT09ZS5rZXkmJmUuc3RvcFByb3BhZ2F0aW9uKCl9ZXh0ZW50Q2hhbmdlZChlLGkpe2xldCByPU51bWJlcihlKSxvPU51bWJlcihpKTtpZihvPHIpe2xldCBzPXI7cj1vLG89c30hTnVtYmVyLmlzRmluaXRlKHIpfHwhTnVtYmVyLmlzRmluaXRlKG8pfHx0aGlzLm9uVmlld0V4dGVudENoYW5nZS5lbWl0KFtyLG9dKX1vbkF4aXNVcGRhdGVNZW51T3BlbihlLGkscil7ZS52YWx1ZT1TdHJpbmcoclswXSksaS52YWx1ZT1TdHJpbmcoclsxXSksZS5mb2N1cygpfXNldEVkaXRNZW51T3BlbmVkKGUpe3RoaXMuZWRpdE1lbnVPcGVuZWQ9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1heGlzIl1dLGlucHV0czp7YXhpc0V4dGVudDoiYXhpc0V4dGVudCIsYXhpczoiYXhpcyIsc2NhbGU6InNjYWxlIixncmlkQ291bnQ6ImdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0iLGN1c3RvbUZvcm1hdHRlcjoiY3VzdG9tRm9ybWF0dGVyIn0sb3V0cHV0czp7b25WaWV3RXh0ZW50Q2hhbmdlOiJvblZpZXdFeHRlbnRDaGFuZ2UifSxmZWF0dXJlczpbR3RdLGRlY2xzOjI2LHZhcnM6MTEsY29uc3RzOltbMSwibGluZSJdLFsxLCJtaW5vciJdLFsxLCJ0aWNrcyJdLFsiY2xhc3MiLCJtaW5vci10aWNrLWxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gbWFudWFsbHkgc2V0IG1pbiAmIG1heCB2YWx1ZXMiLDEsImV4dGVudC1lZGl0LWJ1dHRvbiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJtZW51T3BlbmVkIiwibWVudUNsb3NlZCJdLFsibWF0TWVudVRyaWdnZXIiLCJtYXRNZW51VHJpZ2dlciJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFsiY2xhc3MiLCJtYWpvciB0aWNrcyIsNCwibmdJZiJdLFsieFBvc2l0aW9uIiwiYmVmb3JlIiwzLCJ5UG9zaXRpb24iXSxbIm1hbnVhbENvbnRyb2wiLCJtYXRNZW51Il0sWzEsImV4dGVudC1lZGl0LWlucHV0IiwzLCJjbGljayIsImtleWRvd24iXSxbInR5cGUiLCJudW1iZXIiLDMsInZhbHVlIl0sWyJtaW5JbnB1dCIsIiJdLFsibWF4SW5wdXQiLCIiXSxbMSwiZXh0ZW50LWVkaXQtY29udHJvbCIsMywia2V5ZG93biJdLFsibWF0LXJhaXNlZC1idXR0b24iLCIiLCJjb2xvciIsInByaW1hcnkiLDEsImV4dGVudC1lZGl0LWNoYW5nZSIsMywiY2xpY2siXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMSwiZXh0ZW50LWVkaXQtY2FuY2VsIiwzLCJjbGljayJdLFsxLCJtaW5vci10aWNrLWxhYmVsIl0sWzEsIm1ham9yIiwidGlja3MiXSxbMywibWFqb3ItbGFiZWwiLCJsYXN0IiwibGVmdCIsIndpZHRoIiwiYm90dG9tIiwiaGVpZ2h0IiwiZm9udCIsInRpdGxlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPWdlKCk7aCgwLCJkaXYiKSxQKDEsImRpdiIsMCksaCgyLCJkaXYiLDEpLE5uKCksaCgzLCJzdmciLDIpLFMoNCxZMmUsNSw2LCJnIiwzKSxnKCksT28oKSxoKDUsImJ1dHRvbiIsNCw1KSxJKCJtZW51T3BlbmVkIixmdW5jdGlvbigpe1gocik7bGV0IHM9aXQoMTUpLGE9aXQoMjApO3JldHVybiBpLm9uQXhpc1VwZGF0ZU1lbnVPcGVuKHMsYSxpLmF4aXNFeHRlbnQpLFEoaS5zZXRFZGl0TWVudU9wZW5lZCghMCkpfSkoIm1lbnVDbG9zZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2V0RWRpdE1lbnVPcGVuZWQoITEpfSksUCg3LCJtYXQtaWNvbiIsNiksZygpKCksUyg4LFEyZSwyLDIsImRpdiIsNyksZygpLGgoOSwibWF0LW1lbnUiLDgsOSkoMTEsImRpdiIsMTApLEkoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksaCgxMiwibGFiZWwiKSxUKDEzLCJtaW4iKSxnKCksUCgxNCwiaW5wdXQiLDExLDEyKSxnKCksaCgxNiwiZGl2IiwxMCksSSgiY2xpY2siLGZ1bmN0aW9uKHMpe3JldHVybiBzLnN0b3BQcm9wYWdhdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKHMpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2Uocyl9KSxoKDE3LCJsYWJlbCIpLFQoMTgsIm1heCIpLGcoKSxQKDE5LCJpbnB1dCIsMTEsMTMpLGcoKSxoKDIxLCJkaXYiLDE0KSxJKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksaCgyMiwiYnV0dG9uIiwxNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChyKTtsZXQgcz1pdCgxNSksYT1pdCgyMCksbD1pdCg2KTtyZXR1cm4gaS5leHRlbnRDaGFuZ2VkKHMudmFsdWUsYS52YWx1ZSksUShsLmNsb3NlTWVudSgpKX0pLFQoMjMsIiBDaGFuZ2UgIiksZygpLGgoMjQsImJ1dHRvbiIsMTYpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKHIpLFEoaXQoNikuY2xvc2VNZW51KCkpfSksVCgyNSwiIENhbmNlbCAiKSxnKCkoKSgpfWlmKDImZSl7bGV0IHI9aXQoMTApO0FzKGkuYXhpcysiLWF4aXMgYXhpcyIpLHYoNCksXygibmdGb3JPZiIsaS5taW5vclRpY2tzKSgibmdGb3JUcmFja0J5IixpLnRyYWNrQnlNaW5vclRpY2spLHYoMSksbnQoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxfKCJtYXRNZW51VHJpZ2dlckZvciIsciksdigzKSxfKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSx2KDEpLF8oInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93Iiksdig1KSxfKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSx2KDUpLF8oInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOltubixGZSxKaSwkaSxFbixOYyxMY10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdey0tdGItaWNvbi1zaXplOiAxNnB4O2hlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6NXB4O3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjI0cHg7cGFkZGluZzowfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBaeChuLHQpe2xldCBlPU1hdGgubWluKEhjKG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBNdGUobix0LGUsaSxyLG8pe2xldCBzO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDpzPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOnM9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6cz0yMDticmVhaztkZWZhdWx0OnM9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBhPW4uZGVsdGFZKnMsbD1hPDA/TWF0aC5tYXgoYSppLC0uOTUpOmEqaSx7d2lkdGg6YyxoZWlnaHQ6ZH09ZSx1PVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW2QsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFtkLDBdLGQrKGQtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6dVsxXTx1WzBdP1t1WzFdLHVbMF1dOnUseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIEoyZT1bImRvdHMiXTtmdW5jdGlvbiAkMmUobix0KXtpZigxJm4mJihObigpLFAoMCwiY2lyY2xlIiwxMSkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoMik7QmUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGVOZShuLHQpe2lmKDEmbiYmKE5uKCksT3QoMCksUygxLCQyZSwxLDMsImNpcmNsZSIsMTApLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO3YoMSksXygibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gdE5lKG4sdCl7aWYoMSZuJiYoTm4oKSxPdCgwKSxTKDEsZU5lLDIsMSwibmctY29udGFpbmVyIiw5KSxrdCgpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nRm9yT2YiLGUuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gbk5lKG4sdCl7aWYoMSZuJiYoTm4oKSxQKDAsInJlY3QiLDEyKSksMiZuKXtsZXQgZT13KCk7QmUoIngiLGUuem9vbUJveEluVWlDb29yZGluYXRlLngpKCJ3aWR0aCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUud2lkdGgpKCJ5IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS55KSgiaGVpZ2h0IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS5oZWlnaHQpfX12YXIgaU5lPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm57ZGF0YTpuLGN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ6dCxjdXJzb3JMb2NhdGlvbjplfX07ZnVuY3Rpb24gck5lKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDE0KSxsaSgxLDE1KSxnKCkpLDImbil7bGV0IGU9dygyKSxpPWl0KDExKTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZ2IoMixpTmUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gb05lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO1MoMCxyTmUsMiw2LCJuZy10ZW1wbGF0ZSIsMTMpLEkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKSl9KX1pZigyJm4pe2xldCBlPXcoKTtfKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixlLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixlLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmUuc3RhdGUuZ2V0VmFsdWUoKT09PWUuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsZS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixlLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCl9fWZ1bmN0aW9uIHNOZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwidHIiLDE3KSgyLCJ0ZCIsMTgpLFAoMywic3BhbiIpLGcoKSxoKDQsInRkIiwxOSksVCg1KSxnKCksaCg2LCJ0ZCIpLFQoNyksZygpLGgoOCwidGQiKSxUKDkpLGcoKSgpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7digzKSxUdCgiYmFja2dyb3VuZC1jb2xvciIsZS5tZXRhZGF0YS5jb2xvciksdigyKSxidChlLm1ldGFkYXRhLmRpc3BsYXlOYW1lKSx2KDIpLGJ0KGUuZGF0YVBvaW50LnkpLHYoMiksYnQoZS5kYXRhUG9pbnQueCl9fWZ1bmN0aW9uIGFOZShuLHQpe2lmKDEmbiYmKGgoMCwidGFibGUiKSgxLCJ0aGVhZCIpKDIsInRyIiksUCgzLCJ0aCIsMTYpLGgoNCwidGgiKSxUKDUsIk5hbWUiKSxnKCksaCg2LCJ0aCIpLFQoNywiWSIpLGcoKSxoKDgsInRoIiksVCg5LCJYIiksZygpKCkoKSxoKDEwLCJ0Ym9keSIpLFMoMTEsc05lLDEwLDUsIm5nLWNvbnRhaW5lciIsOSksZygpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9dygpO3YoMTEpLF8oIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBjTmUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIHd0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRix0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBGLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBGLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1Jcix0aGlzLnN0YXRlPW5ldyBBaShJci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoTigoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KElyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxtaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbWkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxtaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9Jci5QQU5OSU5HOklyLkRSQUdfWk9PTUlORztpPT09SXIuTk9ORSYmcj09PUlyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmZ2EuTEVGVCk9PT1nYS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09SXIuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxzPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLGE9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sc10seTpbYSxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Jci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KElyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxtaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChJci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksbWkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBJci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoSXIuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBJci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2UgSXIuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDpzfT10aGlzLmRvbURpbSxhPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKHMrciksZD10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W2EsbF0seTpbYyxkXX19KTticmVha31jYXNlIElyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLG1pKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSm4oZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLEh0KGUpKTpuYSgzZTMpLnBpcGUoTnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLE4oKCk9Pm51bGwpKX0pLGtlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6TXRlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1Jci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChJci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmZ2EuTEVGVCk9PT1nYS5MRUZULG89KGUuYnV0dG9ucyZnYS5NSURETEUpPT09Z2EuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsWmModGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxaYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWmModGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxaYyh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89WngoaS5wb2ludHMsZS54KSxzPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OnMsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKHMueCkseTp0aGlzLmdldERvbVkocy55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCksQyh4ZikpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShKMmUsNyxNZSksR2UoQnUsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJm50KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUiLGRpc2FibGVUb29sdGlwOiJkaXNhYmxlVG9vbHRpcCJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQiLG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZToib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIn0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTp4Zix1c2VGYWN0b3J5OmNOZSxkZXBzOlt6aV19XSksR3RdLGRlY2xzOjEyLHZhcnM6OSxjb25zdHM6W1sxLCJkb3RzIl0sWyJkb3RzIiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiem9vbS1ib3giLDQsIm5nSWYiXSxbMSwiem9vbS1pbnN0cnVjdGlvbiJdLFsxLCJpbnN0cnVjdGlvbi1jb250ZW50Il0sWyJjZGtPdmVybGF5T3JpZ2luIiwiIiwxLCJ0b29sdGlwLW9yaWdpbiJdLFsidG9vbHRpcE9yaWdpbiIsImNka092ZXJsYXlPcmlnaW4iXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWyJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImRldGFjaCJdLFsxLCJ0b29sdGlwLWNvbnRhaW5lciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMSwibmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE5uKCksaCgwLCJzdmciLDAsMSksUygyLHROZSwyLDIsIm5nLWNvbnRhaW5lciIsMiksUygzLG5OZSwxLDQsInJlY3QiLDMpLGcoKSxPbygpLGgoNCwiZGl2Iiw0KSg1LCJzcGFuIiw1KSxUKDYsIkFsdCArIFNjcm9sbCB0byBab29tIiksZygpKCksUCg3LCJkaXYiLDYsNyksUyg5LG9OZSwxLDcsbnVsbCwyKSxTKDEwLGFOZSwxMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw4LFd0KSksMiZlJiYobnQoInBhbm5hYmxlIixpLnNwZWNpYWxLZXlQcmVzc2VkKSgiZHJhZ2dhYmxlIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuTk9ORXx8aS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykoInBhbm5pbmciLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5QQU5OSU5HKSx2KDIpLF8oIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSx2KDEpLF8oIm5nSWYiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpLHYoNiksXygibmdJZiIsIWkuZGlzYWJsZVRvb2x0aXApKX0sZGVwZW5kZW5jaWVzOltubixGZSxMcixCdSx3ZF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7dXNlci1zZWxlY3Q6bm9uZX0uZG90c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uZG90cy5kcmFnZ2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpjcm9zc2hhaXJ9LmRvdHMucGFubmFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFifS5kb3RzLnBhbm5pbmdbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpncmFiYmluZ30udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVdID4gc3Bhbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTBweDt3aWR0aDoxMHB4fS50b29sdGlwLW9yaWdpbltfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9LnRvb2x0aXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg1KTtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2NvbnRhaW46cGFpbnQgc3R5bGUgbGF5b3V0O2ZvbnQtc2l6ZTouOWVtO292ZXJmbG93OmF1dG87cGFkZGluZzo1cHg7cG9pbnRlci1ldmVudHM6bm9uZTt3aWR0aDoxMDAlfXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDVweDt0ZXh0LWFsaWduOmxlZnR9dGhbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjUwMDtwYWRkaW5nLWJvdHRvbTo1cHh9Lnpvb20tYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6LjAzO2ZpbGw6IzAwMDtzdHJva2U6I2NjY30uem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xlZnQ6MDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDoxMHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNXM7ei1pbmRleDoxfS5pbnN0cnVjdGlvbi1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjYpO2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7cGFkZGluZzo1cHggMTBweDt1c2VyLXNlbGVjdDpub25lfS5zaG93LXpvb20taW5zdHJ1Y3Rpb25bX25naG9zdC0lQ09NUCVdICAgLnpvb20taW5zdHJ1Y3Rpb25bX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHVOZShuLHQpe2lmKDEmbiYmKE5uKCksUCgwLCJsaW5lIiwyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtudCgiemVybyIsMD09PWUpLEJlKCJ4MSIsaS5nZXREb21YKGUpKSgieDIiLGkuZ2V0RG9tWChlKSkoInkyIixpLmRvbURpbS5oZWlnaHQpfX1mdW5jdGlvbiBwTmUobix0KXtpZigxJm4mJihObigpLFAoMCwibGluZSIsMykpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7bnQoInplcm8iLDA9PT1lKSxCZSgieTEiLGkuZ2V0RG9tWShlKSkoIngyIixpLmRvbURpbS53aWR0aCkoInkyIixpLmdldERvbVkoZSkpfX12YXIgU3RlPSgoKT0+e2NsYXNzIG57Z2V0RG9tWChlKXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxaYyh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksWmModGhpcy5kb21EaW0sInkiKSxlKX1nZXRYVGlja3MoKXtyZXR1cm4gdGhpcy54U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LngsWHgodGhpcy5kb21EaW0ud2lkdGgsdGhpcy54R3JpZENvdW50KSl9Z2V0WVRpY2tzKCl7cmV0dXJuIHRoaXMueVNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC55LFh4KHRoaXMuZG9tRGltLmhlaWdodCx0aGlzLnlHcmlkQ291bnQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1ncmlkLXZpZXciXV0saW5wdXRzOnt2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseEdyaWRDb3VudDoieEdyaWRDb3VudCIseVNjYWxlOiJ5U2NhbGUiLHlHcmlkQ291bnQ6InlHcmlkQ291bnQiLGRvbURpbToiZG9tRGltIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInkxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ4MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieTEiLCIwIl0sWyJ4MSIsIjAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihObigpLGgoMCwic3ZnIiksUygxLHVOZSwxLDUsImxpbmUiLDApLFMoMixwTmUsMSw1LCJsaW5lIiwxKSxnKCkpLDImZSYmKHYoMSksXygibmdGb3JPZiIsaS5nZXRYVGlja3MoKSksdigxKSxfKCJuZ0Zvck9mIixpLmdldFlUaWNrcygpKSl9LGRlcGVuZGVuY2llczpbbm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICBzdmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNjY2M7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICAgICAgfVxuXG4gICAgICAuemVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBzdHJva2U6ICNhYWE7XG4gICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxtTmU9WyJzZXJpZXNWaWV3Il0saE5lPVsieEF4aXMiXSxnTmU9WyJ5QXhpcyJdLF9OZT1bImNoYXJ0RWwiXTtmdW5jdGlvbiBiTmUobix0KXtpZigxJm4mJlAoMCwibGluZS1jaGFydC1ncmlkLXZpZXciLDE2KSwyJm4pe2xldCBlPXcoKTtfKCJ2aWV3RXh0ZW50IixlLnZpZXdCb3gpKCJ4U2NhbGUiLGUueFNjYWxlKSgieVNjYWxlIixlLnlTY2FsZSkoInhHcmlkQ291bnQiLGUuWF9HUklEX0NPVU5UKSgieUdyaWRDb3VudCIsZS5ZX0dSSURfQ09VTlQpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKX19ZnVuY3Rpb24gdk5lKG4sdCl7MSZuJiYoTm4oKSxQKDAsInN2ZyIsbnVsbCwxNykpfWZ1bmN0aW9uIHlOZShuLHQpezEmbiYmUCgwLCJjYW52YXMiLG51bGwsMTcpfWZ1bmN0aW9uIHhOZShuLHQpe2lmKDEmbiYmKE90KDApLFMoMSx2TmUsMiwwLCJzdmciLDUpLFMoMix5TmUsMiwwLCJjYW52YXMiLDUpLGt0KCkpLDImbil7bGV0IGU9dygpO3YoMSksXygibmdJZiIsZS5nZXRSZW5kZXJlclR5cGUoKT09PWUuUmVuZGVyZXJUeXBlLlNWRyksdigxKSxfKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuV0VCR0wpfX1mdW5jdGlvbiBDTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDE4KSxJKCJvblZpZXdFeHRlbnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uVmlld0JveENoYW5nZWQocikpfSkoIm9uVmlld0V4dGVudFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZShyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCksaT1pdCgxKTtfKCJzZXJpZXNEYXRhIixlLnNlcmllc0RhdGEpKCJzZXJpZXNNZXRhZGF0YU1hcCIsZS5zZXJpZXNNZXRhZGF0YU1hcCkoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgidG9vbHRpcE9yaWdpbkVsIixpKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMubWFpbikoInRvb2x0aXBUZW1wbGF0ZSIsZS50b29sdGlwVGVtcGxhdGUpKCJkaXNhYmxlVG9vbHRpcCIsZS5kaXNhYmxlVG9vbHRpcCl9fXZhciBNTmU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIHdOZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSksbGkoMSwyMCksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsQU8oMixNTmUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIFNOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLEkoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsInkiKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiYXhpc0V4dGVudCIsZS52aWV3Qm94LnkpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWUZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnlBeGlzKSgiZ3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoInNjYWxlIixlLnlTY2FsZSl9fWZ1bmN0aW9uIEVOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImxpbmUtY2hhcnQtYXhpcyIsMjIpLEkoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsIngiKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiYXhpc0V4dGVudCIsZS52aWV3Qm94LngpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWEZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnhBeGlzKSgiZ3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInNjYWxlIixlLnhTY2FsZSl9fWZ1bmN0aW9uIFROZShuLHQpezEmbiYmKGgoMCwiZGl2IiwyMyksUCgxLCJzcGFuIiwyNCksZygpKX12YXIgRE5lPWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aSxpbnRlcmFjdGlvblN0YXRlOnJ9fTtmdW5jdGlvbiBJTmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjUsMjYpLGxpKDIsMjApLGcoKSksMiZuKXtsZXQgZT13KCk7digyKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFJPKDIsRE5lLGUueFNjYWxlLGUueVNjYWxlLGUuZG9tRGltZW5zaW9ucy5tYWluLGUudmlld0JveCxlLmludGVyYWN0aW9uU3RhdGUpKX19dmFyIEFOZT1mdW5jdGlvbihuLHQpe3JldHVybntjb250YWluZXI6ITAsImRhcmstbW9kZSI6biwibGluZS1vbmx5LW1vZGUiOnQsImxpbmUtY2hhcnQiOiEwfX0seVY9e3g6WzAsMV0seTpbMCwxXX0sY189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5SZW5kZXJlclR5cGU9UWksdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1RaS5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9bnIuTElORUFSLHRoaXMueVNjYWxlVHlwZT1uci5MSU5FQVIsdGhpcy51c2VyVmlld0JveD1udWxsLHRoaXMubGluZU9ubHk9ITEsdGhpcy5kaXNhYmxlVG9vbHRpcD0hMSx0aGlzLnZpZXdCb3hDaGFuZ2VkPW5ldyBGLHRoaXMub25WaWV3Qm94T3ZlcnJpZGRlbj1uZXcgUnAoMSksdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5ZX0dSSURfQ09VTlQ9Nix0aGlzLlhfR1JJRF9DT1VOVD0xMCx0aGlzLnhTY2FsZT1xbCh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPXFsKHRoaXMueFNjYWxlVHlwZSksdGhpcy52aWV3Qm94PXlWLHRoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6MCxoZWlnaHQ6MH0seEF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9LHlBeGlzOnt3aWR0aDowLGhlaWdodDowfX0sdGhpcy5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQ9ITAsdGhpcy5pbnRlcmFjdGlvblN0YXRlPUlyLk5PTkUsdGhpcy5saW5lQ2hhcnQ9bnVsbCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMX1uZ09uSW5pdCgpe3RoaXMub25WaWV3Qm94T3ZlcnJpZGRlbi5uZXh0KHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbil9bmdPbkNoYW5nZXMoZSl7ZS54U2NhbGVUeXBlJiYodGhpcy54U2NhbGU9cWwodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9cWwodGhpcy55U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS5zZXJpZXNEYXRhJiYodGhpcy5pc0RhdGFVcGRhdGVkPSEwKSxlLmZpeGVkVmlld0JveCYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwKSxlLnNlcmllc01ldGFkYXRhTWFwJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCksZS51c2VEYXJrTW9kZSYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwKSxlLnVzZXJWaWV3Qm94JiYodGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITApLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkP3RoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighIXRoaXMudXNlclZpZXdCb3gpOnRoaXMuc2NhbGVVcGRhdGVkJiZ0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITEpLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD10aGlzLmlzVmlld0JveENoYW5nZWR8fHRoaXMudXNlclZpZXdCb3hVcGRhdGVkfHx0aGlzLnNjYWxlVXBkYXRlZHx8IXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX1yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpeyF0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3R8fHRoaXMuZGlzYWJsZVVwZGF0ZXx8KHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy5zY2FsZVVwZGF0ZWQ9ITAsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITAsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITAsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITAsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMSl9b25WaWV3UmVzaXplKCl7IXRoaXMubGluZUNoYXJ0fHwodGhpcy5yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpLHRoaXMubGluZUNoYXJ0LnJlc2l6ZSh0aGlzLmRvbURpbWVuc2lvbnMubWFpbiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfXNob3VsZFVwZGF0ZURlZmF1bHRWaWV3Qm94KGUpe2lmKGUueFNjYWxlVHlwZXx8ZS55U2NhbGVUeXBlfHxlLmlnbm9yZVlPdXRsaWVyc3x8ZS5zZXJpZXNEYXRhKXJldHVybiEwO2xldCByPWUuc2VyaWVzTWV0YWRhdGFNYXA7aWYocil7bGV0IG89ci5wcmV2aW91c1ZhbHVlO2lmKE9iamVjdC5rZXlzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApLmxlbmd0aCE9PU9iamVjdC5rZXlzKG8/P3t9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldFtzLGFdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpe2xldCBsPW8mJm9bc107aWYoIWx8fGEudmlzaWJsZSE9PWwudmlzaWJsZSlyZXR1cm4hMH19cmV0dXJuITF9b25Db250ZXh0TG9zdCgpe3RoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMCx0aGlzLmxpbmVDaGFydCYmKHRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKSx0aGlzLmxpbmVDaGFydD1udWxsKX10cmlnZ2VyQ29udGV4dExvc3RGb3JUZXN0KCl7dGhpcy5vbkNvbnRleHRMb3N0KCl9Z2V0TGluZUNoYXJ0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmxpbmVDaGFydH1pbml0aWFsaXplQ2hhcnQoKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQuZGlzcG9zZSgpO2xldCBlPXRoaXMuZ2V0UmVuZGVyZXJUeXBlKCksaT17b25EcmF3RW5kOigpPT57fSxvbkNvbnRleHRMb3N0OnRoaXMub25Db250ZXh0TG9zdC5iaW5kKHRoaXMpfSxyPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSxlKXtjYXNlIFFpLlNWRzpyPXt0eXBlOlFpLlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgUWkuV0VCR0w6cj17dHlwZTpRaS5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6aSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7ZX1gKX1sZXQgcz1lIT09UWkuU1ZHJiZZbF9pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP3ltOmlBO3RoaXMubGluZUNoYXJ0PW5ldyBzKHIpfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4gZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgUWkuU1ZHOnJldHVybiBRaS5TVkc7Y2FzZSBRaS5XRUJHTDpyZXR1cm4gWWxfaXNXZWJHbDJTdXBwb3J0ZWQoKT9RaS5XRUJHTDpRaS5TVkc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVuZGVyZXJUeXBlOiAke259YCl9fSh0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZSl9cmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKXt0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHhBeGlzOnt3aWR0aDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHlBeGlzOnt3aWR0aDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9fX11cGRhdGVMaW5lQ2hhcnQoKXtpZih0aGlzLnJlY292ZXJSZW5kZXJlcklmTmVlZGVkKCksdGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLHRoaXMudXNlclZpZXdCb3hVcGRhdGVkJiYodGhpcy51c2VyVmlld0JveFVwZGF0ZWQ9ITEpLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy51c2VyVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy51c2VyVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuZml4ZWRWaWV3Qm94KXRoaXMudmlld0JveD10aGlzLmZpeGVkVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuaXNWaWV3Qm94Q2hhbmdlZCl7bGV0IGk9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1udWxsLHM9bnVsbCxhPVtdO2ZvcihsZXR7aWQ6dSxwb2ludHM6cH1vZiBuKXtsZXQgZj10W3VdO2lmKGYmJiFmLmF1eCYmZi52aXNpYmxlKWZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKXtsZXR7eDpiLHk6TX09cFttXTtpKGIpJiYobz1udWxsPT09b3x8YjxvP2I6byxzPW51bGw9PT1zfHxiPnM/YjpzKSxyKE0pJiZhLnB1c2goTSl9fWEuc29ydChpbCk7bGV0IGM9YVswXSxkPWFbYS5sZW5ndGgtMV07cmV0dXJuIGUmJmEubGVuZ3RoPjImJihjPWFbTWF0aC5jZWlsKC4wNSooYS5sZW5ndGgtMSkpXSxkPWFbTWF0aC5mbG9vciguOTUqKGEubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1vJiZudWxsIT09cz9bbyxzXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT1kP1tjLGRdOnZvaWQgMH19KHRoaXMuc2VyaWVzRGF0YSx0aGlzLnNlcmllc01ldGFkYXRhTWFwLHRoaXMuaWdub3JlWU91dGxpZXJzLHRoaXMueFNjYWxlLmlzU2FmZU51bWJlcix0aGlzLnlTY2FsZS5pc1NhZmVOdW1iZXIpO3RoaXMudmlld0JveD17eDp0aGlzLnhTY2FsZS5uaWNlRG9tYWluKGkueD8/eVYueCkseTp0aGlzLnlTY2FsZS5uaWNlRG9tYWluKGkueT8/eVYueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OmV9KXt0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy52aWV3Qm94Q2hhbmdlZC5lbWl0KG51bGwpfXNldElzVmlld0JveE92ZXJyaWRkZW4oZSl7bGV0IGk9dGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuO3RoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj1lLGkhPT1lJiZ0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dChlKX1vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UoZSl7dGhpcy5pbnRlcmFjdGlvblN0YXRlPWV9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsaSl7bGV0IHI9ey4uLnRoaXMudmlld0JveCxbaV06ZX07dGhpcy5vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UobU5lLDcsTWUpLEdlKGhOZSw3LE1lKSxHZShnTmUsNyxNZSksR2UoX05lLDUsTWUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLnNlcmllc1ZpZXc9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueEF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueUF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuY2hhcnRFbD1yLmZpcnN0KX19LGlucHV0czp7Y3VzdG9tVmlzVGVtcGxhdGU6ImN1c3RvbVZpc1RlbXBsYXRlIixjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZToiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIscHJlZmVycmVkUmVuZGVyZXJUeXBlOiJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLHNlcmllc0RhdGE6InNlcmllc0RhdGEiLGZpeGVkVmlld0JveDoiZml4ZWRWaWV3Qm94IixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHlTY2FsZVR5cGU6InlTY2FsZVR5cGUiLGN1c3RvbVhGb3JtYXR0ZXI6ImN1c3RvbVhGb3JtYXR0ZXIiLGN1c3RvbVlGb3JtYXR0ZXI6ImN1c3RvbVlGb3JtYXR0ZXIiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIix1c2VyVmlld0JveDoidXNlclZpZXdCb3giLGxpbmVPbmx5OiJsaW5lT25seSIsZGlzYWJsZVRvb2x0aXA6ImRpc2FibGVUb29sdGlwIixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJkaXNhYmxlVG9vbHRpcCIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImN1c3RvbS12aXMiLDQsIm5nSWYiXSxbMSwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsxLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIGN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyIsNCwibmdJZiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbImNoYXJ0RWwiLCIiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsImRpc2FibGVUb29sdGlwIiwib25WaWV3RXh0ZW50Q2hhbmdlIiwib25WaWV3RXh0ZW50UmVzZXQiLCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiXSxbMSwiY3VzdG9tLXZpcyJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiXSxbImF4aXMiLCJ4IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiXSxbMSwiZG90Il0sWzEsInJlY3QiXSxbMSwiY3VzdG9tLXZpcyIsImN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyJdLFsiY3VzdG9tQ2hhcnRPdmVybGF5IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksSSgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25WaWV3UmVzaXplKCl9KSxoKDIsImRpdiIsMiwzKSxTKDQsYk5lLDEsNiwibGluZS1jaGFydC1ncmlkLXZpZXciLDQpLFMoNSx4TmUsMywyLCJuZy1jb250YWluZXIiLDUpLFMoNixDTmUsMSw5LCJsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXciLDYpLFMoNyx3TmUsMiw3LCJkaXYiLDcpLGcoKSxoKDgsImRpdiIsOCw5KSxTKDEwLFNOZSwxLDUsImxpbmUtY2hhcnQtYXhpcyIsMTApLGcoKSxoKDExLCJkaXYiLDExLDEyKSxTKDEzLEVOZSwxLDUsImxpbmUtY2hhcnQtYXhpcyIsMTMpLGcoKSxTKDE0LFROZSwyLDAsImRpdiIsMTQpLFMoMTUsSU5lLDMsOCwiZGl2IiwxNSksZygpKSwyJmUmJihfKCJuZ0NsYXNzIixxcigxMCxBTmUsaS51c2VEYXJrTW9kZSxpLmxpbmVPbmx5KSkoInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwwKSx2KDQpLF8oIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDEpLF8oIm5nSWYiLGkuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50KSx2KDEpLF8oIm5nSWYiLCFpLmxpbmVPbmx5KSx2KDEpLF8oIm5nSWYiLGkuY3VzdG9tVmlzVGVtcGxhdGUpLHYoMyksXygibmdJZiIsIWkubGluZU9ubHkpLHYoMyksXygibmdJZiIsIWkubGluZU9ubHkpLHYoMSksXygibmdJZiIsIWkubGluZU9ubHkpLHYoMSksXygibmdJZiIsaS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W3luLEZlLExyLHdkLEN0ZSx3dGUsU3RlLE9mXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59W19uZ2hvc3QtJUNPTVAlXSAgICAgLmxpbmUtY2hhcnQ6aGFzKC5ob3Jpem9udGFsLXByb3NwZWN0aXZlLWFyZWE6aG92ZXIpIC54LWF4aXMgLmV4dGVudC1lZGl0LWJ1dHRvbnt2aXNpYmlsaXR5OnZpc2libGV9W19uZ2hvc3QtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfS5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6aW5oZXJpdDtkaXNwbGF5OmdyaWQ7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7Z3JpZC10ZW1wbGF0ZS1hcmVhczoieWF4aXMgc2VyaWVzIiAiZG90IHhheGlzIiAiLiBjdXN0b21DaGFydE92ZXJsYXkiO2dyaWQtdGVtcGxhdGUtY29sdW1uczo1MHB4IDFmcjtncmlkLWF1dG8tcm93czoxZnIgMzBweCAwcHh9LmNvbnRhaW5lci5kYXJrLW1vZGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNvbnRhaW5lci5saW5lLW9ubHktbW9kZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjAgMWZyO2dyaWQtYXV0by1yb3dzOjFmciAwfS5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNlcmllcztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNhbnZhc1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBzdmdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1ncmlkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAuY3VzdG9tLXZpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlOy13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4YXhpcztwb3NpdGlvbjpyZWxhdGl2ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eWF4aXN9LmRvdFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOmRvdDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRvdFtfbmdjb250ZW50LSVDT01QJV0gICAucmVjdFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjFweDt3aWR0aDoxcHg7YmFja2dyb3VuZC1jb2xvcjojYWFhfS5jdXN0b20tY2hhcnQtb3ZlcmxheS12aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjdXN0b21DaGFydE92ZXJsYXk7Z3JpZC1yb3ctZW5kOjI7Z3JpZC1yb3ctc3RhcnQ6MX0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJOZShuLHQpezEmbiYmbGkoMCl9dmFyIFR0ZT1mdW5jdGlvbihuKXtyZXR1cm57JGltcGxpY2l0Om59fTtmdW5jdGlvbiBQTmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNCksUygxLFJOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksVCgyKSxnKCkpLDImbil7bGV0IGU9dygpLGk9aXQoNik7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLEluKDMsVHRlLGUuZGF0dW0pKSx2KDEpLEhlKCIgIixlLmdldEZvcm1hdHRlZERhdGFGb3JDb2x1bW4oKSwiICIpfX1mdW5jdGlvbiBPTmUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIGtOZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw0KSxTKDEsT05lLDEsMCwibmctY29udGFpbmVyIiw1KSxUKDIpLGcoKSksMiZuKXtsZXQgZT13KCksaT1pdCg2KTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSW4oMyxUdGUsZS5kYXR1bSkpLHYoMSksSGUoIiAiLGUuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbigpLCIgIil9fWZ1bmN0aW9uIEZOZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw2KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiICIsZS5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCksIiAiKX19ZnVuY3Rpb24gTk5lKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw5KX1mdW5jdGlvbiBMTmUobix0KXsxJm4mJlAoMCwibWF0LWljb24iLDEwKX1mdW5jdGlvbiBCTmUobix0KXtpZigxJm4mJihTKDAsTk5lLDEsMCwibWF0LWljb24iLDcpLFMoMSxMTmUsMSwwLCJtYXQtaWNvbiIsOCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7XygibmdJZiIsZT49MCksdigxKSxfKCJuZ0lmIixlPDApfX12YXIgVk5lPVsiKiJdLGRfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRNZW51T3BlbmVkPW5ldyBGLHRoaXMuQ29sdW1uSGVhZGVyVHlwZT1odH1nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKCl7aWYodm9pZCAwPT09dGhpcy5kYXR1bSlyZXR1cm4iIjtzd2l0Y2godGhpcy5oZWFkZXIudHlwZSl7Y2FzZSBodC5SVU46cmV0dXJuIHRoaXMuZGF0dW07Y2FzZSBodC5WQUxVRTpjYXNlIGh0LlNURVA6Y2FzZSBodC5TTU9PVEhFRDpjYXNlIGh0LlNUQVJUX1NURVA6Y2FzZSBodC5FTkRfU1RFUDpjYXNlIGh0LlNUQVJUX1ZBTFVFOmNhc2UgaHQuRU5EX1ZBTFVFOmNhc2UgaHQuTUlOX1ZBTFVFOmNhc2UgaHQuTUFYX1ZBTFVFOmNhc2UgaHQuU1RFUF9BVF9NQVg6Y2FzZSBodC5TVEVQX0FUX01JTjpjYXNlIGh0Lk1FQU46Y2FzZSBodC5IUEFSQU06cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmRhdHVtP2cwLmZvcm1hdFNob3J0KHRoaXMuZGF0dW0pOnRoaXMuZGF0dW07Y2FzZSBodC5USU1FOnJldHVybiBuZXcgRGF0ZSh0aGlzLmRhdHVtKS50b0lTT1N0cmluZygpO2Nhc2UgaHQuUkVMQVRJVkVfVElNRTpyZXR1cm4gXzAuZm9ybWF0UmVhZGFibGUodGhpcy5kYXR1bSk7Y2FzZSBodC5WQUxVRV9DSEFOR0U6cmV0dXJuIGcwLmZvcm1hdFNob3J0KE1hdGguYWJzKHRoaXMuZGF0dW0pKTtjYXNlIGh0LlBFUkNFTlRBR0VfQ0hBTkdFOnJldHVybiBNYXRoLnJvdW5kKDEwMCp0aGlzLmRhdHVtKS50b1N0cmluZygpKyIlIjtjYXNlIGh0LlJBV19DSEFOR0U6cmV0dXJuIGlwLmZvcm1hdFNob3J0KE1hdGguYWJzKHRoaXMuZGF0dW0pKTtkZWZhdWx0OnJldHVybiIifX1vbkNvbnRleHRNZW51T3BlbmVkKGUpe3RoaXMuY29udGV4dE1lbnVPcGVuZWQuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJjb250ZXh0bWVudSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db250ZXh0TWVudU9wZW5lZChvKX0pfSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIixkYXR1bToiZGF0dW0ifSxvdXRwdXRzOntjb250ZXh0TWVudU9wZW5lZDoiY29udGV4dE1lbnVPcGVuZWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6Vk5lLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsiYXJyb3ciLCIiXSxbMSwiY2VsbCJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2VsbCIsImV4dHJhLXJpZ2h0LXBhZGRpbmciXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbigpLE90KDAsMCksUygxLFBOZSwzLDUsImRpdiIsMSksUygyLGtOZSwzLDUsImRpdiIsMSksUygzLEZOZSwyLDEsImRpdiIsMiksenQoNCksa3QoKSxTKDUsQk5lLDIsMiwibmctdGVtcGxhdGUiLG51bGwsMyxXdCkpLDImZSYmKF8oIm5nU3dpdGNoIixpLmhlYWRlci50eXBlKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlZBTFVFX0NIQU5HRSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5QRVJDRU5UQUdFX0NIQU5HRSkpfSxkZXBlbmRlbmNpZXM6W0ZlLExyLHNyLFNyLHV1LEVuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtY2VsbH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0gICAgIHBhdGh7ZmlsbDp1bnNldH0uZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxITmU9WyIqIl0sc0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6SE5lLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSx6dCgwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB6TmUobix0KXtpZigxJm4mJlAoMCwibWF0LWljb24iLDcpLDImbil7bGV0IGU9dygyKTtfKCJuZ0NsYXNzIixlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lPyJzaG93Ijoic2hvdy1vbi1ob3ZlciIpfX1mdW5jdGlvbiBVTmUobix0KXtpZigxJm4mJlAoMCwibWF0LWljb24iLDgpLDImbil7bGV0IGU9dygyKTtfKCJuZ0NsYXNzIixlLmhlYWRlci5uYW1lPT09ZS5zb3J0aW5nSW5mby5uYW1lPyJzaG93Ijoic2hvdy1vbi1ob3ZlciIpfX1mdW5jdGlvbiBqTmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKSxRKG8uaGVhZGVyQ2xpY2tlZEhhbmRsZXIoKSl9KSxTKDEsek5lLDEsMSwibWF0LWljb24iLDUpLFMoMixVTmUsMSwxLCJtYXQtaWNvbiIsNiksZygpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygibmdJZiIsZS5zb3J0aW5nSW5mby5vcmRlcj09PWUuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS5oZWFkZXIubmFtZSE9PWUuc29ydGluZ0luZm8ubmFtZSksdigxKSxfKCJuZ0lmIixlLnNvcnRpbmdJbmZvLm9yZGVyPT09ZS5Tb3J0aW5nT3JkZXIuREVTQ0VORElORyYmZS5oZWFkZXIubmFtZT09PWUuc29ydGluZ0luZm8ubmFtZSl9fWZ1bmN0aW9uIEdOZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsOSksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQ29udGV4dE1lbnVPcGVuZWQocikpfSksUCgxLCJtYXQtaWNvbiIsMTApLGcoKX19dmFyIFdOZT1bIioiXSx1Xz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ocGFyYW1zRW5hYmxlZD0hMSx0aGlzLmRpc2FibGVDb250ZXh0TWVudT0hMSx0aGlzLmRyYWdTdGFydD1uZXcgRix0aGlzLmRyYWdFbmQ9bmV3IEYsdGhpcy5kcmFnRW50ZXI9bmV3IEYsdGhpcy5oZWFkZXJDbGlja2VkPW5ldyBGLHRoaXMuY29udGV4dE1lbnVPcGVuZWQ9bmV3IEYsdGhpcy5oaWdobGlnaHRTdHlsZSQ9bmV3IEFpKHt9KSx0aGlzLlNvcnRpbmdPcmRlcj1pb31vbkNvbnRleHRNZW51T3BlbmVkKGUpe3RoaXMuZGlzYWJsZUNvbnRleHRNZW51fHx0aGlzLmNvbnRleHRNZW51T3BlbmVkLmVtaXQoZSl9aGVhZGVyQ2xpY2tlZEhhbmRsZXIoKXt0aGlzLmhlYWRlci5zb3J0YWJsZSYmdGhpcy5oZWFkZXJDbGlja2VkLmVtaXQodGhpcy5oZWFkZXIubmFtZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJjb250ZXh0bWVudSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db250ZXh0TWVudU9wZW5lZChvKX0pfSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGhwYXJhbXNFbmFibGVkOiJocGFyYW1zRW5hYmxlZCIsZGlzYWJsZUNvbnRleHRNZW51OiJkaXNhYmxlQ29udGV4dE1lbnUifSxvdXRwdXRzOntkcmFnU3RhcnQ6ImRyYWdTdGFydCIsZHJhZ0VuZDoiZHJhZ0VuZCIsZHJhZ0VudGVyOiJkcmFnRW50ZXIiLGhlYWRlckNsaWNrZWQ6ImhlYWRlckNsaWNrZWQiLGNvbnRleHRNZW51T3BlbmVkOiJjb250ZXh0TWVudU9wZW5lZCJ9LG5nQ29udGVudFNlbGVjdG9yczpXTmUsZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbMSwiY2VsbCIsMywiZHJhZ2dhYmxlIiwibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJjbGljayJdLFszLCJoZWFkZXIiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImNsYXNzIiwic29ydGluZy1pY29uLWNvbnRhaW5lciIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImNsYXNzIiwiY29udGV4dC1tZW51LWNvbnRhaW5lciBzaG93LW9uLWhvdmVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsMywibmdDbGFzcyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwxLCJjb250ZXh0LW1lbnUtY29udGFpbmVyIiwic2hvdy1vbi1ob3ZlciIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksaCgwLCJkaXYiLDApLEkoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kcmFnU3RhcnQuZW1pdChpLmhlYWRlcil9KSgiZHJhZ2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5kcmFnRW5kLmVtaXQoKX0pKCJkcmFnZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZHJhZ0VudGVyLmVtaXQoaS5oZWFkZXIpfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhlYWRlckNsaWNrZWRIYW5kbGVyKCl9KSxqKDEsImFzeW5jIiksenQoMiksUCgzLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMSksUyg0LGpOZSwzLDIsImJ1dHRvbiIsMiksUyg1LEdOZSwyLDAsImJ1dHRvbiIsMyksZygpKSwyJmUmJihfKCJkcmFnZ2FibGUiLGkuaGVhZGVyLm1vdmFibGUpKCJuZ0NsYXNzIixXKDEsNSxpLmhpZ2hsaWdodFN0eWxlJCkpLHYoMyksXygiaGVhZGVyIixpLmhlYWRlciksdigxKSxfKCJuZ0lmIixpLmhlYWRlci5zb3J0YWJsZSksdigxKSxfKCJuZ0lmIiwoaS5oZWFkZXIucmVtb3ZhYmxlfHxpLmhlYWRlci5zb3J0YWJsZSkmJiFpLmRpc2FibGVDb250ZXh0TWVudSkpfSxkZXBlbmRlbmNpZXM6W3luLEZlLEVuLCRpLHpULGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtY2VsbDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219W19uZ2hvc3QtJUNPTVAlXTpob3ZlciAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi4zfVtfbmdob3N0LSVDT01QJV0gICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3BhY2l0eToxfVtfbmdob3N0LSVDT01QJV0gICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3BhY2l0eToxfS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjF9LmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbi5zb3J0aW5nLWljb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0ubWF0LW1kYy1pY29uLWJ1dHRvbi5jb250ZXh0LW1lbnUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNnB4O2hlaWdodDoxNnB4Oy0tdGItaWNvbi1zaXplOiAxMnB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NHB4fS5jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zb3J0aW5nLWljb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgcGF0aHtmaWxsOnVuc2V0fS5zaG93W19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9LnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uaGlnaGxpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LmhpZ2hsaWdodC1ib3JkZXItcmlnaHRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmOTgwMH0uaGlnaGxpZ2h0LWJvcmRlci1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoycHggc29saWQgI2ZmOTgwMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFOZT1bImNvbnRlbnQiXTtmdW5jdGlvbiBZTmUobix0KXsxJm4mJihPdCgwKSx6dCgxKSxrdCgpKX12YXIgWE5lPVsiKiJdLFJ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudmlld1JlZj1lLHRoaXMub25PcGVuPW5ldyBGLHRoaXMub25DbG9zZT1uZXcgRix0aGlzLnZpc2libGUkPW5ldyBBaSghMSksdGhpcy5jYW5DbG9zZT0hMCx0aGlzLmNsaWNrTGlzdGVuZXI9dGhpcy5tYXliZUNsb3NlLmJpbmQodGhpcyl9bmdPbkluaXQoKXt0aGlzLnZpc2libGUkLnN1YnNjcmliZShlPT57d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY2FuQ2xvc2U9ITAsZT8odGhpcy5lbnN1cmVDb250ZW50SXNXaXRoaW5XaW5kb3coKSx0aGlzLm9uT3Blbi5lbWl0KCkpOnRoaXMub25DbG9zZS5lbWl0KCl9KX0pfW9wZW5BdFBvc2l0aW9uKGUpe2xldCBpPXRoaXMudmlld1JlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQscj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDswIT09ciYmKGkuc3R5bGUudG9wPS0xKnIraS5vZmZzZXRUb3ArInB4IiksdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdD1lLngrInB4Iix0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5zdHlsZS50b3A9ZS55KyJweCIsdGhpcy5jYW5DbG9zZT0hMSx0aGlzLnZpc2libGUkLm5leHQoITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsaWNrTGlzdGVuZXIpfWVuc3VyZUNvbnRlbnRJc1dpdGhpbldpbmRvdygpe2lmKCF0aGlzLmNvbnRlbnQpcmV0dXJuO2xldCBlPXRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UubGVmdDwwJiYodGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdD0wKSxlLmxlZnQrZS53aWR0aD53aW5kb3cuaW5uZXJXaWR0aCYmKHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQ9d2luZG93LmlubmVyV2lkdGgtZS53aWR0aCsicHgiKSxlLnRvcDwwJiYodGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wPTApLGUudG9wK2UuaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodCYmKHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcD13aW5kb3cuaW5uZXJIZWlnaHQtZS5oZWlnaHQrInB4Iil9bWF5YmVDbG9zZSgpeyF0aGlzLmNhbkNsb3NlfHx0aGlzLmNsb3NlKCl9Y2xvc2UoKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbGlja0xpc3RlbmVyKSx0aGlzLnZpc2libGUkLm5leHQoITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKHNpKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siY3VzdG9tLW1vZGFsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UocU5lLDUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuY29udGVudD1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgia2V5ZG93bi5lc2NhcGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm1heWJlQ2xvc2Uobyl9LDAsaGMpfSxvdXRwdXRzOntvbk9wZW46Im9uT3BlbiIsb25DbG9zZToib25DbG9zZSJ9LG5nQ29udGVudFNlbGVjdG9yczpYTmUsZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMSwiY29udGVudCIsMywiY2xpY2siXSxbImNvbnRlbnQiLCIiXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKCksaCgwLCJkaXYiLDAsMSksSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBvLnN0b3BQcm9wYWdhdGlvbigpfSksUygyLFlOZSwyLDAsIm5nLWNvbnRhaW5lciIsMiksaigzLCJhc3luYyIpLGcoKSksMiZlJiYodigyKSxfKCJuZ0lmIixXKDMsMSxpLnZpc2libGUkKSkpfSxkZXBlbmRlbmNpZXM6W0ZlLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB6LWluZGV4OiA5MDAxO1xuICAgICAgfVxuXG4gICAgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB9Il19KSxufSkoKSxaTmU9WyJzZWFyY2giXSxLTmU9WyJjb2x1bW5MaXN0Il0sSk5lPWZ1bmN0aW9uKG4pe3JldHVybntzZWxlY3RlZDpufX07ZnVuY3Rpb24gJE5lKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiw4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkuc2VsZWN0Q29sdW1uKG8pKX0pLGooMSwiYXN5bmMiKSxUKDIpLGcoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXcoKTtfKCJuZ0NsYXNzIixJbig0LEpOZSxpPT09VygxLDIsci5zZWxlY3RlZEluZGV4JCkpKSx2KDIpLEhlKCIgIixlLmRpc3BsYXlOYW1lLCIgIil9fXZhciBhQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RhYmxlQ29sdW1ucz1bXSx0aGlzLmNvbHVtblNlbGVjdGVkPW5ldyBGLHRoaXMuc2VhcmNoSW5wdXQ9IiIsdGhpcy5zZWxlY3RlZEluZGV4JD1uZXcgQWkoMCksdGhpcy5pc0FjdGl2ZT0hMX1uZ09uSW5pdCgpe3RoaXMuc2VsZWN0ZWRJbmRleCQuc3Vic2NyaWJlKCgpPT57aWYoIXRoaXMuY29sdW1uTGlzdClyZXR1cm47bGV0IGU9dGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiYnV0dG9uLnNlbGVjdGVkIik7aWYoIWUpcmV0dXJuO2xldCBpPXRoaXMuY29sdW1uTGlzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LG89dGhpcy5jb2x1bW5MaXN0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO3RoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSpyPG8mJih0aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpKnIpLCh0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCkrMSkqcj5vK2kmJih0aGlzLmNvbHVtbkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9KHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSsxKSpyLWkpfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zZWFyY2hJbnB1dD0iIix0aGlzLnNlYXJjaEZpZWxkLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoMCl9Zm9jdXMoKXt0aGlzLnNlYXJjaEZpZWxkPy5uYXRpdmVFbGVtZW50LmZvY3VzKCl9Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMuZmlsdGVyKGU9PmUubmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKHRoaXMuc2VhcmNoSW5wdXQudG9Mb3dlckNhc2UoKSl8fGUuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCh0aGlzLnNlYXJjaElucHV0LnRvTG93ZXJDYXNlKCkpKX1zZWFyY2hJbnB1dENoYW5nZWQoKXt0aGlzLnNlbGVjdGVkSW5kZXgkLm5leHQoTWF0aC5taW4odGhpcy5zZWxlY3RlZEluZGV4JC5nZXRWYWx1ZSgpLHRoaXMuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoLTEpKX1zZWxlY3RDb2x1bW4oZSl7dGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KDApLHRoaXMuY29sdW1uU2VsZWN0ZWQuZW1pdChlKX1hY3RpdmF0ZSgpe3RoaXMuaXNBY3RpdmU9ITB9ZGVhY3RpdmF0ZSgpe3RoaXMuaXNBY3RpdmU9ITF9b25VcEFycm93KCl7IXRoaXMuaXNBY3RpdmV8fHRoaXMuc2VsZWN0ZWRJbmRleCQubmV4dChNYXRoLm1heCh0aGlzLnNlbGVjdGVkSW5kZXgkLmdldFZhbHVlKCktMSwwKSl9b25Eb3duQXJyb3coKXshdGhpcy5pc0FjdGl2ZXx8dGhpcy5zZWxlY3RlZEluZGV4JC5uZXh0KE1hdGgubWluKHRoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKSsxLHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RoLTEpKX1vbkVudGVyUHJlc3NlZCgpeyF0aGlzLmlzQWN0aXZlfHx0aGlzLnNlbGVjdENvbHVtbih0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpW3RoaXMuc2VsZWN0ZWRJbmRleCQuZ2V0VmFsdWUoKV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWNvbHVtbi1zZWxlY3Rvci1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoWk5lLDUpLEdlKEtOZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5zZWFyY2hGaWVsZD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5jb2x1bW5MaXN0PXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJrZXlkb3duLmFycm93dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVXBBcnJvdyhvKX0sMCxoYykoImtleWRvd24uYXJyb3dkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkRvd25BcnJvdyhvKX0sITEsaGMpKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkVudGVyUHJlc3NlZChvKX0sITEsaGMpfSxpbnB1dHM6e3NlbGVjdGFibGVDb2x1bW5zOiJzZWxlY3RhYmxlQ29sdW1ucyJ9LG91dHB1dHM6e2NvbHVtblNlbGVjdGVkOiJjb2x1bW5TZWxlY3RlZCJ9LGRlY2xzOjEwLHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50cyJdLFsxLCJzZWFyY2gtYXJlYSJdLFsibWF0UHJlZml4IiwiIiwic3ZnSWNvbiIsInNlYXJjaF8yNHB4IiwxLCJzZWFyY2gtaWNvbiJdLFsibWF0SW5wdXQiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJzZWFyY2giLCIiXSxbMSwiY29sdW1uLWxpc3QiXSxbImNvbHVtbkxpc3QiLCIiXSxbIm1hdC1idXR0b24iLCIiLCJjbGFzcyIsImNvbHVtbi1idXR0b24iLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJjb2x1bW4tYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCkoMSwibWF0LWZvcm0tZmllbGQiLDEpLFAoMiwibWF0LWljb24iLDIpLGgoMywibWF0LWxhYmVsIiksVCg0LCJTZWFyY2giKSxnKCksaCg1LCJpbnB1dCIsMyw0KSxJKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWFyY2hJbnB1dD1vfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2VhcmNoSW5wdXRDaGFuZ2VkKCl9KSxnKCkoKSxoKDcsImRpdiIsNSw2KSxTKDksJE5lLDMsNiwiYnV0dG9uIiw3KSxnKCkoKSksMiZlJiYodig1KSxfKCJuZ01vZGVsIixpLnNlYXJjaElucHV0KSx2KDQpLF8oIm5nRm9yT2YiLGkuZ2V0RmlsdGVyZWRDb2x1bW5zKCkpKX0sZGVwZW5kZW5jaWVzOlt5bixubixFbixVdSxLYSxrYyxTOSxKaSxiZyxjRSxxMixjdF0sc3R5bGVzOlsiLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZzo4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWFyY2gtYXJlYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTo0cHh9LmNvbnRlbnRzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tbGlzdFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO21heC1oZWlnaHQ6MzAwcHg7b3ZlcmZsb3cteTphdXRvfS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1zaHJpbms6MDtoZWlnaHQ6NDhweDtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDt3aWR0aDoxMDAlfS5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50c1tfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWJ1dHRvbi5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdExlPVsicGFuZWwiXTtmdW5jdGlvbiBuTGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMCwxKSx6dCgyKSxnKCkpLDImbil7bGV0IGU9dC5pZCxpPXcoKTtfKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCkoIkBwYW5lbEFuaW1hdGlvbiIsaS5pc09wZW4/InZpc2libGUiOiJoaWRkZW4iKSxCZSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSkpfX12YXIgaUxlPVsiKiJdLHJMZT1fcigicGFuZWxBbmltYXRpb24iLFt3aSgidm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGVZKDAuOCkifSkpLGdpKCI6ZW50ZXIsIGhpZGRlbiA9PiB2aXNpYmxlIixbT2IoW0NpKCIwLjAzcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjF9KSksQ2koIjAuMTJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7dHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpXSldKSxnaSgiOmxlYXZlLCB2aXNpYmxlID0+IGhpZGRlbiIsW0NpKCIwLjA3NXMgbGluZWFyIixybih7b3BhY2l0eTowfSkpXSldKSxvTGU9MCxzTGU9dXMoY2xhc3N7fSksUHRlPW5ldyBpZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ITF9fX0pLGxMZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgc0xle2dldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1fc2V0Q29sb3IoZSl7dGhpcy5fY29sb3I9ZSx0aGlzLl9zZXRUaGVtZUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KX1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKGUpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1SdChlKX1nZXQgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufXNldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKGUpe3RoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249UnQoZSl9c2V0IGNsYXNzTGlzdChlKXt0aGlzLl9jbGFzc0xpc3Q9ZSYmZS5sZW5ndGg/ZnVuY3Rpb24obix0PS9ccysvKXtsZXQgZT1bXTtpZihudWxsIT1uKXtsZXQgaT1BcnJheS5pc0FycmF5KG4pP246YCR7bn1gLnNwbGl0KHQpO2ZvcihsZXQgciBvZiBpKXtsZXQgbz1gJHtyfWAudHJpbSgpO28mJmUucHVzaChvKX19cmV0dXJuIGV9KGUpLnJlZHVjZSgoaSxyKT0+KGlbcl09ITAsaSkse30pOnt9LHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fc2V0VGhlbWVDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIn1jb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RlZmF1bHRzPXIsdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcz1Nbi5FTVBUWSx0aGlzLnNob3dQYW5lbD0hMSx0aGlzLl9pc09wZW49ITEsdGhpcy5kaXNwbGF5V2l0aD1udWxsLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXRoaXMuX2RlZmF1bHRzLmF1dG9BY3RpdmVGaXJzdE9wdGlvbix0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9uPSEhdGhpcy5fZGVmYXVsdHMuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbix0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBGLHRoaXMub3BlbmVkPW5ldyBGLHRoaXMuY2xvc2VkPW5ldyBGLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBGLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrb0xlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IG9nKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCksdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpfV9zZXRTY3JvbGxUb3AoZSl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9ZSl9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLnBhbmVsP3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A6MH1fc2V0VmlzaWJpbGl0eSgpe3RoaXMuc2hvd1BhbmVsPSEhdGhpcy5vcHRpb25zLmxlbmd0aCx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9lbWl0U2VsZWN0RXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfX0odGhpcyxlKTt0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoaSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSl7cmV0dXJuIHRoaXMuYXJpYUxhYmVsP251bGw6dGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9zZXRWaXNpYmlsaXR5Q2xhc3NlcyhlKXtlW3RoaXMuX3Zpc2libGVDbGFzc109dGhpcy5zaG93UGFuZWwsZVt0aGlzLl9oaWRkZW5DbGFzc109IXRoaXMuc2hvd1BhbmVsfV9zZXRUaGVtZUNsYXNzZXMoZSl7ZVsibWF0LXByaW1hcnkiXT0icHJpbWFyeSI9PT10aGlzLl9jb2xvcixlWyJtYXQtd2FybiJdPSJ3YXJuIj09PXRoaXMuX2NvbG9yLGVbIm1hdC1hY2NlbnQiXT0iYWNjZW50Ij09PXRoaXMuX2NvbG9yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0KSxDKE1lKSxDKFB0ZSksQyhHbikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEdlKFNpLDcpLEdlKHRMZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS50ZW1wbGF0ZT1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjoiYXV0b0FjdGl2ZUZpcnN0T3B0aW9uIixhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiJhdXRvU2VsZWN0QWN0aXZlT3B0aW9uIixwYW5lbFdpZHRoOiJwYW5lbFdpZHRoIixjbGFzc0xpc3Q6WyJjbGFzcyIsImNsYXNzTGlzdCJdfSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbS2VdfSksbn0pKCksT3RlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsTGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Zpc2libGVDbGFzcz0ibWF0LW1kYy1hdXRvY29tcGxldGUtdmlzaWJsZSIsdGhpcy5faGlkZGVuQ2xhc3M9Im1hdC1tZGMtYXV0b2NvbXBsZXRlLWhpZGRlbiIsdGhpcy5faGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcj10aGlzLl9kZWZhdWx0cy5oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yPz8hMX1nZXQgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvcigpe3JldHVybiB0aGlzLl9oaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yfXNldCBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yKGUpe3RoaXMuX2hpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I9UnQoZSksdGhpcy5fc3luY1BhcmVudFByb3BlcnRpZXMoKX1fc3luY1BhcmVudFByb3BlcnRpZXMoKXtpZih0aGlzLm9wdGlvbnMpZm9yKGxldCBlIG9mIHRoaXMub3B0aW9ucyllLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1YbihuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1hdXRvY29tcGxldGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsVXYsNSksVGkocixVcyw1KSksMiZlKXtsZXQgbztTZShvPUVlKCkpJiYoaS5vcHRpb25Hcm91cHM9byksU2Uobz1FZSgpKSYmKGkub3B0aW9ucz1vKX19LGhvc3RBdHRyczpbMSwibWF0LW1kYy1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3I6ImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOltRdChbe3Byb3ZpZGU6enYsdXNlRXhpc3Rpbmc6bn1dKSxLZV0sbmdDb250ZW50U2VsZWN0b3JzOmlMZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsIiwibWRjLW1lbnUtc3VyZmFjZSIsIm1kYy1tZW51LXN1cmZhY2UtLW9wZW4iLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihEbigpLFMoMCxuTGUsMyw1LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOlt5bl0sc3R5bGVzOlsiLm1kYy1tZW51LXN1cmZhY2V7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXgtd2lkdGg6Y2FsYygxMDB2dyAtIDMycHgpO21heC13aWR0aDp2YXIoLS1tZGMtbWVudS1tYXgtd2lkdGgsIGNhbGMoMTAwdncgLSAzMnB4KSk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gMzJweCk7bWF4LWhlaWdodDp2YXIoLS1tZGMtbWVudS1tYXgtaGVpZ2h0LCBjYWxjKDEwMHZoIC0gMzJweCkpO21hcmdpbjowO3BhZGRpbmc6MDt0cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDtvcGFjaXR5OjA7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eTt6LWluZGV4Ojg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1tZGMtc2hhcGUtbWVkaXVtLCA0cHgpO3RyYW5zZm9ybS1vcmlnaW4tbGVmdDp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCByaWdodH0ubWRjLW1lbnUtc3VyZmFjZTpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UtLWFuaW1hdGluZy1vcGVue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTpzY2FsZSgwLjgpO29wYWNpdHk6MH0ubWRjLW1lbnUtc3VyZmFjZS0tb3BlbntkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tZGMtbWVudS1zdXJmYWNlLS1hbmltYXRpbmctY2xvc2Vke2Rpc3BsYXk6aW5saW5lLWJsb2NrO29wYWNpdHk6MH1bZGlyPXJ0bF0gLm1kYy1tZW51LXN1cmZhY2UsLm1kYy1tZW51LXN1cmZhY2VbZGlyPXJ0bF17dHJhbnNmb3JtLW9yaWdpbi1sZWZ0OnRvcCByaWdodDt0cmFuc2Zvcm0tb3JpZ2luLXJpZ2h0OnRvcCBsZWZ0fS5tZGMtbWVudS1zdXJmYWNlLS1hbmNob3J7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS0tZml4ZWR7cG9zaXRpb246Zml4ZWR9Lm1kYy1tZW51LXN1cmZhY2UtLWZ1bGx3aWR0aHt3aWR0aDoxMDAlfS5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVse3dpZHRoOjEwMCU7bWF4LWhlaWdodDoyNTZweDtwb3NpdGlvbjpzdGF0aWM7dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wO21hcmdpbjowO3BhZGRpbmc6OHB4IDA7bGlzdC1zdHlsZS10eXBlOm5vbmV9Lm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWw6Zm9jdXN7b3V0bGluZTpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1vdmVybGF5LXBhbmU6bm90KC5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSkgLm1kYy1tZW51LXN1cmZhY2UubWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9Lm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVsLWFib3ZlIC5tZGMtbWVudS1zdXJmYWNlLm1hdC1tZGMtYXV0b2NvbXBsZXRlLXBhbmVse2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbX0ubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtbWRjLWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWRjLW1lbnUtc3VyZmFjZS5tYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtbWRjLWF1dG9jb21wbGV0ZS1oaWRkZW57dmlzaWJpbGl0eTpoaWRkZW59bWF0LWF1dG9jb21wbGV0ZXtkaXNwbGF5Om5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbckxlXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxjTGU9e3Byb3ZpZGU6TW8sdXNlRXhpc3Rpbmc6JG4oKCk9Pkt4KSxtdWx0aTohMH0sa3RlPW5ldyBpZSgibWF0LWF1dG9jb21wbGV0ZS1zY3JvbGwtc3RyYXRlZ3kiKSx1TGU9e3Byb3ZpZGU6a3RlLGRlcHM6W3ppXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0scExlPSgoKT0+e2NsYXNzIG57Z2V0IGF1dG9jb21wbGV0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfXNldCBhdXRvY29tcGxldGVEaXNhYmxlZChlKXt0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZD1SdChlKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsZCx1LHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PWQsdGhpcy5fdmlld3BvcnRSdWxlcj11LHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj1Nbi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcgSWUsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9dGEoKCk9PntsZXQgZj10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGY/Zi5jaGFuZ2VzLnBpcGUocW4oZiksSm4oKCk9PnRuKC4uLmYubWFwKG09Pm0ub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShZdCgxKSxKbigoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfW5nQWZ0ZXJWaWV3SW5pdCgpe2xldCBlPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBlPCJ1IiYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+ZS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVySGFuZGxlcikpfW5nT25DaGFuZ2VzKGUpe2UucG9zaXRpb24mJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9zZXRTdHJhdGVneVBvc2l0aW9ucyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5KSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBlPCJ1IiYmZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVySGFuZGxlciksdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jb21wb25lbnREZXN0cm95ZWQ9ITAsdGhpcy5fZGVzdHJveVBhbmVsKCksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbS5jb21wbGV0ZSgpfWdldCBwYW5lbE9wZW4oKXtyZXR1cm4gdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZ0aGlzLmF1dG9jb21wbGV0ZS5zaG93UGFuZWx9b3BlblBhbmVsKCl7dGhpcy5fYXR0YWNoT3ZlcmxheSgpLHRoaXMuX2Zsb2F0TGFiZWwoKX1jbG9zZVBhbmVsKCl7dGhpcy5fcmVzZXRMYWJlbCgpLHRoaXMuX292ZXJsYXlBdHRhY2hlZCYmKHRoaXMucGFuZWxPcGVuJiZ0aGlzLl96b25lLnJ1bigoKT0+e3RoaXMuYXV0b2NvbXBsZXRlLmNsb3NlZC5lbWl0KCl9KSx0aGlzLmF1dG9jb21wbGV0ZS5faXNPcGVuPXRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPW51bGwsdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiYodGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKSx0aGlzLl9jb21wb25lbnREZXN0cm95ZWR8fHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlUG9zaXRpb24oKXt0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX1nZXQgcGFuZWxDbG9zaW5nQWN0aW9ucygpe3JldHVybiB0bih0aGlzLm9wdGlvblNlbGVjdGlvbnMsdGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoa2UoKCk9PnRoaXMuX292ZXJsYXlBdHRhY2hlZCkpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0sdGhpcy5fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCksdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShrZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSk6SHQoKSkucGlwZShOKGU9PmUgaW5zdGFuY2VvZiBIdj9lOm51bGwpKX1nZXQgYWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuYXV0b2NvbXBsZXRlJiZ0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlcj90aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci5hY3RpdmVJdGVtOm51bGx9X2dldE91dHNpZGVDbGlja1N0cmVhbSgpe3JldHVybiB0bihtaSh0aGlzLl9kb2N1bWVudCwiY2xpY2siKSxtaSh0aGlzLl9kb2N1bWVudCwiYXV4Y2xpY2siKSxtaSh0aGlzLl9kb2N1bWVudCwidG91Y2hlbmQiKSkucGlwZShrZShlPT57bGV0IGk9bWEoZSkscj10aGlzLl9mb3JtRmllbGQ/dGhpcy5fZm9ybUZpZWxkLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbCxvPXRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtyZXR1cm4gdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiZpIT09dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50JiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50JiYoIXJ8fCFyLmNvbnRhaW5zKGkpKSYmKCFvfHwhby5jb250YWlucyhpKSkmJiEhdGhpcy5fb3ZlcmxheVJlZiYmIXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoaSl9KSl9d3JpdGVWYWx1ZShlKXtQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+dGhpcy5fYXNzaWduT3B0aW9uVmFsdWUoZSkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5kaXNhYmxlZD1lfV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZSxyPXZyKGUpO2lmKDI3PT09aSYmIXImJmUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZU9wdGlvbiYmMTM9PT1pJiZ0aGlzLnBhbmVsT3BlbiYmIXIpdGhpcy5hY3RpdmVPcHRpb24uX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdGhpcy5fcmVzZXRBY3RpdmVJdGVtKCksZS5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYodGhpcy5hdXRvY29tcGxldGUpe2xldCBvPXRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0scz0zOD09PWl8fDQwPT09aTs5PT09aXx8cyYmIXImJnRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLm9uS2V5ZG93bihlKTpzJiZ0aGlzLl9jYW5PcGVuKCkmJnRoaXMub3BlblBhbmVsKCksKHN8fHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0hPT1vKSYmKHRoaXMuX3Njcm9sbFRvT3B0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCksdGhpcy5hdXRvY29tcGxldGUuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbiYmdGhpcy5hY3RpdmVPcHRpb24mJih0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9ufHwodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj10aGlzLmFjdGl2ZU9wdGlvbix0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZSh0aGlzLmFjdGl2ZU9wdGlvbi52YWx1ZSkpKX19X2hhbmRsZUlucHV0KGUpe2xldCBpPWUudGFyZ2V0LHI9aS52YWx1ZTsibnVtYmVyIj09PWkudHlwZSYmKHI9IiI9PXI/bnVsbDpwYXJzZUZsb2F0KHIpKSx0aGlzLl9wcmV2aW91c1ZhbHVlIT09ciYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9cix0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPW51bGwsdGhpcy5fb25DaGFuZ2UociksdGhpcy5fY2FuT3BlbigpJiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZS50YXJnZXQmJnRoaXMub3BlblBhbmVsKCkpfV9oYW5kbGVGb2N1cygpe3RoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz90aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wcmV2aW91c1ZhbHVlPXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSx0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCghMCkpOnRoaXMuX2Nhbk9wZW5Pbk5leHRGb2N1cz0hMH1faGFuZGxlQ2xpY2soKXt0aGlzLl9jYW5PcGVuKCkmJiF0aGlzLnBhbmVsT3BlbiYmdGhpcy5vcGVuUGFuZWwoKX1fZmxvYXRMYWJlbChlPSExKXt0aGlzLl9mb3JtRmllbGQmJiJhdXRvIj09PXRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsJiYoZT90aGlzLl9mb3JtRmllbGQuX2FuaW1hdGVBbmRMb2NrTGFiZWwoKTp0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITApfV9yZXNldExhYmVsKCl7dGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsJiYodGhpcy5fZm9ybUZpZWxkJiYodGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWw9ImF1dG8iKSx0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWw9ITEpfV9zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHRuKHRoaXMuX3pvbmUub25TdGFibGUucGlwZShZdCgxKSksdGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5jaGFuZ2VzLnBpcGUoTnQoKCk9PnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpKSxTYSgwKSkpLnBpcGUoSm4oKCk9Pih0aGlzLl96b25lLnJ1bigoKT0+e2xldCByPXRoaXMucGFuZWxPcGVuO3RoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9zZXRWaXNpYmlsaXR5KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksciE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUub3BlbmVkLmVtaXQoKTp0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQuZW1pdCgpKX0pLHRoaXMucGFuZWxDbG9zaW5nQWN0aW9ucykpLFl0KDEpKS5zdWJzY3JpYmUocj0+dGhpcy5fc2V0VmFsdWVBbmRDbG9zZShyKSl9X2Rlc3Ryb3lQYW5lbCgpe3RoaXMuX292ZXJsYXlSZWYmJih0aGlzLmNsb3NlUGFuZWwoKSx0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vdmVybGF5UmVmPW51bGwpfV9hc3NpZ25PcHRpb25WYWx1ZShlKXtsZXQgaT10aGlzLmF1dG9jb21wbGV0ZSYmdGhpcy5hdXRvY29tcGxldGUuZGlzcGxheVdpdGg/dGhpcy5hdXRvY29tcGxldGUuZGlzcGxheVdpdGgoZSk6ZTt0aGlzLl91cGRhdGVOYXRpdmVJbnB1dFZhbHVlKGk/PyIiKX1fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShlKXt0aGlzLl9mb3JtRmllbGQ/dGhpcy5fZm9ybUZpZWxkLl9jb250cm9sLnZhbHVlPWU6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPWUsdGhpcy5fcHJldmlvdXNWYWx1ZT1lfV9zZXRWYWx1ZUFuZENsb3NlKGUpe2xldCBpPWU/ZS5zb3VyY2U6dGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbjtpJiYodGhpcy5fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGkpLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKGkudmFsdWUpLHRoaXMuX29uQ2hhbmdlKGkudmFsdWUpLHRoaXMuYXV0b2NvbXBsZXRlLl9lbWl0U2VsZWN0RXZlbnQoaSksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpLHRoaXMuY2xvc2VQYW5lbCgpfV9jbGVhclByZXZpb3VzU2VsZWN0ZWRPcHRpb24oZSl7dGhpcy5hdXRvY29tcGxldGUub3B0aW9ucy5mb3JFYWNoKGk9PntpIT09ZSYmaS5zZWxlY3RlZCYmaS5kZXNlbGVjdCgpfSl9X2F0dGFjaE92ZXJsYXkoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmO2U/KHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKHRoaXMuX2dldENvbm5lY3RlZEVsZW1lbnQoKSksZS51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCl9KSk6KHRoaXMuX3BvcnRhbD1uZXcgWW8odGhpcy5hdXRvY29tcGxldGUudGVtcGxhdGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZix7aWQ6dGhpcy5fZm9ybUZpZWxkPy5nZXRMYWJlbElkKCl9KSxlPXRoaXMuX292ZXJsYXkuY3JlYXRlKHRoaXMuX2dldE92ZXJsYXlDb25maWcoKSksdGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2hhbmRsZU92ZXJsYXlFdmVudHMoZSksdGhpcy5fdmlld3BvcnRTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmZSYmZS51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl9nZXRQYW5lbFdpZHRoKCl9KX0pKSxlJiYhZS5oYXNBdHRhY2hlZCgpJiYoZS5hdHRhY2godGhpcy5fcG9ydGFsKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj10aGlzLl9zdWJzY3JpYmVUb0Nsb3NpbmdBY3Rpb25zKCkpO2xldCBpPXRoaXMucGFuZWxPcGVuO3RoaXMuYXV0b2NvbXBsZXRlLl9zZXRWaXNpYmlsaXR5KCksdGhpcy5hdXRvY29tcGxldGUuX2lzT3Blbj10aGlzLl9vdmVybGF5QXR0YWNoZWQ9ITAsdGhpcy5hdXRvY29tcGxldGUuX3NldENvbG9yKHRoaXMuX2Zvcm1GaWVsZD8uY29sb3IpLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IFFhKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXI/P3ZvaWQgMCxwYW5lbENsYXNzOnRoaXMuX2RlZmF1bHRzPy5vdmVybGF5UGFuZWxDbGFzc30pfV9nZXRPdmVybGF5UG9zaXRpb24oKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhQdXNoKCExKTtyZXR1cm4gdGhpcy5fc2V0U3RyYXRlZ3lQb3NpdGlvbnMoZSksdGhpcy5fcG9zaXRpb25TdHJhdGVneT1lLGV9X3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpe2xldCBzLGk9W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJ0b3AifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0scj10aGlzLl9hYm92ZUNsYXNzLG89W3tvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20iLHBhbmVsQ2xhc3M6cn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9XTtzPSJhYm92ZSI9PT10aGlzLnBvc2l0aW9uP286ImJlbG93Ij09PXRoaXMucG9zaXRpb24/aTpbLi4uaSwuLi5vXSxlLndpdGhQb3NpdGlvbnMocyl9X2dldENvbm5lY3RlZEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWY6dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCk6dGhpcy5fZWxlbWVudH1fZ2V0UGFuZWxXaWR0aCgpe3JldHVybiB0aGlzLmF1dG9jb21wbGV0ZS5wYW5lbFdpZHRofHx0aGlzLl9nZXRIb3N0V2lkdGgoKX1fZ2V0SG9zdFdpZHRoKCl7cmV0dXJuIHRoaXMuX2dldENvbm5lY3RlZEVsZW1lbnQoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofV9yZXNldEFjdGl2ZUl0ZW0oKXtsZXQgZT10aGlzLmF1dG9jb21wbGV0ZTtlLmF1dG9BY3RpdmVGaXJzdE9wdGlvbj9lLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOmUuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9X2Nhbk9wZW4oKXtsZXQgZT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIWUucmVhZE9ubHkmJiFlLmRpc2FibGVkJiYhdGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudD8uZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsVG9PcHRpb24oZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUscj16MShlLGkub3B0aW9ucyxpLm9wdGlvbkdyb3Vwcyk7aWYoMD09PWUmJjE9PT1yKWkuX3NldFNjcm9sbFRvcCgwKTtlbHNlIGlmKGkucGFuZWwpe2xldCBvPWkub3B0aW9ucy50b0FycmF5KClbZV07aWYobyl7bGV0IHM9by5fZ2V0SG9zdEVsZW1lbnQoKSxhPVUxKHMub2Zmc2V0VG9wLHMub2Zmc2V0SGVpZ2h0LGkuX2dldFNjcm9sbFRvcCgpLGkucGFuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpO2kuX3NldFNjcm9sbFRvcChhKX19fV9oYW5kbGVPdmVybGF5RXZlbnRzKGUpe2Uua2V5ZG93bkV2ZW50cygpLnN1YnNjcmliZShpPT57KDI3PT09aS5rZXlDb2RlJiYhdnIoaSl8fDM4PT09aS5rZXlDb2RlJiZ2cihpLCJhbHRLZXkiKSkmJih0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uJiYodGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZSh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb24/PyIiKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPW51bGwpLHRoaXMuX2Nsb3NlS2V5RXZlbnRTdHJlYW0ubmV4dCgpLHRoaXMuX3Jlc2V0QWN0aXZlSXRlbSgpLGkuc3RvcFByb3BhZ2F0aW9uKCksaS5wcmV2ZW50RGVmYXVsdCgpKX0pLGUub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSksQyh6aSksQyhzaSksQyhhdCksQygkdCksQyhrdGUpLEMoWGksOCksQyhTZiw5KSxDKEx0LDgpLEMoanMpLEMoUHRlLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixpbnB1dHM6e2F1dG9jb21wbGV0ZTpbIm1hdEF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZSJdLHBvc2l0aW9uOlsibWF0QXV0b2NvbXBsZXRlUG9zaXRpb24iLCJwb3NpdGlvbiJdLGNvbm5lY3RlZFRvOlsibWF0QXV0b2NvbXBsZXRlQ29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTpbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZUF0dHJpYnV0ZSJdLGF1dG9jb21wbGV0ZURpc2FibGVkOlsibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJhdXRvY29tcGxldGVEaXNhYmxlZCJdfSxmZWF0dXJlczpbR3RdfSksbn0pKCksS3g9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBMZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fYWJvdmVDbGFzcz0ibWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtYXV0b2NvbXBsZXRlLXRyaWdnZXIiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgiZm9jdXNpbiIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vblRvdWNoZWQoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUlucHV0KG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVDbGljaygpfSksMiZlJiZCZSgiYXV0b2NvbXBsZXRlIixpLmF1dG9jb21wbGV0ZUF0dHJpYnV0ZSkoInJvbGUiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoiY29tYm9ib3giKSgiYXJpYS1hdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoibGlzdCIpKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLGkucGFuZWxPcGVuJiZpLmFjdGl2ZU9wdGlvbj9pLmFjdGl2ZU9wdGlvbi5pZDpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOmkucGFuZWxPcGVuLnRvU3RyaW5nKCkpKCJhcmlhLW93bnMiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWR8fCFpLnBhbmVsT3Blbnx8bnVsbD09aS5hdXRvY29tcGxldGU/bnVsbDppLmF1dG9jb21wbGV0ZS5pZCkoImFyaWEtaGFzcG9wdXAiLGkuYXV0b2NvbXBsZXRlRGlzYWJsZWQ/bnVsbDoibGlzdGJveCIpfSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXIiXSxmZWF0dXJlczpbUXQoW2NMZV0pLEtlXX0pLG59KSgpLGxBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3VMZV0saW1wb3J0czpbQ28sY2csZm4sUGUsUGMsY2csZm5dfSksbn0pKCksU3A9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIn1vbklucHV0S2V5VXAoZSl7IkVudGVyIj09PWUua2V5JiZ0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXIuY2xvc2VQYW5lbCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1maWx0ZXItaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShLeCw1KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLmF1dG9jb21wbGV0ZVRyaWdnZXI9ci5maXJzdCl9fSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsbWF0QXV0b2NvbXBsZXRlOiJtYXRBdXRvY29tcGxldGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJwbGFjZWhvbGRlciIsIm1hdEF1dG9jb21wbGV0ZSIsIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwidmFsdWUiLCJrZXl1cCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWF0LWljb24iLDApLGgoMSwiaW5wdXQiLDEpLEkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbklucHV0S2V5VXAobyl9KSxnKCkpLDImZSYmKHYoMSksXygicGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKCJtYXRBdXRvY29tcGxldGUiLGkubWF0QXV0b2NvbXBsZXRlKSgibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCFpLm1hdEF1dG9jb21wbGV0ZSkoInZhbHVlIixpLnZhbHVlKSl9LGRlcGVuZGVuY2llczpbS3gsRW5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxM3B4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yO2NvbG9yOmN1cnJlbnRDb2xvcjtmb250OmluaGVyaXQ7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lO3BhZGRpbmc6MDtmbGV4LWdyb3c6MX0iXX0pLG59KSgpLGZMZT1bImNvbnRhaW5lciJdO2Z1bmN0aW9uIG1MZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1zbGlkZXIiLDQpLEkoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2Uoci52YWx1ZSkpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oImRpc2FibGVkIiwhZS5lbmFibGVkKSgibWluIixlLm1pbikoIm1heCIsZS5tYXgpKCJzdGVwIiwxKSgidmFsdWUiLGUubG93ZXJWYWx1ZSl9fWZ1bmN0aW9uIGhMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iLDYsNyksUCgyLCJzcGFuIiw4KSgzLCJzcGFuIiw5KSxoKDQsInNwYW4iLDEwKSxJKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygyKTtyZXR1cm4gUShvLmhhbmRsZU1vdXNlRG93bihyLG8uUG9zaXRpb24uTEVGVCkpfSksZygpLGgoNSwic3BhbiIsMTApLEkoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDIpO3JldHVybiBRKG8uaGFuZGxlTW91c2VEb3duKHIsby5Qb3NpdGlvbi5SSUdIVCkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpO3YoMyksVHQoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLmxvd2VyVmFsdWUpKSgid2lkdGgiLGUuZ2V0VHJhY2tXaWR0aCgpKSx2KDEpLFR0KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSksbnQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uTEVGVCkpLHYoMSksVHQoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLnVwcGVyVmFsdWUpKSxudCgiYWN0aXZlIixlLmlzVGh1bWJBY3RpdmUoZS5Qb3NpdGlvbi5SSUdIVCkpfX1mdW5jdGlvbiBnTGUobix0KXtpZigxJm4mJlMoMCxoTGUsNiwxMiwic3BhbiIsNSksMiZuKXtsZXQgZT13KCk7XygibmdJZiIsZS5taW4hPT1lLm1heCl9fXZhciBsbD0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9ORT0wXT0iTk9ORSIsbltuLkxFRlQ9MV09IkxFRlQiLG5bbi5SSUdIVD0yXT0iUklHSFQifShsbHx8KGxsPXt9KSksbGwpKSgpLGRBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMudGlja0NvdW50PTIwLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnJldHVybkludGVnZXJzPSExLHRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkPW5ldyBGLHRoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkPW5ldyBGLHRoaXMuUG9zaXRpb249bGwsdGhpcy5hY3RpdmVUaHVtYj1sbC5OT05FLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTAsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZX1nZXRUaHVtYlBvc2l0aW9uKGUpe2xldCBpPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKGUpLHI9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIHI8PTA/IjUwJSI6KGktdGhpcy5taW4pL3IqMTAwKyIlIn1nZXRUcmFja1dpZHRoKCl7aWYobnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm4iMCUiO2xldCBlPXRoaXMubWF4LXRoaXMubWluO3JldHVybiBlPD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvZSoxMDArIiUifWdldENsaXBwZWRWYWx1ZShlKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe21pKGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VNb3ZlKGUpfSksbWkoZG9jdW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VPdXQoZSl9KX1oYW5kbGVNb3VzZURvd24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRodW1iPWksdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9Ni1lLm9mZnNldFh9Y2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKXtsZXQgYSx7bGVmdDppLHJpZ2h0OnJ9PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1lLmNsaWVudFgtaSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2xldCBjPShyLWkpL3RoaXMudGlja0NvdW50O2E9TWF0aC5yb3VuZChzL2MpKmMvKHItaSl9ZWxzZSBhPXMvKHItaSk7bGV0IGw9dGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSphKTtyZXR1cm4gdGhpcy5yZXR1cm5JbnRlZ2Vycz9NYXRoLnJvdW5kKGwpOk51bWJlcihsLnRvRml4ZWQoMTApKX1oYW5kbGVNb3VzZU1vdmUoZSl7aWYodGhpcy5hY3RpdmVUaHVtYj09PWxsLk5PTkV8fG51bGw9PT10aGlzLnVwcGVyVmFsdWUpcmV0dXJuO2xldCBpPXRoaXMuY2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKSxyPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09bGwuTEVGVD8oaT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPWxsLlJJR0hUKSxyPVtpLHRoaXMudXBwZXJWYWx1ZV0pOihpPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9bGwuTEVGVCkscj1bdGhpcy5sb3dlclZhbHVlLGldKSx0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKHIsIlNMSURFUiIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoZSxpKXtsZXRbcixvXT1lLnNvcnQoKHMsYSk9PnMtYSk7KHRoaXMubG93ZXJWYWx1ZSE9PXJ8fHRoaXMudXBwZXJWYWx1ZSE9PW8pJiZ0aGlzLnJhbmdlVmFsdWVzQ2hhbmdlZC5lbWl0KHtsb3dlclZhbHVlOnIsdXBwZXJWYWx1ZTpvLHNvdXJjZTppfSl9aGFuZGxlTW91c2VPdXQoZSl7dGhpcy5hY3RpdmVUaHVtYiE9PWxsLk5PTkUmJih0aGlzLmFjdGl2ZVRodW1iPWxsLk5PTkUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9aGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOmUsc291cmNlOiJTTElERVIifSl9aGFuZGxlSW5wdXRDaGFuZ2UoZSxpKXtsZXQgcj1lLnRhcmdldCxvPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKE51bWJlcihyLnZhbHVlKSk7aXNOYU4obyl8fChpPT09bGwuTEVGVD9udWxsPT09dGhpcy51cHBlclZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOm8sc291cmNlOiJURVhUIn0pOnRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoW28sdGhpcy51cHBlclZhbHVlXSwiVEVYVCIpOiIiPT09ci52YWx1ZT90aGlzLnNpbmdsZVZhbHVlQ2hhbmdlZC5lbWl0KHt2YWx1ZTp0aGlzLmxvd2VyVmFsdWUsc291cmNlOiJURVhUX0RFTEVURUQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbdGhpcy5sb3dlclZhbHVlLG9dLCJURVhUIikpfWlzVGh1bWJBY3RpdmUoZSl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKCR0KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGItcmFuZ2UtaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShmTGUsNSxNZSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5jb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQiLGVuYWJsZWQ6ImVuYWJsZWQiLHJldHVybkludGVnZXJzOiJyZXR1cm5JbnRlZ2VycyJ9LG91dHB1dHM6e3JhbmdlVmFsdWVzQ2hhbmdlZDoicmFuZ2VWYWx1ZXNDaGFuZ2VkIixzaW5nbGVWYWx1ZUNoYW5nZWQ6InNpbmdsZVZhbHVlQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWyJ0eXBlIiwibnVtYmVyIiwxLCJsb3dlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsImRpc2FibGVkIiwidmFsdWUiLCJjaGFuZ2UiXSxbImNsYXNzIiwic2luZ2xlLXNsaWRlciIsImNvbG9yIiwicHJpbWFyeSIsMywiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyYW5nZSIsIiJdLFsiY29sb3IiLCJwcmltYXJ5IiwxLCJzaW5nbGUtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Il0sWyJjbGFzcyIsImNvbnRhaW5lciIsNCwibmdJZiJdLFsxLCJjb250YWluZXIiXSxbImNvbnRhaW5lciIsIiJdLFsxLCJzbGlkZXItdHJhY2siXSxbMSwic2xpZGVyLXRyYWNrLWZpbGwiXSxbMSwidGh1bWIiLDMsIm1vdXNlZG93biJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGgoMCwiaW5wdXQiLDApLEkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXRDaGFuZ2UobyxpLlBvc2l0aW9uLkxFRlQpfSksZygpLGgoMSwiaW5wdXQiLDEpLEkoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXRDaGFuZ2UobyxpLlBvc2l0aW9uLlJJR0hUKX0pLGcoKSxTKDIsbUxlLDEsNSwibWF0LXNsaWRlciIsMiksUygzLGdMZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDMsV3QpKSwyJmUpe2xldCByPWl0KDQpO18oImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLGkubG93ZXJWYWx1ZSksdigxKSxfKCJkaXNhYmxlZCIsIWkuZW5hYmxlZCkoInZhbHVlIixudWxsIT09aS51cHBlclZhbHVlP2kudXBwZXJWYWx1ZToiIiksdigxKSxfKCJuZ0lmIixudWxsPT09aS51cHBlclZhbHVlKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltGZSxEZF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLWdhcDoxMHB4O2dyaWQtdGVtcGxhdGUtYXJlYXM6Imxvd2VyLWlucHV0IHVwcGVyLWlucHV0IiAic2xpZGVyIHNsaWRlciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Zm9udC1zaXplOjA7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmc6NnB4fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5sb3dlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmxvd2VyLWlucHV0fS51cHBlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnVwcGVyLWlucHV0O2p1c3RpZnktc2VsZjpmbGV4LWVuZH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjtwYWRkaW5nOjBweH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLXdyYXBwZXJ7dG9wOjVweDtsZWZ0OjBweDtyaWdodDowcHh9ICAuc2luZ2xlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjEycHh9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2hlaWdodDoycHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoycHh9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDAsMCwwLC4yNik7Ym9yZGVyLXJhZGl1czoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2U7d2lkdGg6MTJweDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4zKX0udGh1bWJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpncmFifS50aHVtYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30udGh1bWIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGJMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInRiLWZpbHRlci1pbnB1dCIsOSksSSgia2V5dXAiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5kaXNjcmV0ZVZhbHVlS2V5VXAocikpfSksZygpfTImbiYmXygidmFsdWUiLHcoMikuZGlzY3JldGVWYWx1ZUZpbHRlcil9ZnVuY3Rpb24gdkxlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDEwKSxUKDEsIiBObyBNYXRjaGluZyBWYWx1ZXMgIiksZygpKX1mdW5jdGlvbiB5TGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDEzKSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDEsIm1hdC1jaGVja2JveCIsMyksSSgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMykuZGlzY3JldGVGaWx0ZXJDaGFuZ2VkLmVtaXQobykpfSksaCgyLCJzcGFuIiksVCgzKSxnKCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDMpO3YoMSksXygiY2hlY2tlZCIsaS5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpKSx2KDIpLGJ0KGUpfX1mdW5jdGlvbiB4TGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTEpLFMoMSx5TGUsNCwyLCJkaXYiLDEyKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLF8oIm5nRm9yT2YiLGUuZ2V0UG9zc2libGVWYWx1ZXMoKSl9fWZ1bmN0aW9uIENMZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLFMoMixiTGUsMSwxLCJ0Yi1maWx0ZXItaW5wdXQiLDYpLGcoKSxTKDMsdkxlLDIsMCwiZGl2Iiw3KSxTKDQseExlLDIsMSwiZGl2Iiw4KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMiksXygibmdJZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpLHYoMSksXygibmdJZiIsIWUuZ2V0UG9zc2libGVWYWx1ZXMoKS5sZW5ndGgpLHYoMSksXygibmdJZiIsZS5nZXRQb3NzaWJsZVZhbHVlcygpLmxlbmd0aCl9fWZ1bmN0aW9uIE1MZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTQpLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoMSwidGItcmFuZ2UtaW5wdXQiLDE1KSxJKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBMdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRG9tYWluVHlwZT1nbix0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXI9IiIsdGhpcy5kaXNjcmV0ZUZpbHRlckNoYW5nZWQ9bmV3IEYsdGhpcy5pbnRlcnZhbEZpbHRlckNoYW5nZWQ9bmV3IEYsdGhpcy5pbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZD1uZXcgRn1nZXRQb3NzaWJsZVZhbHVlcygpe2xldCBlPXRoaXMuZmlsdGVyLnBvc3NpYmxlVmFsdWVzPz9bXTtyZXR1cm4gdGhpcy5kaXNjcmV0ZVZhbHVlRmlsdGVyP2UuZmlsdGVyKGk9PmkudG9TdHJpbmcoKS5tYXRjaCh0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXIpKTplfWRpc2NyZXRlVmFsdWVLZXlVcChlKXt0aGlzLmRpc2NyZXRlVmFsdWVGaWx0ZXI9ZS50YXJnZXQudmFsdWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUtZmlsdGVyIl1dLGlucHV0czp7ZmlsdGVyOiJmaWx0ZXIifSxvdXRwdXRzOntkaXNjcmV0ZUZpbHRlckNoYW5nZWQ6ImRpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsaW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkOiJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLGluY2x1ZGVVbmRlZmluZWRUb2dnbGVkOiJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCJ9LGRlY2xzOjUsdmFyczozLGNvbnN0czpbWzEsImZpbHRlci1kaWFsb2ciXSxbImNsYXNzIiwiZmlsdGVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJmaWx0ZXItY29udGFpbmVyIiwiZGlzYWJsZVJpcHBsZSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJmaWx0ZXItY29udGFpbmVyIl0sWzEsImlucHV0LWNvbnRhaW5lciJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgRGlzY3JldGUgVmFsdWVzIChyZWdleCkiLDMsInZhbHVlIiwia2V5dXAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2hlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lciIsNCwibmdJZiJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgRGlzY3JldGUgVmFsdWVzIChyZWdleCkiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwibm8tbWF0Y2hlcyJdLFsxLCJkaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJkaXNjcmV0ZS12YWx1ZSIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JJbmRleCIsIm5nRm9yT2YiXSxbMSwiZGlzY3JldGUtdmFsdWUiLDMsImNsaWNrIl0sWyJkaXNhYmxlUmlwcGxlIiwiIiwxLCJmaWx0ZXItY29udGFpbmVyIiwzLCJjbGljayJdLFsxLCJyYW5nZS1pbnB1dCIsMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCksUygxLENMZSw1LDMsImRpdiIsMSksUygyLE1MZSwyLDQsImRpdiIsMiksaCgzLCJtYXQtY2hlY2tib3giLDMpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5pbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZC5lbWl0KCl9KSxUKDQsIkluY2x1ZGUgVW5kZWZpbmVkIiksZygpKCkpLDImZSYmKHYoMSksXygibmdJZiIsaS5maWx0ZXIudHlwZT09PWkuRG9tYWluVHlwZS5ESVNDUkVURSksdigxKSxfKCJuZ0lmIixpLmZpbHRlci50eXBlPT09aS5Eb21haW5UeXBlLklOVEVSVkFMKSx2KDEpLF8oImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpKX0sZGVwZW5kZW5jaWVzOltubixGZSxoYSxTcCxkQV0sc3R5bGVzOlsiLmZpbHRlci1kaWFsb2dbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTZweCA4cHg7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1kaWFsb2dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLWRpYWxvZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5pbnB1dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5kaXNjcmV0ZS1maWx0ZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDozMDBweDtvdmVyZmxvdy15OmF1dG99Lm5vLW1hdGNoZXNbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6OHB4IDEycHh9LmZpbHRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjhweDttYXJnaW4tYm90dG9tOjhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ucmFuZ2UtaW5wdXRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NHB4IDhweDt3aWR0aDoyMDBweH0uZGlzY3JldGUtdmFsdWVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0uZGlzY3JldGUtdmFsdWVbX25nY29udGVudC0lQ09NUCVdICAgICBtYXQtY2hlY2tib3gsIC5kaXNjcmV0ZS12YWx1ZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tZGMtZm9ybS1maWVsZCwgLmRpc2NyZXRlLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7d2lkdGg6MTAwJX0iXX0pLG59KSgpLFNMZT1bImNvbHVtblNlbGVjdG9yTW9kYWwiXSxFTGU9WyJjb250ZXh0TWVudSJdLFRMZT1bImZpbHRlck1vZGFsIl07ZnVuY3Rpb24gRExlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE0KSxUKDEsIiBObyBBY3Rpb25zIEF2YWlsYWJsZSAiKSxnKCkpfWZ1bmN0aW9uIElMZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsMTUpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmNvbnRleHRNZW51UmVtb3ZlQ29sdW1uKCkpfSksUCgxLCJtYXQtaWNvbiIsMTYpLFQoMiwiUmVtb3ZlICIpLGcoKX19ZnVuY3Rpb24gQUxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCk7cmV0dXJuIFEoci5zb3J0QnlIZWFkZXIobnVsbD09ci5jb250ZXh0TWVudUhlYWRlcj9udWxsOnIuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpfSksUCgxLCJtYXQtaWNvbiIsMTgpLFQoMiwiU29ydCBEZXNjZW5kaW5nICIpLGcoKX19ZnVuY3Rpb24gUkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCk7cmV0dXJuIFEoci5zb3J0QnlIZWFkZXIobnVsbD09ci5jb250ZXh0TWVudUhlYWRlcj9udWxsOnIuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpfSksUCgxLCJtYXQtaWNvbiIsMTkpLFQoMiwiU29ydCBBc2NlbmRpbmcgIiksZygpfX1mdW5jdGlvbiBQTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDE1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5vcGVuRmlsdGVyTWVudShyLG8uY29udGV4dE1lbnVIZWFkZXIpKX0pLFAoMSwibWF0LWljb24iLDIwKSxUKDIsIiBGaWx0ZXIgIiksZygpfX1mdW5jdGlvbiBPTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDE1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5vcGVuQ29sdW1uU2VsZWN0b3Iocix7aW5zZXJ0VG86by5TaWRlLkxFRlQsaXNTdWJNZW51OiEwfSkpfSksUCgxLCJtYXQtaWNvbiIsMjEpLFQoMiwiSW5zZXJ0IENvbHVtbiBMZWZ0ICIpLGcoKX19ZnVuY3Rpb24ga0xlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxNSksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8ub3BlbkNvbHVtblNlbGVjdG9yKHIse2luc2VydFRvOm8uU2lkZS5SSUdIVCxpc1N1Yk1lbnU6ITB9KSl9KSxQKDEsIm1hdC1pY29uIiwyMSksVCgyLCJJbnNlcnQgQ29sdW1uIFJpZ2h0ICIpLGcoKX19ZnVuY3Rpb24gRkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiY3VzdG9tLW1vZGFsIiwyMiwyMyksSSgib25PcGVuIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmZvY3VzQ29sdW1uU2VsZWN0b3IoKSl9KSgib25DbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkNvbHVtblNlbGVjdG9yQ2xvc2VkKCkpfSksaCgyLCJ0Yi1kYXRhLXRhYmxlLWNvbHVtbi1zZWxlY3Rvci1jb21wb25lbnQiLDI0KSxJKCJjb2x1bW5TZWxlY3RlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25Db2x1bW5BZGRlZChyKSl9KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTt2KDIpLF8oInNlbGVjdGFibGVDb2x1bW5zIixlLnNlbGVjdGFibGVDb2x1bW5zKX19ZnVuY3Rpb24gTkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwidGItZGF0YS10YWJsZS1maWx0ZXIiLDI1KSxJKCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmludGVydmFsRmlsdGVyQ2hhbmdlZChyKSl9KSgiZGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5kaXNjcmV0ZUZpbHRlckNoYW5nZWQocikpfSkoImluY2x1ZGVVbmRlZmluZWRUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKCkpfSksZygpfTImbiYmXygiZmlsdGVyIix3KCkuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpKX1mdW5jdGlvbiBMTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDI2KSgxLCJidXR0b24iLDI3KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub3BlbkNvbHVtblNlbGVjdG9yKHIpKX0pLFAoMiwibWF0LWljb24iLDIxKSxnKCkoKX19ZnVuY3Rpb24gQkxlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDI4KSxQKDEsIm1hdC1zcGlubmVyIiwyOSksZygpKX12YXIgVkxlPVtbWyIiLCJoZWFkZXIiLCIiXV0sW1siIiwiY29udGVudCIsIiJdXV0sSExlPVsiW2hlYWRlcl0iLCJbY29udGVudF0iXSxlYz0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KGVjfHwoZWM9e30pKSxlYykpKCksQ1Y9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSx1QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMuaGVhZGVyQ2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb250ZW50Q2VsbFN1YnNjcmlwdGlvbnM9W10sdGhpcy5jb250ZXh0TWVudUhlYWRlcj12b2lkIDAsdGhpcy5pbnNlcnRDb2x1bW5Ubz12b2lkIDAsdGhpcy5maWx0ZXJDb2x1bW49dm9pZCAwLHRoaXMuc29ydERhdGFCeT1uZXcgRix0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRix0aGlzLnJlbW92ZUNvbHVtbj1uZXcgRix0aGlzLmFkZENvbHVtbj1uZXcgRix0aGlzLmFkZEZpbHRlcj1uZXcgRix0aGlzLkNvbHVtbkhlYWRlcnM9aHQsdGhpcy5Tb3J0aW5nT3JkZXI9aW8sdGhpcy5TaWRlPWVjLHRoaXMuaGlnaGxpZ2h0U2lkZT1lYy5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixDViksdGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN5bmNIZWFkZXJzKCksdGhpcy5oZWFkZXJDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnN5bmNIZWFkZXJzLmJpbmQodGhpcykpLHRoaXMuc3luY0NvbnRlbnQoKSx0aGlzLmNvbnRlbnRDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnN5bmNDb250ZW50LmJpbmQodGhpcykpfXN5bmNIZWFkZXJzKCl7dGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PntlLnVuc3Vic2NyaWJlKCl9KSx0aGlzLmhlYWRlckNlbGxTdWJzY3JpcHRpb25zPVtdLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJDZWxsU3Vic2NyaXB0aW9ucy5wdXNoKGUuZHJhZ1N0YXJ0LnN1YnNjcmliZSh0aGlzLmRyYWdTdGFydC5iaW5kKHRoaXMpKSxlLmRyYWdFbnRlci5zdWJzY3JpYmUodGhpcy5kcmFnRW50ZXIuYmluZCh0aGlzKSksZS5kcmFnRW5kLnN1YnNjcmliZSh0aGlzLmRyYWdFbmQuYmluZCh0aGlzKSksZS5oZWFkZXJDbGlja2VkLnN1YnNjcmliZSh0aGlzLnNvcnRCeUhlYWRlci5iaW5kKHRoaXMpKSxlLmNvbnRleHRNZW51T3BlbmVkLnN1YnNjcmliZSh0aGlzLm9wZW5Db250ZXh0TWVudS5iaW5kKHRoaXMsZS5oZWFkZXIpKSl9KX1zeW5jQ29udGVudCgpe3RoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zLmZvckVhY2goZT0+e2UudW5zdWJzY3JpYmUoKX0pLHRoaXMuY29udGVudENlbGxTdWJzY3JpcHRpb25zPXRoaXMuY29udGVudENlbGxzLm1hcChlPT5bZS5jb250ZXh0TWVudU9wZW5lZC5zdWJzY3JpYmUodGhpcy5vcGVuQ29udGV4dE1lbnUuYmluZCh0aGlzLGUuaGVhZGVyKSldKS5mbGF0KCl9c29ydEJ5SGVhZGVyKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8ubmFtZSE9PWV8fHRoaXMuc29ydGluZ0luZm8ub3JkZXIhPT1pby5BU0NFTkRJTkc/e25hbWU6ZSxvcmRlcjppby5BU0NFTkRJTkd9OntuYW1lOmUsb3JkZXI6aW8uREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZT1lLm5hbWUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLENWKX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZSh0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aE5hbWUodGhpcy5oaWdobGlnaHRlZENvbHVtbk5hbWUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlck5hbWU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsQ1YpLHRoaXMuaGVhZGVyQ2VsbHMuZm9yRWFjaChlPT57ZS5oaWdobGlnaHRTdHlsZSQubmV4dCh7fSl9KSl9ZHJhZ0VudGVyKGUpeyF0aGlzLmRyYWdnaW5nSGVhZGVyTmFtZXx8KHRoaXMuaGlnaGxpZ2h0U2lkZT10aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoTmFtZShlLm5hbWUpPHRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhOYW1lKHRoaXMuZHJhZ2dpbmdIZWFkZXJOYW1lKT9lYy5MRUZUOmVjLlJJR0hULHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5OYW1lPWUubmFtZSx0aGlzLmhlYWRlckNlbGxzLmZvckVhY2goaT0+e2kuaGlnaGxpZ2h0U3R5bGUkLm5leHQodGhpcy5nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShpLmhlYWRlci5uYW1lKSl9KSl9bW92ZUhlYWRlcihlLGkpe2xldCByPVsuLi50aGlzLmhlYWRlcnNdO3JldHVybiByLnNwbGljZShlLDEpLHIuc3BsaWNlKGksMCx0aGlzLmhlYWRlcnNbZV0pLHJ9Z2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZSl7cmV0dXJuIGUhPT10aGlzLmhpZ2hsaWdodGVkQ29sdW1uTmFtZT97fTp7aGlnaGxpZ2h0OiEwLCJoaWdobGlnaHQtYm9yZGVyLXJpZ2h0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1lYy5SSUdIVCwiaGlnaGxpZ2h0LWJvcmRlci1sZWZ0Ijp0aGlzLmhpZ2hsaWdodFNpZGU9PT1lYy5MRUZUfX1nZXRJbmRleE9mSGVhZGVyV2l0aE5hbWUoZSl7cmV0dXJuIHRoaXMuaGVhZGVycy5maW5kSW5kZXgoaT0+ZT09PWkubmFtZSl9Zm9jdXNDb2x1bW5TZWxlY3Rvcigpe3RoaXMuY29sdW1uU2VsZWN0b3IuZm9jdXMoKX1vcGVuQ29udGV4dE1lbnUoZSxpKXtpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWw/LmNsb3NlKCksdGhpcy5maWx0ZXJNb2RhbD8uY2xvc2UoKSx0aGlzLmNvbnRleHRNZW51SGVhZGVyPWUsdGhpcy5jb250ZXh0TWVudS5vcGVuQXRQb3NpdGlvbih7eDppLmNsaWVudFgseTppLmNsaWVudFl9KX1vbkNvbnRleHRNZW51Q2xvc2VkKCl7dGhpcy5jb250ZXh0TWVudUhlYWRlcj12b2lkIDB9b3BlbkNvbHVtblNlbGVjdG9yKGUsaSl7aT8uaXNTdWJNZW51JiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsdGVyTW9kYWw/LmNsb3NlKCksdGhpcy5pbnNlcnRDb2x1bW5Ubz1pPy5pbnNlcnRUbztsZXQgcj1lLnRhcmdldC5jbG9zZXN0KCJidXR0b24iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWwub3BlbkF0UG9zaXRpb24oe3g6ci54K3Iud2lkdGgseTpyLnl9KSx0aGlzLmNvbHVtblNlbGVjdG9yLmFjdGl2YXRlKCl9b25Db2x1bW5TZWxlY3RvckNsb3NlZCgpe3RoaXMuaW5zZXJ0Q29sdW1uVG89dm9pZCAwLHRoaXMuY29sdW1uU2VsZWN0b3IuZGVhY3RpdmF0ZSgpfWNhbkNvbnRleHRNZW51UmVtb3ZlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVIZWFkZXI/LnJlbW92YWJsZX1jYW5Db250ZXh0TWVudUluc2VydCgpe3JldHVybiB0aGlzLnNlbGVjdGFibGVDb2x1bW5zJiZ0aGlzLnNlbGVjdGFibGVDb2x1bW5zLmxlbmd0aCYmdGhpcy5jb250ZXh0TWVudUhlYWRlcj8ubW92YWJsZX1pc0NvbnRleHRNZW51RW1wdHkoKXtyZXR1cm4hKHRoaXMuY29udGV4dE1lbnVIZWFkZXI/LnJlbW92YWJsZXx8dGhpcy5jb250ZXh0TWVudUhlYWRlcj8uc29ydGFibGV8fHRoaXMuY2FuQ29udGV4dE1lbnVJbnNlcnQoKXx8dGhpcy5jb250ZXh0TWVudUhlYWRlcj8uZmlsdGVyYWJsZSl9Y29udGV4dE1lbnVSZW1vdmVDb2x1bW4oKXt2b2lkIDAhPT10aGlzLmNvbnRleHRNZW51SGVhZGVyJiYodGhpcy5yZW1vdmVDb2x1bW4uZW1pdCh0aGlzLmNvbnRleHRNZW51SGVhZGVyKSx0aGlzLmNvbnRleHRNZW51LmNsb3NlKCksdGhpcy5maWx0ZXJNb2RhbD8uY2xvc2UoKSl9Z2V0SW5zZXJ0SW5kZXgoKXtpZih2b2lkIDA9PT10aGlzLmNvbnRleHRNZW51SGVhZGVyfHx2b2lkIDA9PT10aGlzLmluc2VydENvbHVtblRvKXJldHVybjtsZXQgZT10aGlzLmhlYWRlcnMuaW5kZXhPZih0aGlzLmNvbnRleHRNZW51SGVhZGVyKTtyZXR1cm4gdGhpcy5pbnNlcnRDb2x1bW5Ubz09PWVjLkxFRlQ/ZTp0aGlzLmluc2VydENvbHVtblRvPT09ZWMuUklHSFQ/TWF0aC5taW4oZSsxLHRoaXMuaGVhZGVycy5sZW5ndGgpOmV9b25Db2x1bW5BZGRlZChlKXt0aGlzLmFkZENvbHVtbi5lbWl0KHtoZWFkZXI6ZSxpbmRleDp0aGlzLmdldEluc2VydEluZGV4KCl9KX1vcGVuRmlsdGVyTWVudShlLGkpe3RoaXMuZmlsdGVyQ29sdW1uPWk7bGV0IHI9ZS50YXJnZXQuY2xvc2VzdCgiYnV0dG9uIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbHVtblNlbGVjdG9yTW9kYWw/LmNsb3NlKCksdGhpcy5maWx0ZXJNb2RhbC5vcGVuQXRQb3NpdGlvbih7eDpyLngrci53aWR0aCx5OnIueX0pfWdldEN1cnJlbnRDb2x1bW5GaWx0ZXIoKXtpZih0aGlzLmZpbHRlckNvbHVtbilyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXJzLmdldCh0aGlzLmZpbHRlckNvbHVtbi5uYW1lKX1vbkZpbHRlckNsb3NlZCgpe3RoaXMuZmlsdGVyQ29sdW1uPXZvaWQgMH1pbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7aWYoIXRoaXMuZmlsdGVyQ29sdW1uKXJldHVybjtsZXQgaT10aGlzLmdldEN1cnJlbnRDb2x1bW5GaWx0ZXIoKTshaXx8dGhpcy5hZGRGaWx0ZXIuZW1pdCh7aGVhZGVyOnRoaXMuZmlsdGVyQ29sdW1uLHZhbHVlOnsuLi5pLGZpbHRlckxvd2VyVmFsdWU6ZS5sb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ZS51cHBlclZhbHVlfX0pfWRpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtpZighdGhpcy5maWx0ZXJDb2x1bW4pcmV0dXJuO2xldCBpPXRoaXMuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpO2lmKCFpKXJldHVybjtsZXQgcj1uZXcgU2V0KFsuLi5pLmZpbHRlclZhbHVlc10pO3IuaGFzKGUpP3IuZGVsZXRlKGUpOnIuYWRkKGUpLHRoaXMuYWRkRmlsdGVyLmVtaXQoe2hlYWRlcjp0aGlzLmZpbHRlckNvbHVtbix2YWx1ZTp7Li4uaSxmaWx0ZXJWYWx1ZXM6QXJyYXkuZnJvbShyKX19KX1pbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCgpe2lmKCF0aGlzLmZpbHRlckNvbHVtbilyZXR1cm47bGV0IGU9dGhpcy5nZXRDdXJyZW50Q29sdW1uRmlsdGVyKCk7IWV8fHRoaXMuYWRkRmlsdGVyLmVtaXQoe2hlYWRlcjp0aGlzLmZpbHRlckNvbHVtbix2YWx1ZTp7Li4uZSxpbmNsdWRlVW5kZWZpbmVkOiFlLmluY2x1ZGVVbmRlZmluZWR9fSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhdGEtdGFibGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKFRpKHIsdV8sNCksVGkocixkXyw1KSksMiZlKXtsZXQgbztTZShvPUVlKCkpJiYoaS5oZWFkZXJDZWxscz1vKSxTZShvPUVlKCkpJiYoaS5jb250ZW50Q2VsbHM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShTTGUsNSksR2UoYUEsNSksR2UoRUxlLDUpLEdlKFRMZSw1KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5jb2x1bW5TZWxlY3Rvck1vZGFsPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmNvbHVtblNlbGVjdG9yPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmNvbnRleHRNZW51PXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmZpbHRlck1vZGFsPXIuZmlyc3QpfX0saW5wdXRzOntoZWFkZXJzOiJoZWFkZXJzIixzb3J0aW5nSW5mbzoic29ydGluZ0luZm8iLGNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixjb2x1bW5GaWx0ZXJzOiJjb2x1bW5GaWx0ZXJzIixsb2FkaW5nOiJsb2FkaW5nIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMiLHJlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIixhZGRDb2x1bW46ImFkZENvbHVtbiIsYWRkRmlsdGVyOiJhZGRGaWx0ZXIifSxuZ0NvbnRlbnRTZWxlY3RvcnM6SExlLGRlY2xzOjIwLHZhcnM6MTEsY29uc3RzOltbMywib25DbG9zZSJdLFsiY29udGV4dE1lbnUiLCIiXSxbMSwiY29udGV4dC1tZW51Il0sWyJjbGFzcyIsIm5vLWFjdGlvbnMtbWVzc2FnZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGV4dC1tZW51LWJ1dHRvbiBzb3J0LWJ1dHRvbiIsIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJjb250ZXh0LW1lbnUtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJvbk9wZW4iLCJvbkNsb3NlIiw0LCJuZ0lmIl0sWyJmaWx0ZXJNb2RhbCIsIiJdLFszLCJmaWx0ZXIiLCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJkaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCIsNCwibmdJZiJdLFsxLCJkYXRhLXRhYmxlIl0sWzEsImhlYWRlciJdLFsiY2xhc3MiLCJhZGQtYnV0dG9uLWNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFsxLCJuby1hY3Rpb25zLW1lc3NhZ2UiXSxbIm1hdC1idXR0b24iLCIiLDEsImNvbnRleHQtbWVudS1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdLFsibWF0LWJ1dHRvbiIsIiIsMSwiY29udGV4dC1tZW51LWJ1dHRvbiIsInNvcnQtYnV0dG9uIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImFycm93X2Rvd253YXJkXzI0cHgiXSxbInN2Z0ljb24iLCJhcnJvd191cHdhcmRfMjRweCJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsic3ZnSWNvbiIsImFkZF8yNHB4Il0sWzMsIm9uT3BlbiIsIm9uQ2xvc2UiXSxbImNvbHVtblNlbGVjdG9yTW9kYWwiLCIiXSxbMywic2VsZWN0YWJsZUNvbHVtbnMiLCJjb2x1bW5TZWxlY3RlZCJdLFszLCJmaWx0ZXIiLCJpbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJkaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJpbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZCJdLFsxLCJhZGQtYnV0dG9uLWNlbGwiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQWRkIENvbHVtbiIsMSwiYWRkLWNvbHVtbi1idG4iLDMsImNsaWNrIl0sWzEsImxvYWRpbmciXSxbIm1vZGUiLCJpbmRldGVybWluYXRlIiwiZGlhbWV0ZXIiLCIyOCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKERuKFZMZSksaCgwLCJjdXN0b20tbW9kYWwiLDAsMSksSSgib25DbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNvbnRleHRNZW51Q2xvc2VkKCl9KSxoKDIsImRpdiIsMiksUygzLERMZSwyLDAsImRpdiIsMyksUyg0LElMZSwzLDAsImJ1dHRvbiIsNCksUyg1LEFMZSwzLDAsImJ1dHRvbiIsNSksUyg2LFJMZSwzLDAsImJ1dHRvbiIsNSksUyg3LFBMZSwzLDAsImJ1dHRvbiIsNCksUyg4LE9MZSwzLDAsImJ1dHRvbiIsNiksUyg5LGtMZSwzLDAsImJ1dHRvbiIsNiksZygpKCksUygxMCxGTGUsMywxLCJjdXN0b20tbW9kYWwiLDcpLGgoMTEsImN1c3RvbS1tb2RhbCIsMCw4KSxJKCJvbkNsb3NlIixmdW5jdGlvbigpe3JldHVybiBpLm9uRmlsdGVyQ2xvc2VkKCl9KSxTKDEzLE5MZSwxLDEsInRiLWRhdGEtdGFibGUtZmlsdGVyIiw5KSxnKCksaCgxNCwiZGl2IiwxMCkoMTUsImRpdiIsMTEpLHp0KDE2KSxTKDE3LExMZSwzLDAsImRpdiIsMTIpLGcoKSx6dCgxOCwxKSxnKCksUygxOSxCTGUsMiwwLCJkaXYiLDEzKSksMiZlJiYodigzKSxfKCJuZ0lmIixpLmlzQ29udGV4dE1lbnVFbXB0eSgpKSx2KDEpLF8oIm5nSWYiLG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLnJlbW92YWJsZSksdigxKSxfKCJuZ0lmIiwobnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIuc29ydGFibGUpJiZpLnNvcnRpbmdJbmZvLm9yZGVyPT09aS5Tb3J0aW5nT3JkZXIuQVNDRU5ESU5HJiZpLnNvcnRpbmdJbmZvLm5hbWU9PT0obnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIubmFtZSkpLHYoMSksXygibmdJZiIsKG51bGw9PWkuY29udGV4dE1lbnVIZWFkZXI/bnVsbDppLmNvbnRleHRNZW51SGVhZGVyLnNvcnRhYmxlKSYmKGkuc29ydGluZ0luZm8ub3JkZXIhPT1pLlNvcnRpbmdPcmRlci5BU0NFTkRJTkd8fGkuc29ydGluZ0luZm8ubmFtZSE9PShudWxsPT1pLmNvbnRleHRNZW51SGVhZGVyP251bGw6aS5jb250ZXh0TWVudUhlYWRlci5uYW1lKSkpLHYoMSksXygibmdJZiIsbnVsbD09aS5jb250ZXh0TWVudUhlYWRlcj9udWxsOmkuY29udGV4dE1lbnVIZWFkZXIuZmlsdGVyYWJsZSksdigxKSxfKCJuZ0lmIixpLmNhbkNvbnRleHRNZW51SW5zZXJ0KCkpLHYoMSksXygibmdJZiIsaS5jYW5Db250ZXh0TWVudUluc2VydCgpKSx2KDEpLF8oIm5nSWYiLGkuc2VsZWN0YWJsZUNvbHVtbnMmJmkuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoKSx2KDMpLF8oIm5nSWYiLGkuZ2V0Q3VycmVudENvbHVtbkZpbHRlcigpKSx2KDQpLF8oIm5nSWYiLGkuc2VsZWN0YWJsZUNvbHVtbnMmJmkuc2VsZWN0YWJsZUNvbHVtbnMubGVuZ3RoKSx2KDIpLF8oIm5nSWYiLGkubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W0ZlLEVuLEppLCRpLHRsLFJ0ZSxhQSxMdGVdLHN0eWxlczpbIi5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweDtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCV9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1yb3c7ei1pbmRleDoxfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dGV4dC1hbGlnbjpsZWZ0O3RvcDowO2ZvbnQtd2VpZ2h0OmJvbGQ7dmVydGljYWwtYWxpZ246Ym90dG9tfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmFkZC1idXR0b24tY2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp0YWJsZS1jZWxsO3dpZHRoOjQwcHh9LmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZDtib3gtc2hhZG93OjBweCA0cHggNHB4IHJnYmEoMCwwLDAsLjI1KTtib3JkZXItY29sb3I6I2ViZWJlYjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uY29udGV4dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZXh0LW1lbnUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDt3aWR0aDoxMDAlO3RleHQtd3JhcDpub3dyYXB9LmNvbnRleHQtbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAubm8tYWN0aW9ucy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjhweDt0ZXh0LXdyYXA6bm93cmFwfS5jb250ZXh0LW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLnNvcnQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgcGF0aHtmaWxsOnVuc2V0fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gekxlKG4sdCl7aWYoMSZuJiZQKDAsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDUpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKTtfKCJoZWFkZXIiLGUpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoImhwYXJhbXNFbmFibGVkIixpLmhwYXJhbXNFbmFibGVkKX19ZnVuY3Rpb24gVUxlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLHpMZSwxLDMsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDQpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7digxKSxfKCJuZ0lmIixlLmVuYWJsZWQmJihlLnR5cGUhPT1pLkNvbHVtbkhlYWRlclR5cGUuU01PT1RIRUR8fGkuc21vb3RoaW5nRW5hYmxlZCkpfX1mdW5jdGlvbiBqTGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsOSksUCgxLCJzcGFuIiksZygpKSwyJm4pe2xldCBlPXcoMykuJGltcGxpY2l0O3YoMSksVHQoImJhY2tncm91bmQtY29sb3IiLGUuY29sb3IpfX1mdW5jdGlvbiBHTGUobix0KXtpZigxJm4mJihoKDAsInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIiw3KSxTKDEsakxlLDIsMiwiZGl2Iiw4KSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKS4kaW1wbGljaXQscj13KCk7XygiaGVhZGVyIixlKSgiZGF0dW0iLGlbZS5uYW1lXSksdigxKSxfKCJuZ0lmIixlLnR5cGU9PT1yLkNvbHVtbkhlYWRlclR5cGUuQ09MT1IpfX1mdW5jdGlvbiBXTGUobix0KXtpZigxJm4mJihPdCgwKSxTKDEsR0xlLDIsMywidGItZGF0YS10YWJsZS1jb250ZW50LWNlbGwiLDYpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO3YoMSksXygibmdJZiIsZS5lbmFibGVkJiYoZS50eXBlIT09aS5Db2x1bW5IZWFkZXJUeXBlLlNNT09USEVEfHxpLnNtb290aGluZ0VuYWJsZWQpKX19ZnVuY3Rpb24gcUxlKG4sdCl7aWYoMSZuJiYoT3QoMCksaCgxLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtcm93IiksUygyLFdMZSwyLDEsIm5nLWNvbnRhaW5lciIsMiksZygpLGt0KCkpLDImbil7bGV0IGU9dygpO3YoMiksXygibmdGb3JPZiIsZS5nZXRIZWFkZXJzKCkpfX12YXIgSHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnNvcnREYXRhQnk9bmV3IEYsdGhpcy5lZGl0Q29sdW1uSGVhZGVycz1uZXcgRix0aGlzLnJlbW92ZUNvbHVtbj1uZXcgRix0aGlzLkNvbHVtbkhlYWRlclR5cGU9aHR9Z2V0SGVhZGVycygpe3JldHVyblt7bmFtZToiY29sb3IiLGRpc3BsYXlOYW1lOiIiLHR5cGU6aHQuQ09MT1IsZW5hYmxlZDohMH1dLmNvbmNhdCh0aGlzLmNvbHVtbkhlYWRlcnMpfWdldE1pblBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LHM9ZVtpXTtmb3IobGV0IGE9aTthPD1yO2ErKylvPmVbYV0ueSYmKG89ZVthXS55LHM9ZVthXSk7cmV0dXJuIHN9Z2V0TWF4UG9pbnRJblJhbmdlKGUsaSxyKXtsZXQgbz1lW2ldLnkscz1lW2ldO2ZvcihsZXQgYT1pO2E8PXI7YSsrKW88ZVthXS55JiYobz1lW2FdLnkscz1lW2FdKTtyZXR1cm4gc31nZXRNZWFuKGUsaSxyKXtsZXQgbz0wO2ZvcihsZXQgcz1pO3M8PXI7cysrKW8rPWVbc10udmFsdWU7cmV0dXJuIG8vKHItaSsxKX1nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCl7aWYoIXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbilyZXR1cm5bXTtsZXQgZT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxpPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAscj10aGlzLmRhdGFTZXJpZXMuZmlsdGVyKHM9PkhTKHMsdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubWFwKHM9PntsZXQgYT10aGlzLmNoYXJ0TWV0YWRhdGFNYXBbcy5pZF0sbD1aeChzLnBvaW50cyxlKSxjPXMucG9pbnRzW2xdLGQ9bnVsbCx1PW51bGw7bnVsbCE9aSYmKHU9Wngocy5wb2ludHMsaSksZD1zLnBvaW50c1t1XSk7bGV0IHA9e2lkOnMuaWQsY29sb3I6YS5jb2xvcn07Zm9yKGxldCBmIG9mIHRoaXMuY29sdW1uSGVhZGVycylzd2l0Y2goZi50eXBlKXtjYXNlIGh0LlJVTjpsZXQgbT0iIjthLmFsaWFzJiYobT1gJHthLmFsaWFzLmFsaWFzTnVtYmVyfSAke2EuYWxpYXMuYWxpYXNUZXh0fS9gKSxwW2YubmFtZV09YCR7bX0ke2EuZGlzcGxheU5hbWV9YDtjb250aW51ZTtjYXNlIGh0LlNURVA6cFtmLm5hbWVdPWMuc3RlcDtjb250aW51ZTtjYXNlIGh0LlZBTFVFOnBbZi5uYW1lXT1jLnZhbHVlO2NvbnRpbnVlO2Nhc2UgaHQuUkVMQVRJVkVfVElNRTpwW2YubmFtZV09Yy5yZWxhdGl2ZVRpbWVJbk1zO2NvbnRpbnVlO2Nhc2UgaHQuU01PT1RIRUQ6cFtmLm5hbWVdPWMueTtjb250aW51ZTtjYXNlIGh0LlZBTFVFX0NIQU5HRTppZighZCljb250aW51ZTtwW2YubmFtZV09ZC55LWMueTtjb250aW51ZTtjYXNlIGh0LlNUQVJUX1NURVA6cFtmLm5hbWVdPWMuc3RlcDtjb250aW51ZTtjYXNlIGh0LkVORF9TVEVQOmlmKCFkKWNvbnRpbnVlO3BbZi5uYW1lXT1kLnN0ZXA7Y29udGludWU7Y2FzZSBodC5TVEFSVF9WQUxVRTpwW2YubmFtZV09Yy55O2NvbnRpbnVlO2Nhc2UgaHQuRU5EX1ZBTFVFOmlmKCFkKWNvbnRpbnVlO3BbZi5uYW1lXT1kLnk7Y29udGludWU7Y2FzZSBodC5NSU5fVkFMVUU6aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWluUG9pbnRJblJhbmdlKHMucG9pbnRzLGwsdSkueTtjb250aW51ZTtjYXNlIGh0Lk1BWF9WQUxVRTppZighdSljb250aW51ZTtwW2YubmFtZV09dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uocy5wb2ludHMsbCx1KS55O2NvbnRpbnVlO2Nhc2UgaHQuUEVSQ0VOVEFHRV9DSEFOR0U6aWYoIWQpY29udGludWU7cFtmLm5hbWVdPShkLnktYy55KS9jLnk7Y29udGludWU7Y2FzZSBodC5TVEVQX0FUX01BWDppZighdSljb250aW51ZTtwW2YubmFtZV09dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uocy5wb2ludHMsbCx1KS5zdGVwO2NvbnRpbnVlO2Nhc2UgaHQuU1RFUF9BVF9NSU46aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWluUG9pbnRJblJhbmdlKHMucG9pbnRzLGwsdSkuc3RlcDtjb250aW51ZTtjYXNlIGh0Lk1FQU46aWYoIXUpY29udGludWU7cFtmLm5hbWVdPXRoaXMuZ2V0TWVhbihzLnBvaW50cyxsLHUpO2NvbnRpbnVlO2Nhc2UgaHQuUkFXX0NIQU5HRTppZighZCljb250aW51ZTtwW2YubmFtZV09ZC52YWx1ZS1jLnZhbHVlO2NvbnRpbnVlO2RlZmF1bHQ6Y29udGludWV9cmV0dXJuIHB9KSxvPXRoaXMuY29sdW1uSGVhZGVycy5maW5kKHM9PnMubmFtZT09PXRoaXMuc29ydGluZ0luZm8ubmFtZSk7cmV0dXJuIHZvaWQgMCE9PW8mJnIuc29ydCgocyxhKT0+e2lmKCFvKXJldHVybiAwO2xldCBsPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLG8pLGM9dGhpcy5nZXRTb3J0YWJsZVZhbHVlKGEsbyk7cmV0dXJuIGw8Yz90aGlzLnNvcnRpbmdJbmZvLm9yZGVyPT09aW8uQVNDRU5ESU5HPy0xOjE6bD5jP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT1pby5BU0NFTkRJTkc/MTotMTowfSkscn1nZXRTb3J0YWJsZVZhbHVlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2Ygbnx8TnVtYmVyLmlzTmFOKG4pfHwiTmFOIj09PW58fG51bGw9PW4/LTEvMDpufShpLnR5cGU9PT1odC5SVU4/dGhpcy5jaGFydE1ldGFkYXRhTWFwW2UuaWRdLmRpc3BsYXlOYW1lOmVbaS5uYW1lXSl9b3JkZXJDb2x1bW5zKGUpe3RoaXMuZWRpdENvbHVtbkhlYWRlcnMuZW1pdCh7aGVhZGVyczplLGRhdGFUYWJsZU1vZGU6dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9yby5SQU5HRTpyby5TSU5HTEV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2NoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIixocGFyYW1zRW5hYmxlZDoiaHBhcmFtc0VuYWJsZWQifSxvdXRwdXRzOntzb3J0RGF0YUJ5OiJzb3J0RGF0YUJ5IixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLHJlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiaGVhZGVycyIsInNvcnRpbmdJbmZvIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIiwicmVtb3ZlQ29sdW1uIl0sWyJoZWFkZXIiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjb250ZW50IiwiIl0sWyJkaXNhYmxlQ29udGV4dE1lbnUiLCJ0cnVlIiwzLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiw0LCJuZ0lmIl0sWyJkaXNhYmxlQ29udGV4dE1lbnUiLCJ0cnVlIiwzLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIl0sWzMsImhlYWRlciIsImRhdHVtIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsImRhdHVtIl0sWyJjbGFzcyIsInJvdy1jaXJjbGUiLDQsIm5nSWYiXSxbMSwicm93LWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwidGItZGF0YS10YWJsZSIsMCksSSgic29ydERhdGFCeSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc29ydERhdGFCeS5lbWl0KG8pfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3JkZXJDb2x1bW5zKG8pfSkoInJlbW92ZUNvbHVtbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVtb3ZlQ29sdW1uLmVtaXQobyl9KSxPdCgxLDEpLFMoMixVTGUsMiwxLCJuZy1jb250YWluZXIiLDIpLGt0KCksT3QoMywzKSxTKDQscUxlLDMsMSwibmctY29udGFpbmVyIiwyKSxrdCgpLGcoKSksMiZlJiYoXygiaGVhZGVycyIsaS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGkuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCksdigyKSxfKCJuZ0Zvck9mIixpLmdldEhlYWRlcnMoKSksdigyKSxfKCJuZ0Zvck9mIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkpfSxkZXBlbmRlbmNpZXM6W25uLEZlLGRfLHNBLHVBLHVfXSxzdHlsZXM6WyJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NHB4fS5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTt2YXIgWExlPVsic3RlcFNwYW4iXTtmdW5jdGlvbiBRTGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLFAoMSwibWF0LWljb24iLDUpLGcoKX19ZnVuY3Rpb24gWkxlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiw0KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5mb2JSZW1vdmVkLmVtaXQoKSl9KSxQKDEsIm1hdC1pY29uIiw2KSxnKCl9fXZhciBLTGU9ZnVuY3Rpb24obix0KXtyZXR1cm57Zm9iOiEwLHVucmVtb3ZhYmxlOm4scHJvc3BlY3RpdmU6dH19LHp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hbGxvd1JlbW92YWw9ITAsdGhpcy5pc1Byb3NwZWN0aXZlPSExLHRoaXMuc3RlcENoYW5nZWQ9bmV3IEYsdGhpcy5mb2JSZW1vdmVkPW5ldyBGfW5nT25DaGFuZ2VzKGUpe2Uuc3RlcCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuc3RlcFNwYW4ubmF0aXZlRWxlbWVudCYmdGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50LmJsdXIoKX12YWxpZGF0ZVN0ZXAoZSl7bGV0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShlLndoaWNoKTsoIiAiPT09ZS5rZXl8fGlzTmFOKE51bWJlcihpKSkpJiZlLnByZXZlbnREZWZhdWx0KCl9c3RlcFR5cGVkKGUpe2UucHJldmVudERlZmF1bHQoKTtsZXQgaT1lLnRhcmdldC5pbm5lclRleHQ7dGhpcy5zdGVwQ2hhbmdlZC5lbWl0KCIiIT09aT9OdW1iZXIoaSk6bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtZm9iIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmR2UoWExlLDcsTWUpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuc3RlcFNwYW49ci5maXJzdCl9fSxpbnB1dHM6e3N0ZXA6InN0ZXAiLGFsbG93UmVtb3ZhbDoiYWxsb3dSZW1vdmFsIixpc1Byb3NwZWN0aXZlOiJpc1Byb3NwZWN0aXZlIn0sb3V0cHV0czp7c3RlcENoYW5nZWQ6InN0ZXBDaGFuZ2VkIixmb2JSZW1vdmVkOiJmb2JSZW1vdmVkIn0sZmVhdHVyZXM6W0d0XSxkZWNsczo1LHZhcnM6Nyxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJjb250ZW50ZWRpdGFibGUiLCIiLCJyb2xlIiwidGV4dGJveCIsImFyaWEtbGFiZWwiLCJFZGl0IHN0ZXAiLDMsImlubmVySFRNTCIsImJsdXIiLCJrZXlwcmVzcyIsImtleWRvd24uZW50ZXIiLCJrZXlkb3duLnNoaWZ0LmVudGVyIl0sWyJzdGVwU3BhbiIsIiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImFyaWEtbGFiZWwiLCJEZXNlbGVjdCBmb2IiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJzcGFuIiwxLDIpLEkoImJsdXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnN0ZXBUeXBlZChvKX0pKCJrZXlwcmVzcyIsZnVuY3Rpb24obyl7cmV0dXJuIGkudmFsaWRhdGVTdGVwKG8pfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnN0ZXBUeXBlZChvKX0pKCJrZXlkb3duLnNoaWZ0LmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksZygpLFMoMyxRTGUsMiwwLCJidXR0b24iLDMpLFMoNCxaTGUsMiwwLCJidXR0b24iLDMpLGcoKSksMiZlJiYoXygibmdDbGFzcyIscXIoNCxLTGUsIWkuYWxsb3dSZW1vdmFsLGkuaXNQcm9zcGVjdGl2ZSkpLHYoMSksXygiaW5uZXJIVE1MIixpLnN0ZXAsZk8pLHYoMiksXygibmdJZiIsaS5hbGxvd1JlbW92YWwpLHYoMSksXygibmdJZiIsaS5pc1Byb3NwZWN0aXZlKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsRW5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvYltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtZmxleDtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czoyNXB4O3BhZGRpbmc6MnB4IDJweCAycHggNHB4O2ZvbnQtc2l6ZToxMXB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOm1pbi1jb250ZW50fS5mb2JbX25nY29udGVudC0lQ09NUCVdID4gLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXRvcDoxcHh9LmZvYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LmZvYltfbmdjb250ZW50LSVDT01QJV06aG92ZXIucHJvc3BlY3RpdmV7Y3Vyc29yOnBvaW50ZXJ9LmZvYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30uZm9iLnVucmVtb3ZhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCA0cHh9LmZvYi5wcm9zcGVjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MXB4IGRhc2hlZCAjOWU5ZTllO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjE3cHh9c3Bhbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtkaXNwbGF5OmlubGluZS1ibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjJweDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7Zm9udC1zaXplOjExcHg7d2lkdGg6MTFweDtoZWlnaHQ6MTFweDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Y29sb3I6aW5oZXJpdH1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgLm1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxMTAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzllOWU5ZTtjb2xvcjojZWVlO2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNlMGUwZTB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSwkTGU9WyJzdGFydEZvYldyYXBwZXIiXSxlM2U9WyJlbmRGb2JXcmFwcGVyIl0sdDNlPVsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIl07ZnVuY3Rpb24gbjNlKG4sdCl7MSZuJiZQKDAsImRpdiIsNil9ZnVuY3Rpb24gaTNlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDIsMyksUygyLG4zZSwxLDAsImRpdiIsNCksUCgzLCJjYXJkLWZvYiIsNSksZygpKSwyJm4pe2xldCBlPXcoKTtUdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSksdigyKSxfKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHYoMSksXygibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gcjNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwxMCksSSgibW91c2Vkb3duIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMik7cmV0dXJuIFEoby5zdGFydERyYWcoby5Gb2IuU1RBUlQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLGcoKX19ZnVuY3Rpb24gbzNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyLDcpLFMoMixyM2UsMSwwLCJkaXYiLDgpLGgoMywiY2FyZC1mb2IiLDkpLEkoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCk7cmV0dXJuIFEoby5zdGFydERyYWcoby5Gb2IuU1RBUlQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5GT0IscikpfSkoInN0ZXBDaGFuZ2VkIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKTtyZXR1cm4gUShyLm9uRm9iUmVtb3ZlZChyLkZvYi5TVEFSVCkpfSksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7VHQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeEZvclN0YXJ0Rm9iKCkpLHYoMiksXygibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx2KDEpLF8oImFsbG93UmVtb3ZhbCIsISFlLmFsbG93Rm9iUmVtb3ZhbHx8ZS50aW1lU2VsZWN0aW9uLmVuZCkoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCl9fWZ1bmN0aW9uIHMzZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTApLEkoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDIpO3JldHVybiBRKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkVYVEVOREVEX0xJTkUscikpfSksZygpfX1mdW5jdGlvbiBhM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDIsMTEpLFMoMixzM2UsMSwwLCJkaXYiLDgpLGgoMywiY2FyZC1mb2IiLDEyKSxJKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe1goZSk7bGV0IG89dygpO3JldHVybiBRKG8uc3RlcFR5cGVkKG8uRm9iLkVORCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKTtyZXR1cm4gUShyLm9uRm9iUmVtb3ZlZChyLkZvYi5FTkQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO1R0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKSksdigyKSxfKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHYoMSksXygibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fXZhciBPcj0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9ORT0wXT0iTk9ORSIsbltuLlNUQVJUPTFdPSJTVEFSVCIsbltuLkVORD0yXT0iRU5EIn0oT3J8fChPcj17fSkpLE9yKSkoKSxsM2U9e3N0YXJ0Ok9yLlNUQVJULGVuZDpPci5FTkR9LHBBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWUsdGhpcy5zaG93RXh0ZW5kZWRMaW5lPSExLHRoaXMucHJvc3BlY3RpdmVTdGVwPW51bGwsdGhpcy5wcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb249bnVsbCx0aGlzLmFsbG93Rm9iUmVtb3ZhbD0hMCx0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEYsdGhpcy5vblRpbWVTZWxlY3Rpb25Ub2dnbGVkPW5ldyBGLHRoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkPW5ldyBGLHRoaXMuaGFzRm9iTW92ZWQ9ITEsdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9T3IuTk9ORSx0aGlzLmFmZm9yZGFuY2U9cXMuTk9ORSx0aGlzLm1vdXNlTGlzdGVuZXI9dGhpcy5tb3VzZU1vdmUuYmluZCh0aGlzKSx0aGlzLnN0b3BMaXN0ZW5lcj10aGlzLnN0b3BEcmFnLmJpbmQodGhpcyksdGhpcy5Gb2I9T3IsdGhpcy5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZT1xc31nZXRDc3NUcmFuc2xhdGVQeEZvclN0YXJ0Rm9iKCl7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMP2B0cmFuc2xhdGUoMHB4LCAke3RoaXMuc3RhcnRTdGVwQXhpc1Bvc2l0aW9ufXB4KWA6YHRyYW5zbGF0ZSgke3RoaXMuc3RhcnRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvckVuZEZvYigpe3JldHVybiBudWxsPT09dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9uPyIiOnRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMP2B0cmFuc2xhdGUoMHB4LCAke3RoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgsIDBweClgfWdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwPyIiOnRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMP2B0cmFuc2xhdGUoMHB4LCAke3RoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9ufXB4KWA6YHRyYW5zbGF0ZSgke3RoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1zdG9wRXZlbnRQcm9wYWdhdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKX1zdGFydERyYWcoZSxpLHIpe2khPT1xcy5GT0ImJnRoaXMuc3RvcEV2ZW50UHJvcGFnYXRpb24ociksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLm1vdXNlTGlzdGVuZXIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuc3RvcExpc3RlbmVyKSx0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj1lLHRoaXMuYWZmb3JkYW5jZT1pfXN0b3BEcmFnKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLm1vdXNlTGlzdGVuZXIpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuc3RvcExpc3RlbmVyKSx0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj1Pci5OT05FLHRoaXMuaGFzRm9iTW92ZWQmJnRoaXMudGltZVNlbGVjdGlvbiYmdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246dGhpcy50aW1lU2VsZWN0aW9uLGFmZm9yZGFuY2U6dGhpcy5hZmZvcmRhbmNlfSksdGhpcy5hZmZvcmRhbmNlPXFzLk5PTkUsdGhpcy5oYXNGb2JNb3ZlZD0hMX1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PWZzLlZFUlRJQ0FMfXNob3VsZFN3YXBGb2JzKGUpe3JldHVybiEoIXRoaXMudGltZVNlbGVjdGlvbnx8IXRoaXMudGltZVNlbGVjdGlvbi5lbmQpJiYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5FTkQ/ZTx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcDp0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PU9yLlNUQVJUJiZlPnRoaXMudGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9Z2V0TmV3VGltZVNlbGVjdGlvbihlLGkpe2xldCByPXsuLi5pfTtpZighdGhpcy50aW1lU2VsZWN0aW9uKXJldHVybiByO2lmKCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKXJldHVybiByLnN0YXJ0PXtzdGVwOmV9LHI7aWYodGhpcy5zaG91bGRTd2FwRm9icyhlKSl7bGV0W28sc109dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5FTkQ/WyJlbmQiLCJzdGFydCJdOlsic3RhcnQiLCJlbmQiXTtyZXR1cm4gdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9bDNlW3NdLHJbb109dGhpcy50aW1lU2VsZWN0aW9uW3NdLHJbc109e3N0ZXA6ZX0scn1yZXR1cm4gdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5FTkQ/KHIuZW5kPXtzdGVwOmV9LHIpOihyLnN0YXJ0PXtzdGVwOmV9LHIpfWdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKXtsZXQgaT1udWxsLHI9dGhpcy5nZXRNb3VzZVBvc2l0aW9uRnJvbUV2ZW50KGUpLG89dGhpcy5heGlzRGlyZWN0aW9uPT09ZnMuVkVSVElDQUw/ZS5tb3ZlbWVudFk6ZS5tb3ZlbWVudFg7cmV0dXJuIHRoaXMuaXNNb3ZpbmdIaWdoZXIocixvKT9pPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihyKTp0aGlzLmlzTW92aW5nTG93ZXIocixvKSYmKGk9dGhpcy5jYXJkRm9iSGVscGVyLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24ocikpLG51bGw9PT1pP251bGw6aX1tb3VzZU1vdmUoZSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5OT05FKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtpZihudWxsPT09aXx8IXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm47bGV0IHI9dGhpcy5nZXROZXdUaW1lU2VsZWN0aW9uKGksdGhpcy50aW1lU2VsZWN0aW9uKTt0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7dGltZVNlbGVjdGlvbjpyfSksdGhpcy5oYXNGb2JNb3ZlZD0hMH1tb3VzZU92ZXJQcm9zcGVjdGl2ZUZvYkFyZWEoZSl7aWYobnVsbCE9dGhpcy50aW1lU2VsZWN0aW9uPy5lbmQpcmV0dXJuO2xldCBpPXRoaXMuZ2V0TmV3U3RlcEZyb21Nb3VzZUV2ZW50KGUpO251bGwhPT1pJiZ0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KGkpfWlzTW92aW5nTG93ZXIoZSxpKXtpZih0aGlzLmN1cnJlbnREcmFnZ2luZ0ZvYj09PU9yLk5PTkUmJm51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4hMDtsZXQgcj10aGlzLmdldEN1cnJlbnRGb2JTdGVwKCk7cmV0dXJuIHZvaWQgMCE9PXImJmU8dGhpcy5nZXREcmFnZ2luZ0ZvYkNlbnRlcigpJiZpPDAmJnI+dGhpcy5sb3dlc3RTdGVwfWlzTW92aW5nSGlnaGVyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Pci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPnRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaT4wJiZyPHRoaXMuaGlnaGVzdFN0ZXB9Z2V0RHJhZ2dpbmdGb2JDZW50ZXIoKXtsZXQgZT10aGlzLmdldEN1cnJlbnRGb2IoKT8ubmF0aXZlRWxlbWVudDtpZighZSlyZXR1cm4gMDtsZXQgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09ZnMuVkVSVElDQUw/aS10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ci10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fWdldEN1cnJlbnRGb2IoKXtzd2l0Y2godGhpcy5jdXJyZW50RHJhZ2dpbmdGb2Ipe2Nhc2UgT3IuU1RBUlQ6cmV0dXJuIHRoaXMuc3RhcnRGb2JXcmFwcGVyO2Nhc2UgT3IuRU5EOnJldHVybiB0aGlzLmVuZEZvYldyYXBwZXI7Y2FzZSBPci5OT05FOnJldHVybiB0aGlzLnByb3NwZWN0aXZlRm9iV3JhcHBlcn19Z2V0Q3VycmVudEZvYlN0ZXAoKXtzd2l0Y2godGhpcy5jdXJyZW50RHJhZ2dpbmdGb2Ipe2Nhc2UgT3IuU1RBUlQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uc3RhcnQuc3RlcDtjYXNlIE9yLkVORDpyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/LnN0ZXA7Y2FzZSBPci5OT05FOnJldHVybiB0aGlzLnByb3NwZWN0aXZlU3RlcD8/dm9pZCAwfX1nZXRNb3VzZVBvc2l0aW9uRnJvbUV2ZW50KGUpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1mcy5WRVJUSUNBTD9lLmNsaWVudFktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOmUuY2xpZW50WC10aGlzLnJvb3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fXN0ZXBUeXBlZChlLGkpe2lmKG51bGw9PT1pKXJldHVybiB2b2lkKG51bGwhPT10aGlzLnRpbWVTZWxlY3Rpb24uZW5kJiZ0aGlzLm9uRm9iUmVtb3ZlZChlKSk7bGV0IHI9ey4uLnRoaXMudGltZVNlbGVjdGlvbn07ZT09PU9yLlNUQVJUP3Iuc3RhcnQ9e3N0ZXA6aX06ZT09PU9yLkVORCYmKHIuZW5kPXtzdGVwOml9KSxudWxsIT09ci5lbmQmJnIuc3RhcnQuc3RlcD5yLmVuZC5zdGVwJiYocj17c3RhcnQ6ci5lbmQsZW5kOnIuc3RhcnR9KSx0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7dGltZVNlbGVjdGlvbjpyLGFmZm9yZGFuY2U6cXMuRk9CX1RFWFR9KX1wcm9zcGVjdGl2ZUZvYkNsaWNrZWQoZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtsZXQgaT10aGlzLmdldFByb3NwZWN0aXZlVGltZVNlbGVjdGlvbigpOyFpfHwodGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6cXMuRk9CX0FEREVELHRpbWVTZWxlY3Rpb246aX0pLHRoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCkpfWdldFByb3NwZWN0aXZlVGltZVNlbGVjdGlvbigpe2lmKHRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/e3N0YXJ0OntzdGVwOk1hdGgubWluKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLHRoaXMucHJvc3BlY3RpdmVTdGVwKX0sZW5kOntzdGVwOk1hdGgubWF4KHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLHRoaXMucHJvc3BlY3RpdmVTdGVwKX19OntzdGFydDp7c3RlcDp0aGlzLnByb3NwZWN0aXZlU3RlcH0sZW5kOm51bGx9fW9uRm9iUmVtb3ZlZChlKXtlIT09T3IuRU5EP251bGw9PT10aGlzLnRpbWVTZWxlY3Rpb24uZW5kP3RoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KCk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6cXMuRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7c3RhcnQ6dGhpcy50aW1lU2VsZWN0aW9uLmVuZCxlbmQ6bnVsbH19KTp0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7YWZmb3JkYW5jZTpxcy5GT0JfUkVNT1ZFRCx0aW1lU2VsZWN0aW9uOnsuLi50aGlzLnRpbWVTZWxlY3Rpb24sZW5kOm51bGx9fSl9b25Qcm9zcGVjdGl2ZUFyZWFNb3VzZUxlYXZlKCl7dGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtZm9iLWNvbnRyb2xsZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoJExlLDUpLEdlKGUzZSw1KSxHZSh0M2UsNSkpLDImZSl7bGV0IHI7U2Uocj1FZSgpKSYmKGkuc3RhcnRGb2JXcmFwcGVyPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmVuZEZvYldyYXBwZXI9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkucHJvc3BlY3RpdmVGb2JXcmFwcGVyPXIuZmlyc3QpfX0saW5wdXRzOntheGlzRGlyZWN0aW9uOiJheGlzRGlyZWN0aW9uIix0aW1lU2VsZWN0aW9uOiJ0aW1lU2VsZWN0aW9uIixjYXJkRm9iSGVscGVyOiJjYXJkRm9iSGVscGVyIixzdGFydFN0ZXBBeGlzUG9zaXRpb246InN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsZW5kU3RlcEF4aXNQb3NpdGlvbjoiZW5kU3RlcEF4aXNQb3NpdGlvbiIsaGlnaGVzdFN0ZXA6ImhpZ2hlc3RTdGVwIixsb3dlc3RTdGVwOiJsb3dlc3RTdGVwIixzaG93RXh0ZW5kZWRMaW5lOiJzaG93RXh0ZW5kZWRMaW5lIixwcm9zcGVjdGl2ZVN0ZXA6InByb3NwZWN0aXZlU3RlcCIscHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uOiJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGFsbG93Rm9iUmVtb3ZhbDoiYWxsb3dGb2JSZW1vdmFsIn0sb3V0cHV0czp7b25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25UaW1lU2VsZWN0aW9uVG9nZ2xlZDoib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsb25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkOiJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQifSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsImFsbG93UmVtb3ZhbCIsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiKSxPdCgxKSxTKDIsaTNlLDQsNywiZGl2IiwwKSxoKDMsImRpdiIsMSksSSgibW91c2Vtb3ZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZU92ZXJQcm9zcGVjdGl2ZUZvYkFyZWEobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLnByb3NwZWN0aXZlRm9iQ2xpY2tlZChvKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpfSksZygpLGt0KCksUyg0LG8zZSw0LDYsImRpdiIsMCksUyg1LGEzZSw0LDUsImRpdiIsMCksZygpKSwyJmUmJih2KDIpLF8oIm5nSWYiLG51bGwhPT1pLnByb3NwZWN0aXZlU3RlcCksdigxKSxfKCJuZ0NsYXNzIixpLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpLHYoMSksXygibmdJZiIsaS50aW1lU2VsZWN0aW9uKSx2KDEpLF8oIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W3luLEZlLHp0ZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxNVj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlSW50ZXJhY3Rpb249ITEsdGhpcy5hbGxvd0ZvYlJlbW92YWw9ITAsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBGLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRix0aGlzLmF4aXNEaXJlY3Rpb249ZnMuSE9SSVpPTlRBTCx0aGlzLmNhcmRGb2JIZWxwZXI9e2dldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uOnRoaXMuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKSxnZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uOnRoaXMuZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpfSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsfWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3RoaXMuc2NhbGUuZm9yd2FyZCh0aGlzLm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kLFswLHRoaXMuYXhpc1NpemVdLHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKToiIn1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LmVuZD90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24/LmVuZC5zdGVwPz90aGlzLm1pbk1heFN0ZXAubWF4U3RlcCk6bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tUHJvc3BlY3RpdmVTdGVwKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD9udWxsOnRoaXMuc2NhbGUuZm9yd2FyZCh0aGlzLm1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kLFswLHRoaXMuYXhpc1NpemVdLHRoaXMucHJvc3BlY3RpdmVTdGVwKX1vblByb3NwZWN0aXZlU3RlcENoYW5nZWQoZSl7dGhpcy5wcm9zcGVjdGl2ZVN0ZXA9ZX1nZXRIaWdoZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWF4U3RlcH1nZXRMb3dlc3RTdGVwKCl7cmV0dXJuIHRoaXMubWluTWF4U3RlcC5taW5TdGVwfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe3JldHVybiB0aGlzLmdldFN0ZXBBdE1vdXNlUG9zdGlvbihlKX1nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe3JldHVybiB0aGlzLmdldFN0ZXBBdE1vdXNlUG9zdGlvbihlKX1nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl7bGV0IGk9TWF0aC5yb3VuZCh0aGlzLnNjYWxlLnJldmVyc2UodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSxlKSk7cmV0dXJuIGk+dGhpcy5nZXRIaWdoZXN0U3RlcCgpP3RoaXMuZ2V0SGlnaGVzdFN0ZXAoKTppPHRoaXMuZ2V0TG93ZXN0U3RlcCgpP3RoaXMuZ2V0TG93ZXN0U3RlcCgpOml9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIl1dLGlucHV0czp7dGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsc2NhbGU6InNjYWxlIixtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZDoibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG1pbk1heFN0ZXA6Im1pbk1heFN0ZXAiLGF4aXNTaXplOiJheGlzU2l6ZSIsZGlzYWJsZUludGVyYWN0aW9uOiJkaXNhYmxlSW50ZXJhY3Rpb24iLGFsbG93Rm9iUmVtb3ZhbDoiYWxsb3dGb2JSZW1vdmFsIn0sb3V0cHV0czp7b25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25UaW1lU2VsZWN0aW9uVG9nZ2xlZDoib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJ9LGRlY2xzOjEsdmFyczoxMyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJwcm9zcGVjdGl2ZVN0ZXAiLCJjYXJkRm9iSGVscGVyIiwic2hvd0V4dGVuZGVkTGluZSIsImFsbG93Rm9iUmVtb3ZhbCIsIm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJjYXJkLWZvYi1jb250cm9sbGVyIiwwKSxJKCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZChvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQobyl9KSgib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KG8pfSksZygpKSwyJmUmJihUdCgicG9pbnRlci1ldmVudHMiLGkuZGlzYWJsZUludGVyYWN0aW9uPyJub25lIjoiYWxsIiksXygiYXhpc0RpcmVjdGlvbiIsaS5heGlzRGlyZWN0aW9uKSgidGltZVNlbGVjdGlvbiIsaS50aW1lU2VsZWN0aW9uKSgic3RhcnRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKSkoImVuZFN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKSkoInByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tUHJvc3BlY3RpdmVTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXAiLGkucHJvc3BlY3RpdmVTdGVwKSgiY2FyZEZvYkhlbHBlciIsaS5jYXJkRm9iSGVscGVyKSgic2hvd0V4dGVuZGVkTGluZSIsITApKCJhbGxvd0ZvYlJlbW92YWwiLGkuYWxsb3dGb2JSZW1vdmFsKSl9LGRlcGVuZGVuY2llczpbcEFdLHN0eWxlczpbInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIC50aW1lLWZvYi13cmFwcGVye2hlaWdodDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYzNlPVsiZGF0YVRhYmxlQ29udGFpbmVyIl07ZnVuY3Rpb24gZDNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwyNyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxQKDEsIm1hdC1pY29uIiwyOCksaCgyLCJzcGFuIiksVCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSxnKCkoKX19ZnVuY3Rpb24gdTNlKG4sdCl7MSZuJiZQKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24gcDNlKG4sdCl7MSZuJiYoaCgwLCJ0aCIpLFQoMSwiU21vb3RoZWQiKSxnKCkpfWZ1bmN0aW9uIGYzZShuLHQpe2lmKDEmbiYmKE90KDApLFAoMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLFQoMiwiLyIpLGt0KCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDEpLF8oImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gbTNlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0ZCIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKS4kaW1wbGljaXQsaT13KDIpO3YoMSksSGUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gaDNlKG4sdCl7aWYoMSZuJiYoT3QoMCksaCgxLCJ0ciIsMzMpKDIsInRkIiwzNCksUCgzLCJzcGFuIiksZygpLGgoNCwidGQiLDIpLFMoNSxmM2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxUKDYpLGcoKSxTKDcsbTNlLDIsMSwidGQiLDI0KSxoKDgsInRkIiksVCg5KSxnKCksaCgxMCwidGQiKSxUKDExKSxnKCksaCgxMiwidGQiKSxUKDEzKSxqKDE0LCJkYXRlIiksZygpLGgoMTUsInRkIiksVCgxNiksZygpKCksa3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7digxKSxudCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx2KDIpLFR0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx2KDIpLF8oIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHYoMSksSGUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHYoMSksXygibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx2KDIpLGJ0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx2KDIpLGJ0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSksdigyKSxidChxcCgxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSksdigzKSxIZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gZzNlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxQKDMsInRoIiwzMSksaCg0LCJ0aCIpLFQoNSwiUnVuIiksZygpLFMoNixwM2UsMiwwLCJ0aCIsMjQpLGgoNywidGgiKSxUKDgsIlZhbHVlIiksZygpLGgoOSwidGgiKSxUKDEwLCJTdGVwIiksZygpLGgoMTEsInRoIiksVCgxMiwiVGltZSIpLGcoKSxoKDEzLCJ0aCIpLFQoMTQsIlJlbGF0aXZlIiksZygpKCkoKSxoKDE1LCJ0Ym9keSIpLFMoMTYsaDNlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSxnKCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89dygpO3YoNiksXygibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx2KDEwKSxfKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBfM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDQxKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoMikudG9nZ2xlVGFibGVFeHBhbmRlZCgpKX0pLFAoMSwibWF0LWljb24iLDkpLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygidGl0bGUiLGUuc2hvdWxkRXhwYW5kVGFibGUoKT8iRXhwYW5kIFRhYmxlIjoiQ29sbGFwc2UgVGFibGUiKSx2KDEpLF8oInN2Z0ljb24iLGUuc2hvdWxkRXhwYW5kVGFibGUoKT8iZXhwYW5kX21vcmVfMjRweCI6ImV4cGFuZF9sZXNzXzI0cHgiKX19dmFyIGIzZT1mdW5jdGlvbihuKXtyZXR1cm57ImRhdGEtdGFibGUtY29udGFpbmVyIjohMCxleHBhbmRlZDpufX07ZnVuY3Rpb24gdjNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiZGl2IiwzNiwzNykoMywic2NhbGFyLWNhcmQtZGF0YS10YWJsZSIsMzgpLEkoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnNvcnREYXRhQnkocikpfSkoImVkaXRDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJlbW92ZUNvbHVtbi5lbWl0KHIpKX0pLGcoKSgpLGgoNCwiZGl2IiwzOSksUyg1LF8zZSwyLDIsImJ1dHRvbiIsNDApLGcoKSxrdCgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygibmdDbGFzcyIsSW4oMTAsYjNlLGUuY2FyZFN0YXRlLnRhYmxlRXhwYW5kZWQpKSx2KDIpLF8oImNoYXJ0TWV0YWRhdGFNYXAiLGUuY2hhcnRNZXRhZGF0YU1hcCkoImRhdGFTZXJpZXMiLGUuZGF0YVNlcmllcykoInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGUuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoImNvbHVtbkhlYWRlcnMiLGUuY29sdW1uSGVhZGVycykoInNvcnRpbmdJbmZvIixlLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGUuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixlLnNtb290aGluZ0VuYWJsZWQpKCJocGFyYW1zRW5hYmxlZCIsZS5ocGFyYW1zRW5hYmxlZCksdigyKSxfKCJuZ0lmIixlLmNhbkV4cGFuZFRhYmxlKCkpfX12YXIgeTNlPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSx4M2U9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBDM2Uobix0KXtpZigxJm4mJlAoMCwiZGl2IiwzNiksMiZuKXtsZXQgZT13KDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPXcoKTtUdCgibGVmdCIsby5mb3J3YXJkKGkueCxJbigzLHkzZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSxfKCJuZ0NsYXNzIixjdSg1LHgzZSkpfX12YXIgTTNlPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSx3M2U9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIFMzZShuLHQpe2lmKDEmbiYmKE90KDApLFAoMSwiZGl2IiwzNiksUygyLEMzZSwxLDYsImRpdiIsNDIpLGt0KCkpLDImbil7bGV0IGU9dygpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPXcoKTt2KDEpLFR0KCJyaWdodCIsby5mb3J3YXJkKGkueCxJbig0LE0zZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IiksXygibmdDbGFzcyIsSW4oNix3M2UsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLHYoMSksXygibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIEUzZShuLHQpezEmbiYmUygwLFMzZSwzLDgsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmXygibmdJZiIsdygpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIFQzZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtPdCgwKSxoKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiw0MyksSSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChyKSl9KSgib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoMikub25Gb2JSZW1vdmVkKCkpfSksZygpLGt0KCl9aWYoMiZuKXtsZXQgZT13KCksaT1lLmludGVyYWN0aW9uU3RhdGUscj1lLnhTY2FsZSxvPWUudmlld0V4dGVudCxzPWUuZG9tRGltZW5zaW9uLGE9dygpO3YoMSksXygiZGlzYWJsZUludGVyYWN0aW9uIiwiTk9ORSIhPT1pKSgidGltZVNlbGVjdGlvbiIsYS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgic2NhbGUiLHIpKCJtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCIsby54KSgibWluTWF4U3RlcCIsYS5taW5NYXhTdGVwKSgiYXhpc1NpemUiLHMud2lkdGgpfX1mdW5jdGlvbiBEM2Uobix0KXsxJm4mJlMoMCxUM2UsMiw2LCJuZy1jb250YWluZXIiLDI0KSwyJm4mJl8oIm5nSWYiLHcoKS5zaG93Rm9iQ29udHJvbGxlcigpKX12YXIgR3RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnJlZj1lLHRoaXMuZGlhbG9nPWksdGhpcy5EYXRhTG9hZFN0YXRlPVRlLHRoaXMuUmVuZGVyZXJUeXBlPVFpLHRoaXMuU2NhbGVUeXBlPW5yLHRoaXMub25GdWxsU2l6ZVRvZ2dsZT1uZXcgRix0aGlzLm9uUGluQ2xpY2tlZD1uZXcgRix0aGlzLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEYsdGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEYsdGhpcy5vbkRhdGFUYWJsZVNvcnRpbmc9bmV3IEYsdGhpcy5lZGl0Q29sdW1uSGVhZGVycz1uZXcgRix0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlPW5ldyBGLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBGLHRoaXMub25MaW5lQ2hhcnRab29tPW5ldyBGLHRoaXMub25DYXJkU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuc29ydGluZ0luZm89e25hbWU6InJ1biIsb3JkZXI6aW8uQVNDRU5ESU5HfSx0aGlzLnlTY2FsZVR5cGU9bnIuTElORUFSLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj0hMSx0aGlzLnJlbGF0aXZlWEZvcm1hdHRlcj1fMCx0aGlzLnZhbHVlRm9ybWF0dGVyPWlwLHRoaXMuc3RlcEZvcm1hdHRlcj1nMH10b2dnbGVZU2NhbGVUeXBlKCl7dGhpcy55U2NhbGVUeXBlPXRoaXMueVNjYWxlVHlwZT09PW5yLkxJTkVBUj9uci5MT0cxMDpuci5MSU5FQVJ9c29ydERhdGFCeShlKXt0aGlzLnNvcnRpbmdJbmZvPWUsdGhpcy5vbkRhdGFUYWJsZVNvcnRpbmcuZW1pdChlKX1yZXNldERvbWFpbigpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC52aWV3Qm94UmVzZXQoKX10cmFja0J5VG9vbHRpcERhdHVtKGUsaSl7cmV0dXJuIGkuaWR9Z2V0Q3VzdG9tWEZvcm1hdHRlcigpe3N3aXRjaCh0aGlzLnhBeGlzVHlwZSl7Y2FzZSBQaS5SRUxBVElWRTpyZXR1cm4gXzA7Y2FzZSBQaS5TVEVQOnJldHVybiBsMztkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscil7bGV0IG89ZS5tYXAobD0+KHsuLi5sLG1ldGFkYXRhOnsuLi5sLm1ldGFkYXRhLGNsb3Nlc3Q6ITEsZGlzdFRvQ3Vyc29yUGl4ZWxzOk1hdGguaHlwb3QobC5kb21Qb2ludC54LXIueCxsLmRvbVBvaW50Lnktci55KSxkaXN0VG9DdXJzb3JYOmwuZGF0YVBvaW50LngtaS54LGRpc3RUb0N1cnNvclk6bC5kYXRhUG9pbnQueS1pLnl9fSkpLHM9MS8wLGE9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoO2wrKylzPm9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzJiYocz1vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyxhPWwpO3N3aXRjaChvLmxlbmd0aCYmKG9bYV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBvby5BU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5kYXRhUG9pbnQueS1jLmRhdGFQb2ludC55KTtjYXNlIG9vLkRFU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+Yy5kYXRhUG9pbnQueS1sLmRhdGFQb2ludC55KTtjYXNlIG9vLk5FQVJFU1Q6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMtYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMpO2Nhc2Ugb28uTkVBUkVTVF9ZOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWS1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclkpO2Nhc2Ugb28uREVGQVVMVDpjYXNlIG9vLkFMUEhBQkVUSUNBTDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3BsYXlOYW1lPGMubWV0YWRhdGEuZGlzcGxheU5hbWU/LTE6bC5tZXRhZGF0YS5kaXNwbGF5TmFtZT5jLm1ldGFkYXRhLmRpc3BsYXlOYW1lPzE6MCl9fW9wZW5EYXRhRG93bmxvYWREaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50LHtkYXRhOntjYXJkSWQ6dGhpcy5jYXJkSWR9fSl9b25Gb2JSZW1vdmVkKCl7dGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdChZcy5GT0JfREVTRUxFQ1QpfXNob3dEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1QaS5TVEVQJiZ0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb259c2hvd0ZvYkNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1QaS5TVEVQJiZ0aGlzLm1pbk1heFN0ZXB9Y2FuRXhwYW5kVGFibGUoKXtyZXR1cm4gdGhpcy5kYXRhU2VyaWVzLmZpbHRlcihpPT5IUyhpLHRoaXMuY2hhcnRNZXRhZGF0YU1hcCkpLmxlbmd0aD4zfXNob3VsZEV4cGFuZFRhYmxlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5kYXRhVGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0fHwhdGhpcy5jYXJkU3RhdGU/LnRhYmxlRXhwYW5kZWQpfXRvZ2dsZVRhYmxlRXhwYW5kZWQoKXt0aGlzLm9uQ2FyZFN0YXRlQ2hhbmdlZC5lbWl0KHsuLi50aGlzLmNhcmRTdGF0ZSx0YWJsZUV4cGFuZGVkOnRoaXMuc2hvdWxkRXhwYW5kVGFibGUoKX0pLHRoaXMuZGF0YVRhYmxlQ29udGFpbmVyJiYodGhpcy5kYXRhVGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQ9IiIpfW9wZW5UYWJsZUVkaXRNZW51KCl7dGhpcy5vcGVuVGFibGVFZGl0TWVudVRvTW9kZS5lbWl0KHRoaXMucmFuZ2VFbmFibGVkP3JvLlJBTkdFOnJvLlNJTkdMRSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoTWUpLEMoemwpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoY18sNSksR2UoYzNlLDUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLmxpbmVDaGFydD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5kYXRhVGFibGVDb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixjaGFydE1ldGFkYXRhTWFwOiJjaGFydE1ldGFkYXRhTWFwIixjYXJkU3RhdGU6ImNhcmRTdGF0ZSIsRGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIsaXNDYXJkVmlzaWJsZToiaXNDYXJkVmlzaWJsZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsc21vb3RoaW5nRW5hYmxlZDoic21vb3RoaW5nRW5hYmxlZCIsdGFnOiJ0YWciLHRpdGxlOiJ0aXRsZSIsdG9vbHRpcFNvcnQ6InRvb2x0aXBTb3J0Iix4QXhpc1R5cGU6InhBeGlzVHlwZSIseFNjYWxlVHlwZToieFNjYWxlVHlwZSIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIixmb3JjZVN2ZzoiZm9yY2VTdmciLGNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkOiJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbjoic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsdXNlclZpZXdCb3g6InVzZXJWaWV3Qm94Iixjb2x1bW5IZWFkZXJzOiJjb2x1bW5IZWFkZXJzIixyYW5nZUVuYWJsZWQ6InJhbmdlRW5hYmxlZCIsaHBhcmFtc0VuYWJsZWQ6ImhwYXJhbXNFbmFibGVkIn0sb3V0cHV0czp7b25GdWxsU2l6ZVRvZ2dsZToib25GdWxsU2l6ZVRvZ2dsZSIsb25QaW5DbGlja2VkOiJvblBpbkNsaWNrZWQiLG9uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uU3RlcFNlbGVjdG9yVG9nZ2xlZDoib25TdGVwU2VsZWN0b3JUb2dnbGVkIixvbkRhdGFUYWJsZVNvcnRpbmc6Im9uRGF0YVRhYmxlU29ydGluZyIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIixvcGVuVGFibGVFZGl0TWVudVRvTW9kZToib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLHJlbW92ZUNvbHVtbjoicmVtb3ZlQ29sdW1uIixvbkxpbmVDaGFydFpvb206Im9uTGluZUNoYXJ0Wm9vbSIsb25DYXJkU3RhdGVDaGFuZ2VkOiJvbkNhcmRTdGF0ZUNoYW5nZWQifSxkZWNsczozOCx2YXJzOjI5LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsaSxyLG8scztyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgcmVzZXRzIGxpbmUgY2hhcnQgZG9tYWluIHRvIHRoZSBkYXRh4pCfZTY4YTU1Mjk0MWFiNDI3YTk5ZTc0MzdlMDg0NDNmMzBhYzcxY2NkNuKQnzM4MzA2NDY1MjEwNTgyNjg1NTg6Rml0IGxpbmUgY2hhcnQgZG9tYWlucyB0byBkYXRhYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsaT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGxpbmUgY2hhcnQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxyPSRsb2NhbGl6ZWA6QW4gb3ZlcmZsb3cgbWVudSBidXR0b24gdGhhdCBvcGVucyBtb3JlIGxpbmUgY2hhcnQgb3B0aW9uc+KQn2IyNjBmYWI5NDZhMzA3N2NlMjBmZDI4ZTMzNjk3OWY1ODY3MjBlOGTikJ84NzgwNTM3NDAyMTAzMzY0MzU6TW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnNgLG89JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgbG9nIHNjYWxlIG9uIHktYXhpcyBvbiBhIGxpbmUgY2hhcnTikJ9mZTkxZjk2YWI5YjNiYWNhNWE0ODkxM2YyYjBmYWU4NDQ4M2Q5M2Uz4pCfMzM3NDY0NTYyMDYzODg4MzkyNjpUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSBvbiBsaW5lIGNoYXJ0YCxzPSRsb2NhbGl6ZWA6RXhwYW5kIFRhYmxl4pCfOWU1OWZmNTBiZmNiNDc5MjcyZTJiMTAzZTFlOWIxMTUxOGUyZTRjZeKQnzYzNzQ4ODAzNDEzOTMwMjA2MTA6RXhwYW5kIFRhYmxlYCxbWzEsImFsd2F5cy12aXNpYmxlIl0sWzEsImhlYWRpbmciXSxbMSwibmFtZSJdLFsxLCJ0YWciLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImRpc2FibGVkIiwidGl0bGUiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzX292ZXJzY2FuXzI0cHgiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMywiY2xpY2siXSxbMywic3ZnSWNvbiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJUb2dnbGUgZnVsbCBzaXplIG1vZGUiLDMsImNsaWNrIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixyLCJ0aXRsZSIsIk1vcmUgbGluZSBjaGFydCBvcHRpb25zIiwzLCJtYXRNZW51VHJpZ2dlckZvciJdLFsic3ZnSWNvbiIsIm1vcmVfdmVydF8yNHB4Il0sWyJtZW51IiwibWF0TWVudSJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLG8sMywiY2xpY2siXSxbInN2Z0ljb24iLCJsaW5lX3dlaWdodF8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gZGlhbG9nIHRvIGRvd25sb2FkIGRhdGEiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZ2V0X2FwcF8yNHB4Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2hhcnQtY29udGFpbmVyIl0sWyJjaGFydENvbnRhaW5lciIsIiJdLFsiZGlhbWV0ZXIiLCIxOCIsNCwibmdJZiJdLFszLCJkaXNhYmxlVXBkYXRlIiwicHJlZmVycmVkUmVuZGVyZXJUeXBlIiwic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwieFNjYWxlVHlwZSIsInlTY2FsZVR5cGUiLCJjdXN0b21YRm9ybWF0dGVyIiwiaWdub3JlWU91dGxpZXJzIiwidG9vbHRpcFRlbXBsYXRlIiwidXNlRGFya01vZGUiLCJ1c2VyVmlld0JveCIsImN1c3RvbVZpc1RlbXBsYXRlIiwiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLCJvblZpZXdCb3hPdmVycmlkZGVuIiwidmlld0JveENoYW5nZWQiXSxbInRvb2x0aXAiLCIiXSxbNCwibmdJZiJdLFsibGluZUNoYXJ0Q3VzdG9tVmlzIiwiIl0sWyJsaW5lQ2hhcnRDdXN0b21YQXhpc1ZpcyIsIiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJkaWFtZXRlciIsIjE4Il0sWzEsInRvb2x0aXAiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwidG9vbHRpcC1yb3ciXSxbMSwidG9vbHRpcC1yb3ctY2lyY2xlIl0sWzMsImFsaWFzIl0sWzMsIm5nQ2xhc3MiXSxbImRhdGFUYWJsZUNvbnRhaW5lciIsIiJdLFszLCJjaGFydE1ldGFkYXRhTWFwIiwiZGF0YVNlcmllcyIsInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLCJjb2x1bW5IZWFkZXJzIiwic29ydGluZ0luZm8iLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsInNtb290aGluZ0VuYWJsZWQiLCJocGFyYW1zRW5hYmxlZCIsInNvcnREYXRhQnkiLCJlZGl0Q29sdW1uSGVhZGVycyIsInJlbW92ZUNvbHVtbiJdLFsxLCJib3R0b20tYXJlYSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiY2xhc3MiLCJleHBhbmQtYnV0dG9uIiwiYXJpYS1sYWJlbCIscywzLCJ0aXRsZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixzLDEsImV4cGFuZC1idXR0b24iLDMsInRpdGxlIiwiY2xpY2siXSxbMywibmdDbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMywiZGlzYWJsZUludGVyYWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInNjYWxlIiwibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLCJtaW5NYXhTdGVwIiwiYXhpc1NpemUiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxQKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLGcoKSxoKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXREb21haW4oKX0pLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksUCg5LCJtYXQtaWNvbiIsNyksZygpLGgoMTAsImJ1dHRvbiIsOCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksUCgxMSwibWF0LWljb24iLDkpLGcoKSxoKDEyLCJidXR0b24iLDEwKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLFAoMTMsIm1hdC1pY29uIiw5KSxnKCksaCgxNCwiYnV0dG9uIiwxMSksUCgxNSwibWF0LWljb24iLDEyKSxnKCksaCgxNiwibWF0LW1lbnUiLG51bGwsMTMpKDE4LCJidXR0b24iLDE0KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVZU2NhbGVUeXBlKCl9KSxQKDE5LCJtYXQtaWNvbiIsMTUpLGgoMjAsInNwYW4iKSxUKDIxLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLGcoKSgpLGgoMjIsImJ1dHRvbiIsMTYpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pLFAoMjMsIm1hdC1pY29uIiwxNyksaCgyNCwic3BhbiIpLFQoMjUsIkRvd25sb2FkIGRhdGEiKSxnKCkoKSxTKDI2LGQzZSw0LDAsImJ1dHRvbiIsMTgpLGcoKSgpKCksaCgyNywiZGl2IiwxOSwyMCksUygyOSx1M2UsMSwwLCJtYXQtc3Bpbm5lciIsMjEpLGgoMzAsImxpbmUtY2hhcnQiLDIyKSxJKCJvblZpZXdCb3hPdmVycmlkZGVuIixmdW5jdGlvbihvKXtyZXR1cm4gaS5pc1ZpZXdCb3hPdmVycmlkZGVuPW99KSgidmlld0JveENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbS5lbWl0KG8pfSksZygpLFMoMzEsZzNlLDE3LDMsIm5nLXRlbXBsYXRlIixudWxsLDIzLFd0KSxnKCkoKSxTKDMzLHYzZSw2LDEyLCJuZy1jb250YWluZXIiLDI0KSxTKDM0LEUzZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI1LFd0KSxTKDM2LEQzZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI2LFd0KSksMiZlKXtsZXQgcj1pdCgxNyksbz1pdCgzMikscz1pdCgzNSksYT1pdCgzNyk7digzKSxXaSgidGl0bGUiLGkudGFnKSxXaSgidmFsdWUiLGkudGl0bGUpLHYoMSksXygiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSx2KDIpLF8oImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFXKDcsMjUsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVyg4LDI3LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSx2KDQpLEJlKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksdigxKSxfKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHYoMiksXygic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHYoMSksXygibWF0TWVudVRyaWdnZXJGb3IiLHIpLHYoMTIpLF8oIm5nSWYiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLHYoMyksXygibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksdigxKSxfKCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgidXNlclZpZXdCb3giLGkudXNlclZpZXdCb3gpKCJjdXN0b21WaXNUZW1wbGF0ZSIscykoImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIixhKSx2KDMpLF8oIm5nSWYiLGkuc2hvd0RhdGFUYWJsZSgpKX19LGRlcGVuZGVuY2llczpbeW4sbm4sRmUsUXUsY18sJGksRW4sTmMsamwsTGMsdGwsSHRlLE1WLFhnLFFnLGN0LGdoXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO3BhZGRpbmc6MTZweDtwYWRkaW5nLXRvcDo0cHh9W19uZ2hvc3QtJUNPTVAlXTpoYXMoLmV4cGFuZC1idXR0b24pe3BhZGRpbmc6NHB4IDE2cHggMH0uYWx3YXlzLXZpc2libGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1iYXNpczoyOThweH0uYWx3YXlzLXZpc2libGVbX25nY29udGVudC0lQ09NUCVdOm5vdCg6aGFzKC5leHBhbmQtYnV0dG9uKSl7ZmxleC1ncm93OjF9LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjE0cHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjVweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBhdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjJlbTtsaW5lLWhlaWdodDowfS50YWdbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBBM2Uobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxzPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+e2xldCBjPXNbbF07cmV0dXJuIGEueD09PWMueCYmYS55PT09Yy55fSl9KX12YXIgV3RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PWtRLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBGLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KFJsKSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChnZiksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoaGYpLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChPbCksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3QoeUYpLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGRTKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KE9sKS5waXBlKE4oaT0+e3N3aXRjaChpKXtjYXNlIFBpLlNURVA6Y2FzZSBQaS5SRUxBVElWRTpyZXR1cm4gbnIuTElORUFSO2Nhc2UgUGkuV0FMTF9USU1FOnJldHVybiBuci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoYmQpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoYmQpLnBpcGUoTihpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHFhKS5waXBlKE4oaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXpuLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goQmcoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFdhLHRoaXMuY2FyZElkKS5waXBlKGtlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksTihsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KEN1LHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksa2UobD0+Qm9vbGVhbihsKSksTihsPT5sKSxNcygxKSkucGlwZShMaSh0aGlzLnN0b3JlLnNlbGVjdChPbCkpLE4oKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLFluKEEzZSkpLnBpcGUoTGkodGhpcy5zdG9yZS5zZWxlY3QobjEpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE4oKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcChkPT4oey4uLmQsc2VyaWVzSWQ6ZC5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksTihsPT5sLm1hcChjPT57bGV0IGQ9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAodT0+KHsuLi51LHJlbGF0aXZlVGltZUluTXM6dS53YWxsVGltZS1kfSkpfX0pKSxMaSh0aGlzLnN0b3JlLnNlbGVjdChPbCkpLE4oKFtsLGNdKT0+bC5tYXAoZD0+KHsuLi5kLHBvaW50czpkLnBvaW50cy5tYXAodT0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFBpLlJFTEFUSVZFOnA9dS5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgUGkuV0FMTF9USU1FOnA9dS53YWxsVGltZTticmVhaztkZWZhdWx0OnA9dS5zdGVwfXJldHVybnsuLi51LHg6cH19KX0pKSksTXMoMSkpO3RoaXMudXNlclZpZXdCb3gkPXRoaXMuc3RvcmUuc2VsZWN0KFFGLHRoaXMuY2FyZElkKSx0aGlzLm1pbk1heFN0ZXBzJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoRVcsdGhpcy5jYXJkSWQpLHRoaXMuc3RvcmUuc2VsZWN0KFRXLHRoaXMuY2FyZElkKV0pLnBpcGUoTigoW2wsY10pPT57aWYobCYmYylyZXR1cm57bWluU3RlcDpNYXRoLm1heChsPy5taW5TdGVwLGM/Lm1pblN0ZXApLG1heFN0ZXA6TWF0aC5taW4obD8ubWF4U3RlcCxjPy5tYXhTdGVwKX19KSksdGhpcy5kYXRhU2VyaWVzJD1hLnBpcGUoTGkodGhpcy5zdG9yZS5zZWxlY3QoYmQpKSxKbigoW2wsY10pPT57bGV0IGQ9bC5tYXAoKHtzZXJpZXNJZDp1LHBvaW50czpwfSk9Pih7aWQ6dSxwb2ludHM6cH0pKTtyZXR1cm4gYzw9MD9IdChkKTokcihhc3luYyBmdW5jdGlvbihuLHQpe051bWJlci5pc0Zpbml0ZSh0KXx8KHQ9MCksdD1NYXRoLm1heCgwLE1hdGgubWluKHQsMSkpO2xldCBlPVtdO2ZvcihsZXQgaSBvZiBuKXtsZXQgcj1pLnBvaW50c1swXT8ueTtpZihpLnBvaW50cy5ldmVyeShjPT5jLnk9PXIpKXtlLnB1c2goaSk7Y29udGludWV9bGV0IHM9aS5wb2ludHMubGVuZ3RoPjA/MDpOYU4sYT0wLGw9aS5wb2ludHMubWFwKGM9PntsZXQgZD1jLnk7aWYoTnVtYmVyLmlzRmluaXRlKGQpKXtzPXMqdCsoMS10KSpkLGErKztsZXQgdT0xPT09dD8xOjEtTWF0aC5wb3codCxhKTtyZXR1cm57eDpjLngseTpzL3V9fXJldHVybnt4OmMueCx5OmR9fSk7ZS5wdXNoKHtpZDppLmlkLHBvaW50czpsfSl9cmV0dXJuIGV9KGQsYykpLnBpcGUoTih1PT57bGV0IHA9ZC5tYXAoKGYsbSk9Pih7aWQ6cyhmLmlkKSxwb2ludHM6dVttXS5wb2ludHMubWFwKCh7eTpifSxNKT0+KHsuLi5mLnBvaW50c1tNXSx5OmJ9KSl9KSk7cmV0dXJuWy4uLmQsLi4ucF19KSl9KSxxbihbXSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9ZG4oW3RoaXMubWluTWF4U3RlcHMkLHRoaXMuc3RvcmUuc2VsZWN0KHd1KSx0aGlzLnN0b3JlLnNlbGVjdChFdSksdGhpcy5zdG9yZS5zZWxlY3QoT2wpXSkucGlwZShOKChbbCxjLGQsdV0pPT5sJiZjJiZ1PT09UGkuU1RFUCYmZD9VaChkLGwubWluU3RlcCxsLm1heFN0ZXApOm51bGwpKSx0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KERXLHRoaXMuY2FyZElkKSx0aGlzLmNvbHVtbkhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KGQxKHRoaXMuY2FyZElkKSksdGhpcy5jaGFydE1ldGFkYXRhTWFwJD1hLnBpcGUoSm4obD0+ZG4obC5tYXAoYz0+dGhpcy5nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGMucnVuSWQpLnBpcGUoTihkPT4oey4uLmMsLi4uZH0pKSkpKSksTGkodGhpcy5zdG9yZS5zZWxlY3QoSXUpLHRoaXMuc3RvcmUuc2VsZWN0KG1kKSx0aGlzLnN0b3JlLnNlbGVjdCh3USksdGhpcy5zdG9yZS5zZWxlY3QoQXUpLHRoaXMuc3RvcmUuc2VsZWN0KGJkKSksd3IoMCksTigoW2wsYyxkLHUscCxmXSk9PntsZXQgbT17fSxiPWY+MDtmb3IobGV0IE0gb2YgbCl7bGV0e3Nlcmllc0lkOnkscnVuSWQ6eCxkaXNwbGF5TmFtZTpSLGFsaWFzOkEscGFydGl0aW9uSW5kZXg6VixwYXJ0aXRpb25TaXplOnRlfT1NO21beV09e3R5cGU6V2cuT1JJR0lOQUwsaWQ6eSxhbGlhczpBLGRpc3BsYXlOYW1lOnRlPjE/YCR7Un06ICR7Vn1gOlIsdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KHgpJiYoIWR8fHUuaGFzKHgpKSksY29sb3I6cFt4XT8/IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFiKXJldHVybiBtO2ZvcihsZXRbTSx5XW9mIE9iamVjdC5lbnRyaWVzKG0pKXtsZXQgeD1zKE0pO21beF09ey4uLnksaWQ6eCx0eXBlOldnLkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6TX0seS5hdXg9ITAseS5vcGFjaXR5PS4yNX1yZXR1cm4gbX0pLHFuKHt9KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KF9kLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKE4obD0+bC50YWcpKSx0aGlzLmNhcmRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QocWEpLnBpcGUoTihsPT5sW3RoaXMuY2FyZElkXXx8e30pKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShOKGw9PllnKGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoTXUsdGhpcy5jYXJkSWQpLHRoaXMucmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChjMSh0aGlzLmNhcmRJZCkpLHRoaXMuaHBhcmFtc0VuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KG1kKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWVBbmRBbGlhcyhlKXtyZXR1cm4gZG4oW3RoaXMuc3RvcmUuc2VsZWN0KGcxLHtydW5JZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoemEpLHRoaXMuc3RvcmUuc2VsZWN0KF8xLHtydW5JZDplfSldKS5waXBlKE4oKFtpLHIsb10pPT57bGV0IHM9bnVsbCE9PWk/cltpXT8/bnVsbDpudWxsO3JldHVybntkaXNwbGF5TmFtZTpvfHxzP28/Lm5hbWU/PyIuLi4iOmUsYWxpYXM6c319KSl9c3RlcFNlcmllc1RvTGluZVNlcmllcyhlLGkpe2xldCByPWk9PT1QaS5TVEVQO3JldHVybiBlLm1hcChvPT57bGV0IHM9MWUzKm8ud2FsbFRpbWU7cmV0dXJuey4uLm8seDpyP28uc3RlcDpzLHk6by52YWx1ZSx3YWxsVGltZTpzLHJlbGF0aXZlVGltZUluTXM6MH19KX1vbkRhdGFUYWJsZVNvcnRpbmcoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChYWChlKSl9b25DYXJkU3RhdGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZlQoe2NhcmRJZDp0aGlzLmNhcmRJZCxzZXR0aW5nczplfSkpfW9uVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChrZih7Li4uZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSWQoe2FmZm9yZGFuY2U6ZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9b25MaW5lQ2hhcnRab29tKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYnkoe3VzZXJWaWV3Qm94OmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfWVkaXRDb2x1bW5IZWFkZXJzKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemcoZSkpfW9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYVQoe21vZGU6ZX0pKX1vblJlbW92ZUNvbHVtbihlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFVnKHtoZWFkZXI6ZSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZCJdXSxpbnB1dHM6e0RhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUifSxvdXRwdXRzOntwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjI0LHZhcnM6NzIsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLDMsImNhcmRJZCIsImNoYXJ0TWV0YWRhdGFNYXAiLCJEYXRhRG93bmxvYWRDb21wb25lbnQiLCJkYXRhU2VyaWVzIiwiaWdub3JlT3V0bGllcnMiLCJpc0NhcmRWaXNpYmxlIiwiaXNQaW5uZWQiLCJsb2FkU3RhdGUiLCJzaG93RnVsbFdpZHRoIiwic21vb3RoaW5nRW5hYmxlZCIsInRhZyIsInRpdGxlIiwiY2FyZFN0YXRlIiwidG9vbHRpcFNvcnQiLCJ4QXhpc1R5cGUiLCJ4U2NhbGVUeXBlIiwidXNlRGFya01vZGUiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImZvcmNlU3ZnIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJtaW5NYXhTdGVwIiwidXNlclZpZXdCb3giLCJjb2x1bW5IZWFkZXJzIiwicmFuZ2VFbmFibGVkIiwiaHBhcmFtc0VuYWJsZWQiLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25WaXNpYmlsaXR5Q2hhbmdlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsIm9uRGF0YVRhYmxlU29ydGluZyIsIm9uTGluZUNoYXJ0Wm9vbSIsImVkaXRDb2x1bW5IZWFkZXJzIiwib25DYXJkU3RhdGVDaGFuZ2VkIiwib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLCJyZW1vdmVDb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInNjYWxhci1jYXJkLWNvbXBvbmVudCIsMCksSSgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKG8pfSkoIm9uRGF0YVRhYmxlU29ydGluZyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25EYXRhVGFibGVTb3J0aW5nKG8pfSkoIm9uTGluZUNoYXJ0Wm9vbSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5lQ2hhcnRab29tKG8pfSkoImVkaXRDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5lZGl0Q29sdW1uSGVhZGVycyhvKX0pKCJvbkNhcmRTdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2FyZFN0YXRlQ2hhbmdlZChvKX0pKCJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3BlblRhYmxlRWRpdE1lbnVUb01vZGUobyl9KSgicmVtb3ZlQ29sdW1uIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlbW92ZUNvbHVtbihvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSxqKDEyLCJhc3luYyIpLGooMTMsImFzeW5jIiksaigxNCwiYXN5bmMiKSxqKDE1LCJhc3luYyIpLGooMTYsImFzeW5jIiksaigxNywiYXN5bmMiKSxqKDE4LCJhc3luYyIpLGooMTksImFzeW5jIiksaigyMCwiYXN5bmMiKSxqKDIxLCJhc3luYyIpLGooMjIsImFzeW5jIiksaigyMywiYXN5bmMiKSxnKCkpLDImZSYmXygiY2FyZElkIixpLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFcoMSwyNixpLmNoYXJ0TWV0YWRhdGFNYXAkKSkoIkRhdGFEb3dubG9hZENvbXBvbmVudCIsaS5EYXRhRG93bmxvYWRDb21wb25lbnQpKCJkYXRhU2VyaWVzIixXKDIsMjgsaS5kYXRhU2VyaWVzJCkpKCJpZ25vcmVPdXRsaWVycyIsVygzLDMwLGkuaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLGkuaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFcoNCwzMixpLmlzUGlubmVkJCkpKCJsb2FkU3RhdGUiLFcoNSwzNCxpLmxvYWRTdGF0ZSQpKSgic2hvd0Z1bGxXaWR0aCIsVyg2LDM2LGkuc2hvd0Z1bGxXaWR0aCQpKSgic21vb3RoaW5nRW5hYmxlZCIsVyg3LDM4LGkuc21vb3RoaW5nRW5hYmxlZCQpKSgidGFnIixXKDgsNDAsaS50YWckKSkoInRpdGxlIixXKDksNDIsaS50aXRsZSQpKSgiY2FyZFN0YXRlIixXKDEwLDQ0LGkuY2FyZFN0YXRlJCkpKCJ0b29sdGlwU29ydCIsVygxMSw0NixpLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFcoMTIsNDgsaS54QXhpc1R5cGUkKSkoInhTY2FsZVR5cGUiLFcoMTMsNTAsaS54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVygxNCw1MixpLnVzZURhcmtNb2RlJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE1LDU0LGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsVygxNiw1NixpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoImZvcmNlU3ZnIixXKDE3LDU4LGkuZm9yY2VTdmckKSkoImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixXKDE4LDYwLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkKSkoIm1pbk1heFN0ZXAiLFcoMTksNjIsaS5taW5NYXhTdGVwcyQpKSgidXNlclZpZXdCb3giLFcoMjAsNjQsaS51c2VyVmlld0JveCQpKSgiY29sdW1uSGVhZGVycyIsVygyMSw2NixpLmNvbHVtbkhlYWRlcnMkKSkoInJhbmdlRW5hYmxlZCIsVygyMiw2OCxpLnJhbmdlRW5hYmxlZCQpKSgiaHBhcmFtc0VuYWJsZWQiLFcoMjMsNzAsaS5ocGFyYW1zRW5hYmxlZCQpKX0sZGVwZW5kZW5jaWVzOltxZyxHdGUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTzNlKG4sdCxlKXtsZXQgaT1bXSx7bGVmdDpyLHJpZ2h0Om99PXQscz0oby1yKS9lLGE9MCxsPTA7Zm9yKGxldCBjPTA7YzxlO2MrKyl7bGV0IGQ9citjKnMsdT1kK3MscD1jPT09ZS0xLGY9bDtmb3IobD0wO2E8bi5sZW5ndGg7KXtsZXQgbT1uW2FdLGI9azNlKG0sZCx1LCFwKTtpZihmKz1iLmN1cnIsbCs9Yi5uZXh0LG0ueCttLmR4PnUpYnJlYWs7YSsrfWkucHVzaCh7eDpkLGR4OnMseTpmfSl9cmV0dXJuIGl9ZnVuY3Rpb24gazNlKG4sdCxlLGkpe2xldCByPW4ueCxvPW4ueCtuLmR4O2lmKHI+ZXx8bzx0KXJldHVybntjdXJyOjAsbmV4dDowfTtpZigwPT09bi5keClyZXR1cm4gaSYmbz49ZT97Y3VycjowLG5leHQ6bi55fTp7Y3VycjpuLnksbmV4dDowfTtsZXQgcz1NYXRoLm1pbihvLGUpLU1hdGgubWF4KHIsdCk7cmV0dXJue2N1cnI6bi55KnMvbi5keCxuZXh0OjB9fXZhciBGM2U9MWU0LE4zZT0uMDAxLEwzZT1RcigiLjJ+cyIpLEIzZT1RcigiLjR+ciIpLFYzZT1RcigiLjJ+ZSIpO2Z1bmN0aW9uIFl0ZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PUYzZT9MM2Uobik6dDxOM2U/VjNlKG4pOkIzZShuKX12YXIgSDNlPVsibWFpbiJdLHozZT1bInhBeGlzIl0sVTNlPVsieUF4aXMiXSxqM2U9WyJjb250ZW50Il0sRzNlPVsiaGlzdG9ncmFtcyJdO2Z1bmN0aW9uIFczZShuLHQpe2lmKDEmbiYmKE5uKCksaCgwLCJnIikoMSwidGV4dCIpLFQoMiksZygpKCkpLDImbil7bGV0IGU9dygpO1R0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHgoZS50b29sdGlwRGF0YS54QXhpcy5wb3NpdGlvbiw5KSksdigyKSxidChlLnRvb2x0aXBEYXRhLnhBeGlzLmxhYmVsKX19ZnVuY3Rpb24gcTNlKG4sdCl7aWYoMSZuJiYoTm4oKSxoKDAsImciKSgxLCJ0ZXh0IiksVCgyKSxnKCkoKSksMiZuKXtsZXQgZT13KCk7VHQoInRyYW5zZm9ybSIsZS5nZXRHcm91cFRyYW5zZm9ybShlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksQmUoInkiLGUudG9vbHRpcERhdGEueUF4aXMucG9zaXRpb24pLHYoMSksSGUoIiAiLGUudG9vbHRpcERhdGEueUF4aXMubGFiZWwsIiAiKX19ZnVuY3Rpb24gWTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO05uKCksT28oKSxPdCgwKSxoKDEsImhpc3RvZ3JhbS1jYXJkLWZvYi1jb250cm9sbGVyIiwxNiksSSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLm9uTGlua2VkVGltZVRvZ2dsZWQuZW1pdCgpKX0pLGcoKSxrdCgpfWlmKDImbil7bGV0IGU9dygpO3YoMSksXygidGltZVNlbGVjdGlvbiIsZS50aW1lU2VsZWN0aW9uKSgic3RlcHMiLGUuZ2V0U3RlcHMoKSkoInRlbXBvcmFsU2NhbGUiLGUuc2NhbGVzLnRlbXBvcmFsU2NhbGUpfX1mdW5jdGlvbiBYM2Uobix0KXtpZigxJm4mJihObigpLGgoMCwiZyIpLFAoMSwibGluZSIsMTcpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtUdCgidHJhbnNmb3JtIix3KCkuZ2V0Q3NzVHJhbnNsYXRlUHgoMCxlKSl9fWZ1bmN0aW9uIFEzZShuLHQpezEmbiYmKE5uKCksUCgwLCJsaW5lIiwyMSkpfWZ1bmN0aW9uIFozZShuLHQpe2lmKDEmbiYmKE5uKCksUCgwLCJjaXJjbGUiLDIyKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO1R0KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS54LGkuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGkuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaS50b29sdGlwRGF0YS54UG9zaXRpb25JbkJpbkNvb3JkKSkueSkpfX1mdW5jdGlvbiBLM2Uobix0KXtpZigxJm4pe2xldCBlPWdlKCk7Tm4oKSxoKDAsImciLDE4KSxJKCJtb3VzZWVudGVyIixmdW5jdGlvbihyKXtsZXQgcz1YKGUpLiRpbXBsaWNpdDtyZXR1cm4gUSh3KCkudXBkYXRlQ29sb3JPbkhvdmVyKHIscywhMCkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKHIpe2xldCBzPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygpLm9uTGlua2VkVGltZVJhbmdlQ2hhbmdlZChvKSl9KSxTKDEsUTNlLDEsMCwibGluZSIsMTkpLFAoMiwicGF0aCIpLFMoMyxaM2UsMSwyLCJjaXJjbGUiLDIwKSxnKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKTtUdCgidHJhbnNmb3JtIixpLmdldEdyb3VwVHJhbnNmb3JtKGUpKSgiY29sb3IiLGkuZ2V0SGlzdG9ncmFtRmlsbChlKSksbnQoImhpc3RvZ3JhbSIsITApKCJuby1jb2xvciIsIWkuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGUpKSx2KDEpLF8oIm5nSWYiLGkubW9kZT09PWkuSGlzdG9ncmFtTW9kZS5PRkZTRVQpLHYoMSksQmUoImQiLGkuZ2V0SGlzdG9ncmFtUGF0aChlKSksdigxKSxfKCJuZ0lmIixpLnRvb2x0aXBEYXRhKX19ZnVuY3Rpb24gSjNlKG4sdCl7aWYoMSZuJiYoTm4oKSxQKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPXcoMik7QmUoImN4IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLngpKCJjeSIsZS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoZS50b29sdGlwRGF0YS5jbG9zZXN0QmluKS55KX19ZnVuY3Rpb24gJDNlKG4sdCl7aWYoMSZuJiYoTm4oKSxoKDAsImciLDQpKDEsImciKSxQKDIsInBhdGgiKSxTKDMsSjNlLDEsMiwiY2lyY2xlIiwyMyksZygpLGgoNCwiZyIsMjQpKDUsInRleHQiLDI1KSxUKDYpLGcoKSgpKCkpLDImbil7bGV0IGU9dygpO3YoMSksVHQoInRyYW5zZm9ybSIsZS5nZXRHcm91cFRyYW5zZm9ybShlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksQmUoImQiLGUuZ2V0SGlzdG9ncmFtUGF0aChlLnRvb2x0aXBEYXRhLmNsb3Nlc3REYXR1bSkpLHYoMSksXygibmdJZiIsZS50b29sdGlwRGF0YS5jbG9zZXN0QmluKSx2KDEpLFR0KCJ0cmFuc2Zvcm0iLGUuZ2V0Q3NzVHJhbnNsYXRlUHgoZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi54LGUudG9vbHRpcERhdGEudmFsdWUucG9zaXRpb24ueSkpLHYoMiksYnQoZS50b29sdGlwRGF0YS52YWx1ZS5sYWJlbCl9fXZhciBmQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLm1vZGU9RHIuT0ZGU0VULHRoaXMudGltZVByb3BlcnR5PW5vLlNURVAsdGhpcy50aW1lU2VsZWN0aW9uPW51bGwsdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBGLHRoaXMub25MaW5rZWRUaW1lVG9nZ2xlZD1uZXcgRix0aGlzLkhpc3RvZ3JhbU1vZGU9RHIsdGhpcy5UaW1lUHJvcGVydHk9bm8sdGhpcy50b29sdGlwRGF0YT1udWxsLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWUsdGhpcy5sYXlvdXQ9e2hpc3RvZ3JhbUhlaWdodDowLGNvbnRlbnRDbGllbnRSZWN0OntoZWlnaHQ6MCx3aWR0aDowfX0sdGhpcy5zY2FsZXM9bnVsbCx0aGlzLmZvcm1hdHRlcnM9e2Jpbk51bWJlcjpZdGUsY291bnQ6UXIoIi4zbiIpLHdhbGxUaW1lOmQwKCIlbS8lZCAlWCIpLHN0ZXA6UXIoIi4wZiIpLHJlbGF0aXZlOmk9PlFyKCIuMXIiKShpLzM2ZTUpKyJoIn0sdGhpcy5kb21WaXNpYmxlPSExfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXttaSh0aGlzLm1haW4ubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PnRoaXMub25Nb3VzZU1vdmUoZSkpfWdldENzc1RyYW5zbGF0ZVB4KGUsaSl7cmV0dXJuYHRyYW5zbGF0ZSgke2V9cHgsICR7aX1weClgfWdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkpe2lmKCFlLmJpbnMubGVuZ3RoKXJldHVybnt4OjAsZHg6MCx5OjB9O2xldCByPWUuYmluc1swXSxvPWUuYmlucy5zbGljZSgtMSlbMF07cmV0dXJuIGk8ci54P3I6aT49by54K28uZHg/bzplLmJpbnMuZmluZChhPT5hLng8PWkmJmk8YS54K2EuZHgpfWdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlKXtyZXR1cm4gdGhpcy5zY2FsZXM/e3g6dGhpcy5zY2FsZXMuYmluU2NhbGUoSngoZSkpLHk6dGhpcy5zY2FsZXMuY291bnRTY2FsZShlLnkpfTp7eDowLHk6MH19Z2V0SGlzdG9ncmFtUGF0aChlKXtpZighdGhpcy5zY2FsZXN8fCFlLmJpbnMubGVuZ3RoKXJldHVybiIiO2xldCBpPXRoaXMuc2NhbGVzLmJpblNjYWxlLHI9dGhpcy5zY2FsZXMuY291bnRTY2FsZSxvPWUuYmluc1swXSxzPWUuYmlucy5zbGljZSgtMSlbMF0sYT1bYE0ke2koSngobykpfSwke3IoMCl9YF07Zm9yKGxldCBsIG9mIGUuYmlucylhLnB1c2goYEwke2koSngobCkpfSwke3IobC55KX1gKTtyZXR1cm4gYS5wdXNoKGBMJHtpKEp4KHMpKX0sJHtyKDApfWApLGEuam9pbigiIil9dHJhY2tCeVdhbGxUaW1lKGUpe3JldHVybiBlLndhbGxUaW1lfWdldEdyb3VwVHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLnNjYWxlcyYmdGhpcy5tb2RlIT09RHIuT1ZFUkxBWT90aGlzLmdldENzc1RyYW5zbGF0ZVB4KDAsdGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSkpOiIifWdldFN0ZXBzKCl7cmV0dXJuIHRoaXMuZGF0YS5tYXAoZT0+ZS5zdGVwKX1pc1RpbWVTZWxlY3Rpb25FbmFibGVkKGUpe3JldHVybiBCb29sZWFuKHRoaXMubW9kZT09PURyLk9GRlNFVCYmdGhpcy50aW1lUHJvcGVydHk9PT1uby5TVEVQJiZ0aGlzLnNjYWxlcyYmZSl9aXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGUpe3JldHVybiF0aGlzLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQodGhpcy50aW1lU2VsZWN0aW9uKXx8KG51bGw9PT10aGlzLnRpbWVTZWxlY3Rpb24uZW5kP3RoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwPT09ZS5zdGVwOnRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwPD1lLnN0ZXAmJnRoaXMudGltZVNlbGVjdGlvbi5lbmQuc3RlcD49ZS5zdGVwKX1nZXRIaXN0b2dyYW1GaWxsKGUpe3JldHVybiB0aGlzLnNjYWxlcz90aGlzLnNjYWxlcy5kM0NvbG9yU2NhbGUodGhpcy5nZXRUaW1lVmFsdWUoZSkpOiIifXVwZGF0ZUNvbG9yT25Ib3ZlcihlLGkscil7IXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHx0aGlzLmlzRGF0dW1JblRpbWVTZWxlY3Rpb25SYW5nZShpKXx8KHI/ZS50YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgibm8tY29sb3IiKTplLnRhcmdldC5jbGFzc0xpc3QuYWRkKCJuby1jb2xvciIpKX1nZXRHcmlkVGlja1lMb2NzKCl7aWYoIXRoaXMuc2NhbGVzfHx0aGlzLm1vZGU9PT1Eci5PRkZTRVQpcmV0dXJuW107bGV0IGU9dGhpcy5zY2FsZXMuY291bnRTY2FsZTtyZXR1cm4gZS50aWNrcygpLm1hcChpPT5lKGkpKX1vblJlc2l6ZSgpe3RoaXMudXBkYXRlQ2xpZW50UmVjdHMoKSx0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmRvbVZpc2libGU9ZSxlJiYodGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKSl9b25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKGUpe2lmKCF0aGlzLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQodGhpcy50aW1lU2VsZWN0aW9uKSlyZXR1cm47bGV0IGk9dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXAscj10aGlzLnRpbWVTZWxlY3Rpb24uZW5kPy5zdGVwLG89ZS5zdGVwPGk/ZS5zdGVwOmkscz1yO3M9dm9pZCAwPT09cz9lLnN0ZXA+aT9lLnN0ZXA6aTplLnN0ZXA+cz9lLnN0ZXA6cywobyE9PWl8fHMhPT1yKSYmbyE9PXMmJnRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOntzdGFydDp7c3RlcDpvfSxlbmQ6e3N0ZXA6c319LGFmZm9yZGFuY2U6cXMuSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFfSl9Z2V0VGltZVZhbHVlKGUpe3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBuby5XQUxMX1RJTUU6cmV0dXJuIGUud2FsbFRpbWU7Y2FzZSBuby5TVEVQOnJldHVybiBlLnN0ZXA7Y2FzZSBuby5SRUxBVElWRTpyZXR1cm4gZS53YWxsVGltZS10aGlzLmRhdGFbMF0ud2FsbFRpbWV9fXVwZGF0ZUNsaWVudFJlY3RzKCl7dGhpcy5jb250ZW50JiYodGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Q9dGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LmhlaWdodC8yLjUpfXVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl7IXRoaXMuZG9tVmlzaWJsZXx8KHRoaXMuc2NhbGVzPXRoaXMuY29tcHV0ZVNjYWxlcyh0aGlzLmRhdGEpLHRoaXMucmVuZGVyWEF4aXMoKSx0aGlzLnJlbmRlcllBeGlzKCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfWNvbXB1dGVTY2FsZXMoZSl7bGV0e3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMubGF5b3V0LmNvbnRlbnRDbGllbnRSZWN0LHttaW46byxtYXg6c309WHRlKGUseT0+ZnVuY3Rpb24obix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSk9Pk1hdGgubWluKGUsaS54KSwxLzApfSh5LmJpbnMpLHk9PndWKHkuYmlucywoe3g6eCxkeDpSfSk9PngrUikpLGE9d1YoZSx5PT53Vih5LmJpbnMsKHt5Onh9KT0+eCkpLGw9V2woKS5kb21haW4oW28sc10pLm5pY2UoKSxjPXRoaXMubW9kZSE9PURyLk9WRVJMQVkmJnRoaXMudGltZVByb3BlcnR5PT1uby5XQUxMX1RJTUU/ZW0oKTpXbCgpLGQ9ZS5tYXAoeT0+dGhpcy5nZXRUaW1lVmFsdWUoeSkpLHttaW46dSxtYXg6cH09WHRlKGQseT0+eSksZj1bdSxwXTtjLmRvbWFpbihmKTtsZXQgbT1XbCgpO20uZG9tYWluKFswLGFdKTtsZXQgYj1IZih0aGlzLmNvbG9yfHwiIzAwMCIpLE09V2woKTtyZXR1cm4gTS5kb21haW4oZiksbC5yYW5nZShbMCxpXSksTS5yYW5nZShbYi5icmlnaHRlcigpLGIuZGFya2VyKCldKSxNLmludGVycG9sYXRlKG1MKSx0aGlzLm1vZGU9PT1Eci5PVkVSTEFZPyhjLnJhbmdlKFtyLHJdKSxtLnJhbmdlKFtyLDBdKSk6KGMucmFuZ2UoW3ItKHRoaXMubW9kZT09PURyLk9GRlNFVD9yLXRoaXMubGF5b3V0Lmhpc3RvZ3JhbUhlaWdodDowKSxyXSksbS5yYW5nZShbMCwtdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0XSkpLHtiaW5TY2FsZTpsLGQzQ29sb3JTY2FsZTpNLGNvdW50U2NhbGU6bSx0ZW1wb3JhbFNjYWxlOmN9fXJlbmRlclhBeGlzKCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXR7d2lkdGg6ZX09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QsaT1mdW5jdGlvbihuKXtyZXR1cm4gVVEoak4sbil9KHRoaXMuc2NhbGVzLmJpblNjYWxlKS50aWNrcyhNYXRoLm1heCgyLGUvMjApKTtpLnRpY2tGb3JtYXQodGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlciksaShuRCh0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQpKX1nZXRZQXhpc0Zvcm1hdHRlcigpe2lmKHRoaXMubW9kZT09PURyLk9WRVJMQVkpcmV0dXJuIHRoaXMuZm9ybWF0dGVycy5jb3VudDtzd2l0Y2godGhpcy50aW1lUHJvcGVydHkpe2Nhc2Ugbm8uV0FMTF9USU1FOnJldHVybiB0aGlzLmZvcm1hdHRlcnMud2FsbFRpbWU7Y2FzZSBuby5TVEVQOnJldHVybiB0aGlzLmZvcm1hdHRlcnMuc3RlcDtjYXNlIG5vLlJFTEFUSVZFOnJldHVybiB0aGlzLmZvcm1hdHRlcnMucmVsYXRpdmU7ZGVmYXVsdDp0aHJvdyBSYW5nZUVycm9yKGBZIGF4aXMgZm9ybWF0dGVyIGZvciAke3RoaXMudGltZVByb3BlcnR5fSBtdXN0IGJlIGltcGxlbWVudGVkYCl9fWdldE1heFRpY2tzKGUpe2xldHtoZWlnaHQ6aX09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qscj1pLzE1O2lmKHRoaXMudGltZVByb3BlcnR5PT09bm8uU1RFUCl7bGV0W28sc109ZS5kb21haW4oKSxhPU1hdGgubWF4KHMtbysxLDEpO3JldHVybiBNYXRoLm1pbihhLHIpfXJldHVybiByfXJlbmRlcllBeGlzKCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgZT10aGlzLm1vZGU9PT1Eci5PVkVSTEFZP3RoaXMuc2NhbGVzLmNvdW50U2NhbGU6dGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSxpPXRoaXMuZ2V0TWF4VGlja3MoZSkscj1mdW5jdGlvbihuKXtyZXR1cm4gVVEoWlQsbil9KGUpLnRpY2tzKE1hdGgubWF4KDIsaSkpO3IudGlja0Zvcm1hdCh0aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkpLHIobkQodGhpcy55QXhpcy5uYXRpdmVFbGVtZW50KSl9ZmluZENsb3Nlc3REYXR1bUluZGV4KGUpe2xldCBpPWUudGFyZ2V0LHI9aTtmb3IoO2kmJmkhPT10aGlzLmhpc3RvZ3JhbXMubmF0aXZlRWxlbWVudDspcj1pLGk9aS5wYXJlbnRFbGVtZW50O3JldHVybiBpP0FycmF5LmZyb20oaS5jaGlsZHJlbikuaW5kZXhPZihyKTotMX1vbk1vdXNlTW92ZUZvclRlc3RPbmx5KGUpe3JldHVybiB0aGlzLm9uTW91c2VNb3ZlKGUpfW9uTW91c2VNb3ZlKGUpe2lmKCF0aGlzLnNjYWxlcylyZXR1cm47bGV0IGk9ZS5vZmZzZXRYLHI9ZS5vZmZzZXRZLG89dGhpcy5maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSk7aWYobzwwKXJldHVybjtsZXQgcz10aGlzLnNjYWxlcy5iaW5TY2FsZS5pbnZlcnQoaSksYT10aGlzLmRhdGFbb10sbD10aGlzLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShhLHMpO3RoaXMudG9vbHRpcERhdGE9e3ZhbHVlOntwb3NpdGlvbjp7eDppLHk6cn0sbGFiZWw6dGhpcy5tb2RlPT09RHIuT0ZGU0VUP3RoaXMuZm9ybWF0dGVycy5jb3VudChsLnkpOmBTdGVwOiAke3RoaXMuZm9ybWF0dGVycy5zdGVwKGEuc3RlcCl9YH0seEF4aXM6e3Bvc2l0aW9uOnRoaXMuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGwpLngsbGFiZWw6dGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlcihKeChsKSl9LHlBeGlzOntwb3NpdGlvbjp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKHRoaXMubW9kZT09PURyLk9GRlNFVD8wOmwueSksbGFiZWw6dGhpcy5tb2RlPT09RHIuT0ZGU0VUP3RoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSh0aGlzLmdldFRpbWVWYWx1ZShhKSk6dGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlcihsLnkpfSx4UG9zaXRpb25JbkJpbkNvb3JkOnMsY2xvc2VzdERhdHVtOmEsY2xvc2VzdEJpbjpsfSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQygkdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWhpc3RvZ3JhbSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShIM2UsNSksR2UoejNlLDUpLEdlKFUzZSw1KSxHZShqM2UsNSksR2UoRzNlLDUpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLm1haW49ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueEF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkueUF4aXM9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuY29udGVudD1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5oaXN0b2dyYW1zPXIuZmlyc3QpfX0saW5wdXRzOnttb2RlOiJtb2RlIix0aW1lUHJvcGVydHk6InRpbWVQcm9wZXJ0eSIsY29sb3I6ImNvbG9yIixkYXRhOiJkYXRhIix0aW1lU2VsZWN0aW9uOiJ0aW1lU2VsZWN0aW9uIn0sb3V0cHV0czp7b25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25MaW5rZWRUaW1lVG9nZ2xlZDoib25MaW5rZWRUaW1lVG9nZ2xlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6MjIsdmFyczoxNSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywib25SZXNpemUiLCJvblZpc2liaWxpdHlDaGFuZ2UiXSxbIm1haW4iLCIiXSxbMSwiYXhpcyIsIngtYXhpcyJdLFsieEF4aXMiLCIiXSxbMSwidG9vbHRpcCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwiYXhpcyIsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50Il0sWyJjb250ZW50IiwiIl0sWzEsImdyaWQiXSxbMywidHJhbnNmb3JtIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImhpc3RvZ3JhbXMiLCIiXSxbMywidHJhbnNmb3JtIiwiaGlzdG9ncmFtIiwibm8tY29sb3IiLCJjb2xvciIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJ0b29sdGlwIiw0LCJuZ0lmIl0sWzEsImhpc3RvZ3JhbS1jYXJkLWZvYiIsMywidGltZVNlbGVjdGlvbiIsInN0ZXBzIiwidGVtcG9yYWxTY2FsZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl0sWyJ4MiIsIjEwMCUiLDEsInRpY2siXSxbMywibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayJdLFsiY2xhc3MiLCJiYXNlbGluZSIsIngyIiwiMTAwJSIsNCwibmdJZiJdLFsiciIsIjIiLDMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsieDIiLCIxMDAlIiwxLCJiYXNlbGluZSJdLFsiciIsIjIiXSxbInIiLCIyIiw0LCJuZ0lmIl0sWzEsInZhbHVlLWxhYmVsIl0sWyJ4IiwiMyIsInkiLCItMyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwLDEpLEkoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSgib25WaXNpYmlsaXR5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZpc2liaWxpdHlDaGFuZ2Uobyl9KSxObigpLGgoMiwic3ZnIiwyKSxQKDMsImciLG51bGwsMyksaCg1LCJnIiw0KSxTKDYsVzNlLDMsMywiZyIsNSksZygpKCksT28oKSxoKDcsImRpdiIsNiksTm4oKSxoKDgsInN2ZyIpLFAoOSwiZyIsbnVsbCw3KSxoKDExLCJnIiw0KSxTKDEyLHEzZSwzLDQsImciLDUpLGcoKSgpLFMoMTMsWTNlLDIsMywibmctY29udGFpbmVyIiw4KSxnKCksaCgxNCwic3ZnIiw5LDEwKSgxNiwiZyIsMTEpLFMoMTcsWDNlLDIsMiwiZyIsMTIpLGcoKSxoKDE4LCJnIixudWxsLDEzKSxTKDIwLEszZSw0LDExLCJnIiwxNCksZygpLFMoMjEsJDNlLDcsNywiZyIsMTUpLGcoKSgpKSwyJmUmJihBcygibWFpbiAiK2kubW9kZSsiICIraS50aW1lUHJvcGVydHkpLHYoNiksXygibmdJZiIsaS50b29sdGlwRGF0YSksdig1KSxUdCgidHJhbnNmb3JtIixpLmdldENzc1RyYW5zbGF0ZVB4KDksMCkpLHYoMSksXygibmdJZiIsaS50b29sdGlwRGF0YSksdigxKSxfKCJuZ0lmIixpLmlzVGltZVNlbGVjdGlvbkVuYWJsZWQoaS50aW1lU2VsZWN0aW9uKSksdig0KSxfKCJuZ0Zvck9mIixpLmdldEdyaWRUaWNrWUxvY3MoKSksdigxKSxudCgiaGlzdG9ncmFtcyIsITApKCJsaW5rZWQtdGltZS1zaW5nbGUtc3RlcCIsaS50aW1lU2VsZWN0aW9uJiYhaS50aW1lU2VsZWN0aW9uLmVuZCksdigyKSxfKCJuZ0Zvck9mIixpLmRhdGEpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVdhbGxUaW1lKSx2KDEpLF8oIm5nSWYiLGkudG9vbHRpcERhdGEpKX0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxMHB4fS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1hcmVhczoiY29udGVudCB5LWF4aXMiICJ4LWF4aXMgLiI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA1MHB4O2dyaWQtdGVtcGxhdGUtcm93czoxZnIgMzBweH0ubWFpbi53YWxsX3RpbWVbX25nY29udGVudC0lQ09NUCVde2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNzVweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMHB4fS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3J9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmlkZW9ncmFwaGljO3RleHQtYW5jaG9yOnN0YXJ0fS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6IzYxNjE2MTtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5kb21haW4sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgdGV4dHtkaXNwbGF5Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljazpudGgtY2hpbGQoMm4rMSkgdGV4dHtkaXNwbGF5OmluaXRpYWx9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOnZpc2libGVQYWludGVkfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIHN2Z1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZX1zdmdbX25nY29udGVudC0lQ09NUCVdICAgZ1tfbmdjb250ZW50LSVDT01QJV17d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp4LWF4aXN9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aGFuZ2luZzt0ZXh0LWFuY2hvcjptaWRkbGV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnktYXhpcztvdmVyZmxvdzpjbGlwIHZpc2libGV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6bWlkZGxlO3RleHQtYW5jaG9yOnN0YXJ0fS5oaXN0b2dyYW0tY2FyZC1mb2JbX25nY29udGVudC0lQ09NUCVde2xlZnQ6OXB4O3Bvc2l0aW9uOmFic29sdXRlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5le3N0cm9rZTojZGRkfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5le3N0cm9rZTojNTU1fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6Y29udGVudDtvdmVyZmxvdzp2aXNpYmxlO3otaW5kZXg6MX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtZGFzaGFycmF5OjJ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3I7c3Ryb2tlLW9wYWNpdHk6LjY7c3Ryb2tlLXdpZHRoOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC42KSk7c3Ryb2tlOiNmZmY7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5iYXNlbGluZVtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjE7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2U6Y3VycmVudENvbG9yO3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2U6Y3VycmVudENvbG9yO2ZpbGw6cmdiYSgwLDAsMCwwKX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjIxLDIyMSwyMjEsLjQpICFpbXBvcnRhbnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5Oi4yfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSg1MSw1MSw1MSwuNCkgIWltcG9ydGFudH0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojZmZmfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Lm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojZmZmfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5le2Rpc3BsYXk6bm9uZX0ub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsLW9wYWNpdHk6MDtzdHJva2U6Y3VycmVudENvbG9yfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5Om5vbmV9Lm1haW5bX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB3VihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5tYXgoZSx0KGkpKSwtMS8wKX1mdW5jdGlvbiBYdGUobix0LGUpe2V8fChlPXQpO2xldCBpPTEvMCxyPS0xLzA7Zm9yKGxldCBvIG9mIG4paT1NYXRoLm1pbihpLHQobykpLHI9TWF0aC5tYXgocixlKG8pKTtyZXR1cm57bWluOmksbWF4OnJ9fWZ1bmN0aW9uIEp4KG4pe3JldHVybiBuLngrLjUqbi5keH1mdW5jdGlvbiBuQmUobix0KXsxJm4mJihoKDAsInNwYW4iLDE0KSxQKDEsIm1hdC1zcGlubmVyIiwxNSksZygpKX1mdW5jdGlvbiBpQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJ0Yi1oaXN0b2dyYW0iLDE2KSxJKCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oImRhdGEiLGUuZGF0YSkoIm1vZGUiLGUubW9kZSkoInRpbWVQcm9wZXJ0eSIsZS50aW1lUHJvcGVydHkoZS54QXhpc1R5cGUpKSgiY29sb3IiLGUucnVuQ29sb3JTY2FsZShlLnJ1bklkKSkoInRpbWVTZWxlY3Rpb24iLGUuY29udmVydFRvVGltZVNlbGVjdGlvbihlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKX19ZnVuY3Rpb24gckJlKG4sdCl7MSZuJiYoaCgwLCJkaXYiLDE4KSxUKDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSxnKCkpfWZ1bmN0aW9uIG9CZShuLHQpe2lmKDEmbiYmUygwLHJCZSwyLDAsImRpdiIsMTcpLDImbil7bGV0IGU9dygpO18oIm5nSWYiLGUubG9hZFN0YXRlPT09ZS5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fXZhciBzQmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX0sUXRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9VGUsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBGLHRoaXMub25QaW5DbGlja2VkPW5ldyBGLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEZ9dGltZVByb3BlcnR5KGUpe3N3aXRjaChlKXtjYXNlIFBpLlNURVA6cmV0dXJuIG5vLlNURVA7Y2FzZSBQaS5XQUxMX1RJTUU6cmV0dXJuIG5vLldBTExfVElNRTtjYXNlIFBpLlJFTEFUSVZFOnJldHVybiBuby5SRUxBVElWRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCB4QXhpc1R5cGUgZm9yIGhpc3RvZ3JhbSB0aW1lIHByb3BlcnR5LiIpfX1jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9udWxsOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcH0sZW5kOmUuZW5kU3RlcD97c3RlcDplLmVuZFN0ZXB9Om51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiXV0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSksUCgyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSxnKCksaCg0LCJkaXYiLDQpLFAoNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksZygpLGgoNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxQKDksIm1hdC1pY29uIiw5KSxnKCksaCgxMCwiYnV0dG9uIiwxMCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxQKDExLCJtYXQtaWNvbiIsOSksZygpKCksUygxMixuQmUsMiwwLCJzcGFuIiwxMSksZygpLFMoMTMsaUJlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksUygxNCxvQmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxXdCkpLDImZSl7bGV0IHI9aXQoMTUpO3YoMiksXygidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLHYoMSksXygiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCksdigyKSxfKCJuZ1N0eWxlIixJbigxMixzQmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSksdigxKSxfKCJydW5JZCIsaS5ydW5JZCksdigyKSxCZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHYoMSksXygic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx2KDIpLF8oInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx2KDEpLF8oIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHYoMSksXygibmdJZiIsaS5kYXRhJiZpLmRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltGZSxwdSxmQSwkaSxFbix0bCxxVCxYZyxRZ10sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxM3B4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOnNwaW5uZXI7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dG9wOjA7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZX10Yi1oaXN0b2dyYW1bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRix0aGlzLm1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KHQxKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoT2wpLHRoaXMuc2hvd0Z1bGxXaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QocWEpLnBpcGUoTihpPT5pW3RoaXMuY2FyZElkXT8uZnVsbFdpZHRoKSl9aXNIaXN0b2dyYW1DYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09em4uSElTVE9HUkFNU31vbkZ1bGxTaXplVG9nZ2xlKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCZyh7Y2FyZElkOnRoaXMuY2FyZElkfSkpfW5nT25Jbml0KCl7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoV2EsdGhpcy5jYXJkSWQpLnBpcGUoa2Uobz0+ISFvJiZ0aGlzLmlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKG8pKSxOKG89Pm8pKSxyPWRuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEN1LHRoaXMuY2FyZElkKV0pO3RoaXMuZGF0YSQ9ci5waXBlKE4oKFtvLHNdKT0+e2xldCBhPW8ucnVuSWQ7cmV0dXJuIHMmJnMuaGFzT3duUHJvcGVydHkoYSk/ZnVuY3Rpb24obix0PTMwKXtpZighbi5sZW5ndGh8fHQ8MSlyZXR1cm5bXTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1udWxsLGU9bnVsbDtmb3IobGV0e2JpbnM6aX1vZiBuKXtpZighaS5sZW5ndGgpY29udGludWU7bGV0IHI9aVtpLmxlbmd0aC0xXSxvPWlbMF0ueCxzPXIueCtyLmR4OyhudWxsPT09dHx8bzx0KSYmKHQ9byksKG51bGw9PT1lfHxzPmUpJiYoZT1zKX1yZXR1cm4gbnVsbD09PXR8fG51bGw9PT1lP251bGw6e2xlZnQ6dCxyaWdodDplfX0obik7cmV0dXJuIGUmJmUubGVmdD09PWUucmlnaHQmJihlLnJpZ2h0PTEuMSplLnJpZ2h0KzEsZS5sZWZ0PWUubGVmdC8xLjEtMSksbi5tYXAoaT0+KHtzdGVwOmkuc3RlcCx3YWxsVGltZTppLndhbGxUaW1lLGJpbnM6ZT9PM2UoaS5iaW5zLGUsdCk6W119KSl9KHNbYV0ubWFwKGQ9PntsZXR7d2FsbFRpbWU6dSxzdGVwOnB9PWQ7cmV0dXJue3dhbGxUaW1lOnUsc3RlcDpwLGJpbnM6ZC5iaW5zLm1hcChtPT4oe3g6bS5taW4sZHg6bS5tYXgtbS5taW4seTptLmNvdW50fSkpfX0pKTpbXX0pKSx0aGlzLnN0ZXBzJD10aGlzLmRhdGEkLnBpcGUoTihvPT5vLm1hcChzPT5zLnN0ZXApKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoRXUpLHRoaXMuc3RlcHMkLHRoaXMuc3RvcmUuc2VsZWN0KFN1KV0pLnBpcGUoTigoW28scyxhXSk9PntpZighbylyZXR1cm4gbnVsbDtsZXQgbD0xLzAsYz0tMS8wO2ZvcihsZXQgcCBvZiBzKWw9TWF0aC5taW4ocCxsKSxjPU1hdGgubWF4KHAsYyk7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7aWYobnVsbCE9PW4uZW5kU3RlcClyZXR1cm4gbjtsZXQgZT1mdW5jdGlvbihuLHQpe2xldCBlPTEvMCxpPW51bGw7Zm9yKGxldCByIG9mIHQpe2xldCBvPU1hdGguYWJzKG4tcik7bzxlJiYoZT1vLGk9cil9cmV0dXJuIGl9KG4uc3RhcnRTdGVwLHQpO3JldHVybiBudWxsIT09ZT97Li4ubixzdGFydFN0ZXA6ZX06bn0oVWgoQUYobyxhKSxsLGMpLHMpfSkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoRXUpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiRdKS5waXBlKE4oKFtvLHNdKT0+byYmcyYmIXMuY2xpcHBlZCYmbnVsbD09PW8uZW5kJiZvLnN0YXJ0LnN0ZXAhPT1zLnN0YXJ0U3RlcCkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChfZCx0aGlzLmNhcmRJZCksdGhpcy50YWckPWkucGlwZShOKG89Pm8udGFnKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoTihvPT5ZZyhvLHRoaXMuZ3JvdXBOYW1lKSkpLHRoaXMucnVuSWQkPWkucGlwZShOKG89Pm8ucnVuSWQpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChNdSx0aGlzLmNhcmRJZCl9b25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGtmKGUpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChJZCh7YWZmb3JkYW5jZTpZcy5GT0JfREVTRUxFQ1R9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZCJdXSxpbnB1dHM6e2NhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTIsdmFyczozNCxjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwiZGF0YSIsIm1vZGUiLCJ4QXhpc1R5cGUiLCJydW5Db2xvclNjYWxlIiwic2hvd0Z1bGxXaWR0aCIsImlzUGlubmVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsIm9uRnVsbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiaGlzdG9ncmFtLWNhcmQtY29tcG9uZW50IiwwKSxJKCJvbkZ1bGxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUoKX0pKCJvblBpbkNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnBpblN0YXRlQ2hhbmdlZC5lbWl0KG8pfSkoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgib25MaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksZygpKSwyJmUmJl8oImxvYWRTdGF0ZSIsVygxLDEyLGkubG9hZFN0YXRlJCkpKCJ0aXRsZSIsVygyLDE0LGkudGl0bGUkKSkoInRhZyIsVygzLDE2LGkudGFnJCkpKCJydW5JZCIsVyg0LDE4LGkucnVuSWQkKSkoImRhdGEiLFcoNSwyMCxpLmRhdGEkKSkoIm1vZGUiLFcoNiwyMixpLm1vZGUkKSkoInhBeGlzVHlwZSIsVyg3LDI0LGkueEF4aXNUeXBlJCkpKCJydW5Db2xvclNjYWxlIixpLnJ1bkNvbG9yU2NhbGUpKCJzaG93RnVsbFdpZHRoIixXKDgsMjYsaS5zaG93RnVsbFdpZHRoJCkpKCJpc1Bpbm5lZCIsVyg5LDI4LGkuaXNQaW5uZWQkKSkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsVygxMCwzMCxpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxMSwzMixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSl9LGRlcGVuZGVuY2llczpbUXRlLGN0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gY0JlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW1hZ2UtY2FyZCIsNiksSSgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBkQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzY2FsYXItY2FyZCIsNyksSSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX1mdW5jdGlvbiB1QmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJoaXN0b2dyYW0tY2FyZCIsOCksSSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiBwQmUobix0KXtpZigxJm4mJihoKDAsImRpdiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxIZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24gZkJlKG4sdCl7aWYoMSZuJiYoT3QoMCwxKSxTKDEsY0JlLDEsMywiaW1hZ2UtY2FyZCIsMiksUygyLGRCZSwxLDIsInNjYWxhci1jYXJkIiwzKSxTKDMsdUJlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLFMoNCxwQmUsMiwxLCJkaXYiLDUpLGt0KCkpLDImbil7bGV0IGU9dygpO18oIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBLdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT16bix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEYsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRix0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRn1vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZTKDAsZkJlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJl8oIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbRmUsc3IsU3IsdXUsUlEsV3RlLFp0ZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNFdmVyVmlzaWJsZT0hMSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEYsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRix0aGlzLnJ1bkNvbG9yU2NhbGUkPXRoaXMuc3RvcmUuc2VsZWN0KEF1KS5waXBlKGFjKDM1MCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSxOKGk9PnI9PmkuaGFzT3duUHJvcGVydHkocik/aVtyXToiI2ZmZiIpKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuaXNFdmVyVmlzaWJsZT10aGlzLmlzRXZlclZpc2libGV8fGV9b25GdWxsV2lkdGhDaGFuZ2VkKGUpe3RoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSl7dGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KGUpfW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoTXUsdGhpcy5jYXJkSWQpLnBpcGUoWXQoMSksQnQodGhpcy5zdG9yZS5zZWxlY3QoQ1cpKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEhnKHtjYXJkSWQ6dGhpcy5jYXJkSWQsY2FuQ3JlYXRlTmV3UGluczppLHdhc1Bpbm5lZDplfSkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXZpZXciXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQifSxkZWNsczoyLHZhcnM6Nyxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIiwiMjAwcHggMjAwcHggMjAwcHggMjAwcHgiLDMsImlzRXZlclZpc2libGUiLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwbHVnaW5UeXBlIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiY2FyZC12aWV3LWNvbXBvbmVudCIsMCksSSgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsV2lkdGhDaGFuZ2VkKG8pfSkoImZ1bGxIZWlnaHRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkZ1bGxIZWlnaHRDaGFuZ2VkKG8pfSkoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpblN0YXRlQ2hhbmdlZCgpfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGcoKSksMiZlJiZfKCJpc0V2ZXJWaXNpYmxlIixpLmlzRXZlclZpc2libGUpKCJjYXJkSWQiLGkuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGkucGx1Z2luVHlwZSkoInJ1bkNvbG9yU2NhbGUiLFcoMSw1LGkucnVuQ29sb3JTY2FsZSQpKX0sZGVwZW5kZW5jaWVzOltxZyxLdGUsY3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBfQmUobix0KXsxJm4mJmxpKDApfXZhciBiQmU9ZnVuY3Rpb24obix0KXtyZXR1cm57ImZ1bGwtd2lkdGgiOm4sImZ1bGwtaGVpZ2h0Ijp0fX07ZnVuY3Rpb24gdkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw1KSgxLCJjYXJkLXZpZXciLDYpLEkoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe2xldCBzPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9WChlKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5vbkZ1bGxIZWlnaHRDaGFuZ2VkKHMuY2FyZElkLHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLHFyKDYsYkJlLGkuY2FyZHNBdEZ1bGxXaWR0aC5oYXMoZS5jYXJkSWQpfHwobnVsbD09aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdP251bGw6aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdLmZ1bGxXaWR0aCksaS5jYXJkc0F0RnVsbEhlaWdodC5oYXMoZS5jYXJkSWQpfHwobnVsbD09aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdP251bGw6aS5jYXJkU3RhdGVNYXBbZS5jYXJkSWRdLnRhYmxlRXhwYW5kZWQpKSksdigxKSxfKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGUucGx1Z2luKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImNhcmRMYXp5TG9hZGVyIixlLmNhcmRJZCl9fWZ1bmN0aW9uIHlCZShuLHQpezEmbiYmbGkoMCl9dmFyIHhCZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITF9fSxDQmU9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiEwfX07ZnVuY3Rpb24gTUJlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxTKDEsX0JlLDEsMCwibmctY29udGFpbmVyIiwyKSxoKDIsImRpdiIsMyksUygzLHZCZSwyLDksImRpdiIsNCksZygpLFMoNCx5QmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoKSksMiZuKXtsZXQgZT13KCksaT1pdCgyKTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsY3UoOCx4QmUpKSx2KDEpLFR0KCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLGUuZ3JpZFRlbXBsYXRlQ29sdW1uKSx2KDEpLF8oIm5nRm9yT2YiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5Q2FyZHMpLHYoMSksXygibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixjdSg5LENCZSkpfX1mdW5jdGlvbiB3QmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDEyKSxJKCJjbGljayIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDMpO3JldHVybiBRKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleC0xLHIudGFyZ2V0KSl9KSxUKDEsIiBQcmV2aW91cyAiKSxnKCl9MiZuJiZfKCJkaXNhYmxlZCIsMD09PXcoMykucGFnZUluZGV4KX1mdW5jdGlvbiBTQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiwxNSkoMSwiaW5wdXQiLDE2KSxJKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSxnKCksVCgyKSxnKCl9aWYoMiZuKXtsZXQgZT13KDQpO3YoMSksXygidmFsdWUiLGUucGFnZUluZGV4KzEpKCJtYXgiLGUubnVtUGFnZXMpLHYoMSksSGUoIiBvZiAiLGUubnVtUGFnZXMsIiIpfX1mdW5jdGlvbiBFQmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJzcGFuIiksUygxLFNCZSwzLDMsInNwYW4iLDEzKSxoKDIsImJ1dHRvbiIsMTQpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMyk7cmV0dXJuIFEoby5oYW5kbGVQYWdlQ2hhbmdlKG8ucGFnZUluZGV4KzEsci50YXJnZXQpKX0pLFQoMywiIE5leHQgIiksZygpKCl9aWYoMiZuKXtsZXQgZT13KDIpLmlzQm90dG9tQ29udHJvbCxpPXcoKTt2KDEpLF8oIm5nSWYiLGkuc2hvd1BhZ2luYXRpb25JbnB1dChlKSksdigxKSxfKCJkaXNhYmxlZCIsaS5wYWdlSW5kZXgrMT49aS5udW1QYWdlcyl9fWZ1bmN0aW9uIFRCZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw4KSgxLCJzcGFuIiw5KSxTKDIsd0JlLDIsMSwiYnV0dG9uIiwxMCksZygpLGgoMywic3BhbiIsMTEpLFMoNCxFQmUsNCwyLCJzcGFuIiwwKSxnKCkoKSksMiZuKXtsZXQgZT13KDIpO3YoMiksXygibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSx2KDIpLF8oIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scyl9fWZ1bmN0aW9uIERCZShuLHQpezEmbiYmUygwLFRCZSw1LDIsImRpdiIsNyksMiZuJiZfKCJuZ0lmIix3KCkuc2hvd1BhZ2luYXRpb25Db250cm9scyl9dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2RrU2Nyb2xsYWJsZT1lLHRoaXMuUGx1Z2luVHlwZT16bix0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj0iIix0aGlzLmNhcmRzQXRGdWxsV2lkdGg9bmV3IFNldCx0aGlzLmNhcmRzQXRGdWxsSGVpZ2h0PW5ldyBTZXQsdGhpcy5wYWdlSW5kZXhDaGFuZ2VkPW5ldyBGfW5nT25Jbml0KCl7dGhpcy5pc0NhcmRXaWR0aFZhbGlkKHRoaXMuY2FyZE1pbldpZHRoKSYmKHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPWByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoJHt0aGlzLmNhcmRNaW5XaWR0aH1weCwgMWZyKSlgKX1uZ09uQ2hhbmdlcyhlKXtpZihlLmNhcmRNaW5XaWR0aCl7bGV0IGk9ZS5jYXJkTWluV2lkdGguY3VycmVudFZhbHVlO3RoaXMuaXNDYXJkV2lkdGhWYWxpZChpKT8odGhpcy5jYXJkTWluV2lkdGg9aSx0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCk6dGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiJ9fWlzQ2FyZFdpZHRoVmFsaWQoZSl7cmV0dXJuIGUmJmU+PTMzNSYmZTw9NzM1fXNob3dQYWdpbmF0aW9uSW5wdXQoZSl7cmV0dXJuIGV9aGFuZGxlUGFnZUNoYW5nZShlLGkpe2xldCByPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNjcm9sbFRvS2VlcFRhcmdldFBvc2l0aW9uKGkscil9LDApLHRoaXMucGFnZUluZGV4Q2hhbmdlZC5lbWl0KGUpfXNjcm9sbFRvS2VlcFRhcmdldFBvc2l0aW9uKGUsaSl7bGV0IHI9dGhpcy5jZGtTY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtyJiZyLnNjcm9sbFRvKDAsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtaStyLnNjcm9sbFRvcCl9dHJhY2tCeUNhcmRzKGUsaSl7cmV0dXJuIGkuY2FyZElkfW9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKGUpe2xldCBpPWUudGFyZ2V0O2lmKCJpbnB1dCI9PT1lLnR5cGUmJiIiPT09aS52YWx1ZSlyZXR1cm47bGV0IHI9TnVtYmVyKGkudmFsdWUpLTEsbz1NYXRoLm1pbihNYXRoLm1heCgwLHIpLHRoaXMubnVtUGFnZXMtMSk7aS52YWx1ZSE9PVN0cmluZyhvKzEpJiYoaS52YWx1ZT1TdHJpbmcobysxKSksdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKG8saSl9b25GdWxsV2lkdGhDaGFuZ2VkKGUsaSl7aT90aGlzLmNhcmRzQXRGdWxsV2lkdGguYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxXaWR0aC5kZWxldGUoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbEhlaWdodC5hZGQoZSk6dGhpcy5jYXJkc0F0RnVsbEhlaWdodC5kZWxldGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQ2QsOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIixwYWdlSW5kZXg6InBhZ2VJbmRleCIsbnVtUGFnZXM6Im51bVBhZ2VzIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkTWluV2lkdGg6ImNhcmRNaW5XaWR0aCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLHNob3dQYWdpbmF0aW9uQ29udHJvbHM6InNob3dQYWdpbmF0aW9uQ29udHJvbHMiLGNhcmRTdGF0ZU1hcDoiY2FyZFN0YXRlTWFwIn0sb3V0cHV0czp7cGFnZUluZGV4Q2hhbmdlZDoicGFnZUluZGV4Q2hhbmdlZCJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6Myx2YXJzOjEsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgc2V0cyBhIGdyb3VwIHRvIHRoZSBwcmV2aW91cyBwYWdlLuKQnzU3NWU3ODJmZDI3ZjJlZTcwYTAzNGE3NzVlZmU5YWQxNjI0NzIyNTDikJ8zNjI5OTYwNTQ0ODc1MzYwMDQ2OlByZXZpb3VzIHBhZ2VgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgbmV4dCBwYWdlLuKQn2NlM2NlZmIxY2QwMDk5YWE1MDAzZGRhMTZlYzllYjIxZmQ4YmE3ODnikJ8zMzM3MzAxNjk0MjEwMjg3NTk1Ok5leHQgcGFnZWAsW1s0LCJuZ0lmIl0sWyJncm91cENvbnRyb2xzIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjYXJkLWdyaWQiXSxbImNsYXNzIiwiY2FyZC1zcGFjZSIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsImNhcmRPYnNlcnZlciIsImNhcmRMYXp5TG9hZGVyIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRyb2xzIiw0LCJuZ0lmIl0sWzEsImdyb3VwLWNvbnRyb2xzIl0sWzEsInByZXYtY29udGFpbmVyIl0sWyJjbGFzcyIsInByZXYgcGFnaW5hdGlvbi1idXR0b24iLCJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImlucHV0LWFuZC1uZXh0LWNvbnRhaW5lciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwicHJldiIsInBhZ2luYXRpb24tYnV0dG9uIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJjbGFzcyIsInBhZ2luYXRpb24taW5wdXQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsIm5leHQiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJwYWdpbmF0aW9uLWlucHV0Il0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsMywidmFsdWUiLCJtYXgiLCJpbnB1dCIsImNoYW5nZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsTUJlLDUsMTAsImRpdiIsMCksUygxLERCZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsV3QpKSwyJmUmJl8oIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKX0sZGVwZW5kZW5jaWVzOltsUSxKdGUseW4sbm4sRmUsTHIsSmldLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29udGFpbjpjb250ZW50fS5jYXJkLWdyaWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDMzNXB4LCAxZnIpKTtnYXA6MTZweDtwYWRkaW5nOjE2cHh9LmNhcmQtc3BhY2UuZnVsbC13aWR0aFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1jb2x1bW4tc3RhcnQ6MTtncmlkLWNvbHVtbi1lbmQ6LTF9LmNhcmQtc3BhY2UuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NDgwcHh9LmNhcmQtc3BhY2UuZnVsbC1oZWlnaHRbX25nY29udGVudC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX1jYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGFpbjpsYXlvdXQgcGFpbnQ7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjMyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIGNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6Y2VudGVyO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1vZi10eXBle3BhZGRpbmctdG9wOjE2cHh9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7cGFkZGluZy1ib3R0b206MTZweH0ucHJldi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LXN0YXJ0fS5pbnB1dC1hbmQtbmV4dC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktc2VsZjpmbGV4LWVuZH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjE2cHh9LnBhZ2luYXRpb24taW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdH0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5ncm91cE5hbWUkPW5ldyBBaShudWxsKSx0aGlzLnBhZ2VJbmRleCQ9bmV3IEFpKDApLHRoaXMuaXRlbXMkPW5ldyBBaShbXSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBJZSx0aGlzLmNhcmRTdGF0ZU1hcCQ9dGhpcy5zdG9yZS5zZWxlY3QocWEpLHRoaXMubnVtUGFnZXMkPWRuKFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChCcy5nZXRQYWdlU2l6ZSldKS5waXBlKE4oKFtpLHJdKT0+TWF0aC5jZWlsKGkubGVuZ3RoL3IpKSksdGhpcy5pc0dyb3VwRXhwYW5kZWQkPXRoaXMuZ3JvdXBOYW1lJC5waXBlKEpuKGk9Pm51bGwhPT1pP3RoaXMuc3RvcmUuc2VsZWN0KHMxLGkpOkh0KCEwKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9dGhpcy5udW1QYWdlcyQucGlwZShOKGk9Pmk+MSkpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQ9ZG4oW3RoaXMucGFnZUluZGV4JCx0aGlzLm51bVBhZ2VzJF0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxOdCgoW2kscl0pPT57MCE9PXImJihpPj1yP3RoaXMucGFnZUluZGV4JC5uZXh0KHItMSk6aTwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSxOKChbaSxyXSk9Pk1hdGgubWluKE1hdGgubWF4KGksMCksci0xKSksTXMoMSkpLHRoaXMucGFnZWRJdGVtcyQ9ZG4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KEJzLmdldFBhZ2VTaXplKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkLHRoaXMuaXNHcm91cEV4cGFuZGVkJF0pLnBpcGUoTigoW2kscixvLHNdKT0+aS5zbGljZShyKm8scipvKyhzP3I6MCkpKSksdGhpcy5jYXJkTWluV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KFhoKX1uZ09uQ2hhbmdlcyhlKXtlLmNhcmRJZHNXaXRoTWV0YWRhdGEmJnRoaXMuaXRlbXMkLm5leHQodGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhKSxlLmdyb3VwTmFtZSYmdGhpcy5ncm91cE5hbWUkLm5leHQodGhpcy5ncm91cE5hbWUpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1vblBhZ2VJbmRleENoYW5nZWQoZSl7dGhpcy5wYWdlSW5kZXgkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZCJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGZlYXR1cmVzOltHdF0sZGVjbHM6OCx2YXJzOjIyLGNvbnN0czpbWzMsImlzR3JvdXBFeHBhbmRlZCIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkTWluV2lkdGgiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkU3RhdGVNYXAiLCJwYWdlSW5kZXhDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLEkoInBhZ2VJbmRleENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZUluZGV4Q2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxnKCkpLDImZSYmXygiaXNHcm91cEV4cGFuZGVkIixXKDEsOCxpLmlzR3JvdXBFeHBhbmRlZCQpKSgicGFnZUluZGV4IixXKDIsMTAsaS5ub3JtYWxpemVkUGFnZUluZGV4JCkpKCJudW1QYWdlcyIsVygzLDEyLGkubnVtUGFnZXMkKSkoInNob3dQYWdpbmF0aW9uQ29udHJvbHMiLFcoNCwxNCxpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMkKSkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFcoNSwxNixpLnBhZ2VkSXRlbXMkKSkoImNhcmRNaW5XaWR0aCIsVyg2LDE4LGkuY2FyZE1pbldpZHRoJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZFN0YXRlTWFwIixXKDcsMjAsaS5jYXJkU3RhdGVNYXAkKSl9LGRlcGVuZGVuY2llczpbJHRlLGN0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBQQmUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDcpLFQoMSksaigyLCJudW1iZXIiKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksSGUoIiIsVygyLDEsZS5udW1iZXJPZkNhcmRzKSwiIGNhcmRzIil9fWZ1bmN0aW9uIE9CZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsOCl9ZnVuY3Rpb24ga0JlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiw5KX12YXIgZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZD1uZXcgRn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLG51bWJlck9mQ2FyZHM6Im51bWJlck9mQ2FyZHMiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIn0sb3V0cHV0czp7Z3JvdXBFeHBhbnNpb25Ub2dnbGVkOiJncm91cEV4cGFuc2lvblRvZ2dsZWQifSxkZWNsczo5LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgYWxsb3dzIHVzZXIgdG8gZXhwYW5kIGEgdGFnIGdyb3VwLuKQn2ZmYWExMTQ3MWI4NzhhNmRmZmUyZTY4YzZmMzcwNjRhOWUwNzQ4NTPikJ81Mzg2MDU0MzI1Mjc0Nzc5MjU4OkV4cGFuZCBncm91cGAsW1siYXJpYS1sYWJlbCIsdCwxLCJncm91cC10b29sYmFyIiwzLCJjbGljayJdLFsxLCJncm91cC10aXRsZS13cmFwcGVyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzEsImV4cGFuZC1ncm91cC1pY29uIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Il0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImJ1dHRvbiIsMCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkLmVtaXQoKX0pLGgoMSwic3BhbiIsMSkoMiwic3BhbiIsMiksVCgzKSxnKCksUyg0LFBCZSwzLDMsInNwYW4iLDMpLGcoKSxoKDUsInNwYW4iLDQpLFMoNixPQmUsMSwwLCJtYXQtaWNvbiIsNSksUyg3LGtCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDYsV3QpLGcoKSgpKSwyJmUpe2xldCByPWl0KDgpO3YoMiksV2koInRpdGxlIixpLmdyb3VwTmFtZSksdigxKSxidChpLmdyb3VwTmFtZSksdigxKSxfKCJuZ0lmIixpLm51bWJlck9mQ2FyZHM+MSksdigyKSxfKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRmUsRW4sTGFdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9W19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiMyMTIxMjE7dG9wOi0xcHg7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Zm9udDppbmhlcml0fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5jYXJkLWdyb3VwOmZpcnN0LW9mLXR5cGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MH1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM2MTYxNjF9Lmdyb3VwLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3RleHQtYWxpZ246bGVmdH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5pc0dyb3VwRXhwYW5kZWQkPUh0KCExKX1uZ09uSW5pdCgpe3RoaXMuaXNHcm91cEV4cGFuZGVkJD1udWxsIT09dGhpcy5ncm91cE5hbWU/dGhpcy5zdG9yZS5zZWxlY3QoczEsdGhpcy5ncm91cE5hbWUpOkh0KCExKX1vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpe2lmKG51bGw9PT10aGlzLmdyb3VwTmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiBleHBhbnNpb24gY2Fubm90IGJlIHRvZ2dsZWQgd2hlbiBncm91cE5hbWUgaXMgbnVsbCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goUFQoe3RhZ0dyb3VwOnRoaXMuZ3JvdXBOYW1lfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyJ9LGRlY2xzOjIsdmFyczo1LGNvbnN0czpbWzMsIm51bWJlck9mQ2FyZHMiLCJpc0dyb3VwRXhwYW5kZWQiLCJncm91cE5hbWUiLCJncm91cEV4cGFuc2lvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyLWNvbXBvbmVudCIsMCksSSgiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl9KSxqKDEsImFzeW5jIiksZygpKSwyJmUmJl8oIm51bWJlck9mQ2FyZHMiLGkubnVtYmVyT2ZDYXJkcykoImlzR3JvdXBFeHBhbmRlZCIsVygxLDMsaS5pc0dyb3VwRXhwYW5kZWQkKSkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpfSxkZXBlbmRlbmNpZXM6W2VuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTEJlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDEpLFAoMSwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiLDIpKDIsIm1ldHJpY3MtY2FyZC1ncmlkIiwzKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KCk7digxKSxfKCJudW1iZXJPZkNhcmRzIixlLml0ZW1zLmxlbmd0aCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpLHYoMSksXygiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5pdGVtcykoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19dmFyIG5uZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXpufXRyYWNrQnlHcm91cChlLGkpe3JldHVybiBpLmdyb3VwTmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkR3JvdXBzOiJjYXJkR3JvdXBzIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjEsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQtZ3JvdXAiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLWdyb3VwIl0sWzMsIm51bWJlck9mQ2FyZHMiLCJncm91cE5hbWUiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsImdyb3VwTmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUygwLExCZSwzLDUsImRpdiIsMCksMiZlJiZfKCJuZ0Zvck9mIixpLmNhcmRHcm91cHMpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeUdyb3VwKX0sZGVwZW5kZW5jaWVzOltubixwXyx0bmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxpbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkR3JvdXBzJD10aGlzLnN0b3JlLnNlbGVjdChOZikucGlwZShMaSh0aGlzLnN0b3JlLnNlbGVjdChEYykpLE4oKFtpLHJdKT0+ci5zaXplP2kuZmlsdGVyKG89PnIuaGFzKG8ucGx1Z2luKSk6aSksTihpPT5MVChpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwcyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZEdyb3VwcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZfKCJjYXJkR3JvdXBzIixXKDEsMixpLmNhcmRHcm91cHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W25uZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gSEJlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiksVCgxKSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksSGUoIiBhbmQgIixlLmdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcoZS5wbHVnaW5UeXBlcyksIiB2aXN1YWxpemF0aW9uIGZpbHRlciIpfX12YXIgcm5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9em4sdGhpcy5saXN0Rm9ybWF0dGVyPW5ldyBJbnRsLkxpc3RGb3JtYXQodm9pZCAwLHtzdHlsZToibG9uZyIsdHlwZToiZGlzanVuY3Rpb24ifSl9Z2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlKXtsZXQgaT1bLi4uZV0ubWFwKHI9Pntzd2l0Y2gocil7Y2FzZSB6bi5TQ0FMQVJTOnJldHVybiJzY2FsYXIiO2Nhc2Ugem4uSU1BR0VTOnJldHVybiJpbWFnZSI7Y2FzZSB6bi5ISVNUT0dSQU1TOnJldHVybiJoaXN0b2dyYW0iO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsZWFzZSBpbXBsZW1lbnQgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgcGx1Z2luIHR5cGU6ICR7cn1gKX19KTtyZXR1cm4gdGhpcy5saXN0Rm9ybWF0dGVyLmZvcm1hdChpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50Il1dLGlucHV0czp7cGx1Z2luVHlwZXM6InBsdWdpblR5cGVzIix0YWdGaWx0ZXJSZWdleDoidGFnRmlsdGVyUmVnZXgiLHRhZ0NvdW50czoidGFnQ291bnRzIn0sZGVjbHM6Nix2YXJzOjUsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFQoMCwiTm8gbWF0Y2hlcyBmb3IgdGFnIGZpbHRlciAiKSxoKDEsImNvZGUiKSxUKDIpLGcoKSxTKDMsSEJlLDIsMSwic3BhbiIsMCksVCg0KSxqKDUsIm51bWJlciIpKSwyJmUmJih2KDIpLEhlKCIvIixpLnRhZ0ZpbHRlclJlZ2V4LCIvIiksdigxKSxfKCJuZ0lmIixpLnBsdWdpblR5cGVzLnNpemUpLHYoMSksSGUoIiBvdXQgb2YgIixXKDUsMyxpLnRhZ0NvdW50cyksIiB0YWdzLiIpKX0sZGVwZW5kZW5jaWVzOltGZSxMYV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksb25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KERjKSx0aGlzLnRhZ0ZpbHRlclJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChrbCksdGhpcy50YWdDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KE5mKS5waXBlKE4oaT0+bmV3IFNldChpLm1hcCgoe3RhZzpyfSk9PnIpKS5zaXplKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJwbHVnaW5UeXBlcyIsInRhZ0ZpbHRlclJlZ2V4IiwidGFnQ291bnRzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoUCgwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJl8oInBsdWdpblR5cGVzIixXKDEsMyxpLnBsdWdpblR5cGVzJCkpKCJ0YWdGaWx0ZXJSZWdleCIsVygyLDUsaS50YWdGaWx0ZXJSZWdleCQpKSgidGFnQ291bnRzIixXKDMsNyxpLnRhZ0NvdW50cyQpKX0sZGVwZW5kZW5jaWVzOltybmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGpCZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNiksVCgxKSxqKDIsIm51bWJlciIpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiIixXKDIsMSxlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSwiIGNhcmRzIil9fWZ1bmN0aW9uIEdCZShuLHQpezEmbiYmUCgwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNyl9dmFyIHNuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFbXB0eU1hdGNoOiJpc0VtcHR5TWF0Y2giLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwid2FybiIsNCwibmdJZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwid2FybiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSgxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxUKDMsIlRhZ3MgbWF0Y2hpbmcgZmlsdGVyIiksZygpLFMoNCxqQmUsMywzLCJzcGFuIiwzKSxnKCkoKSxTKDUsR0JlLDEsMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDQpLFAoNiwibWV0cmljcy1jYXJkLWdyaWQiLDUpKSwyJmUmJih2KDQpLF8oIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksdigxKSxfKCJuZ0lmIixpLmlzRW1wdHlNYXRjaCksdigxKSxfKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSl9LGRlcGVuZGVuY2llczpbRmUscF8sb25lLExhXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KE5mKS5waXBlKExpKHRoaXMuc3RvcmUuc2VsZWN0KERjKSksTigoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxMaSh0aGlzLnN0b3JlLnNlbGVjdChrbCkpLHdyKDIwMCksTigoW2kscl0pPT57dHJ5e3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om5ldyBSZWdFeHAociwiaSIpfX1jYXRjaHtyZXR1cm57Y2FyZExpc3Q6aSxyZWdleDpudWxsfX19KSxrZSgoe3JlZ2V4Oml9KT0+bnVsbCE9PWkpLE4oKHtjYXJkTGlzdDppLHJlZ2V4OnJ9KT0+aS5maWx0ZXIoKHt0YWc6b30pPT5yLnRlc3QobykpKSxZbigoaSxyKT0+aS5sZW5ndGg9PT1yLmxlbmd0aCYmaS5ldmVyeSgobyxzKT0+by5jYXJkSWQ9PT1yW3NdLmNhcmRJZCkpLENzKCkscW4oW10pKSx0aGlzLmlzRW1wdHlNYXRjaCQ9dGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJC5waXBlKExpKHRoaXMuc3RvcmUuc2VsZWN0KE5mKSksTigoW2kscl0pPT5Cb29sZWFuKHIubGVuZ3RoKSYmMD09PWkubGVuZ3RoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImlzRW1wdHlNYXRjaCIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmXygiaXNFbXB0eU1hdGNoIixXKDEsMyxpLmlzRW1wdHlNYXRjaCQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVygyLDUsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltzbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFhCZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsNyl9ZnVuY3Rpb24gUUJlKG4sdCl7aWYoMSZuJiYoaCgwLCJtYXQtb3B0aW9uIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJ2YWx1ZSIsZSksQmUoInRpdGxlIixlKSx2KDEpLGJ0KGUpfX1mdW5jdGlvbiBaQmUobix0KXtpZigxJm4mJihoKDAsImRpdiIsOSkoMSwiZW0iKSxUKDIpLGooMywibnVtYmVyIiksZygpKCkpLDImbil7bGV0IGU9dygpO3YoMiksSGUoImFuZCAiLFcoMywxLGUuY29tcGxldGlvbnMubGVuZ3RoLTI1KSwiIG1vcmUgdGFncyBtYXRjaGVkIil9fXZhciBsbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlPW5ldyBGfW9uQ29tcGxldGlvbkFjY2VwdGVkKGUpe3RoaXMub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShmYmUsIlxcJCYiKX0oZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgidmFsaWQiLGkuaXNSZWdleEZpbHRlclZhbGlkKX0saW5wdXRzOntyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCIsY29tcGxldGlvbnM6ImNvbXBsZXRpb25zIn0sb3V0cHV0czp7b25SZWdleEZpbHRlclZhbHVlQ2hhbmdlOiJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UifSxkZWNsczo3LHZhcnM6NSxjb25zdHM6W1sxLCJ0YWctZmlsdGVyIl0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciB0YWdzIChyZWdleCkiLDMsInZhbHVlIiwibWF0QXV0b2NvbXBsZXRlIiwiaW5wdXQiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwiY2xhc3MiLCJlcnJvci1pY29uIiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWzEsInRhZy1vcHRpb25zIiwzLCJvcHRpb25TZWxlY3RlZCJdLFsiZmlsdGVyTWF0Y2hlcyIsIm1hdEF1dG9jb21wbGV0ZSJdLFsiY2xhc3MiLCJvcHRpb24iLDMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiYW5kLW1vcmUiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwidGl0bGUiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiwxLCJlcnJvci1pY29uIl0sWzEsIm9wdGlvbiIsMywidmFsdWUiXSxbMSwiYW5kLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoby50YXJnZXQudmFsdWUpfSksZygpLFMoMixYQmUsMSwwLCJtYXQtaWNvbiIsMiksZygpLGgoMywibWF0LWF1dG9jb21wbGV0ZSIsMyw0KSxJKCJvcHRpb25TZWxlY3RlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Db21wbGV0aW9uQWNjZXB0ZWQoby5vcHRpb24udmFsdWUpfSksUyg1LFFCZSwyLDMsIm1hdC1vcHRpb24iLDUpLFMoNixaQmUsNCwzLCJkaXYiLDYpLGcoKSksMiZlKXtsZXQgcj1pdCg0KTt2KDEpLF8oInZhbHVlIixpLnJlZ2V4RmlsdGVyVmFsdWUpKCJtYXRBdXRvY29tcGxldGUiLHIpLHYoMSksXygibmdJZiIsIWkuaXNSZWdleEZpbHRlclZhbGlkKSx2KDMpLF8oIm5nRm9yT2YiLG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLnNsaWNlKDAsMjUpKSx2KDEpLF8oIm5nSWYiLChudWxsPT1pLmNvbXBsZXRpb25zP251bGw6aS5jb21wbGV0aW9ucy5sZW5ndGgpPjI1KX19LGRlcGVuZGVuY2llczpbbm4sRmUsU3AsT3RlLFVzLEVuLExhXSxzdHlsZXM6WyIudGFnLWZpbHRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfXRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9W19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojMjEyMTIxfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXXtjb2xvcjojZmZmfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0gIC50YWctb3B0aW9ucyAub3B0aW9uLCAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtbGluZS1jbGFtcDozO2Rpc3BsYXk6LXdlYmtpdC1ib3g7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS40O3BhZGRpbmc6OHB4IDE2cHh9ICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgICAudGFnLW9wdGlvbnMgLmFuZC1tb3JlLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxjbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy50YWdGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KGtsKSx0aGlzLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQ9dGhpcy50YWdGaWx0ZXIkLnBpcGUoTihpPT57dHJ5e3JldHVybiBuZXcgUmVnRXhwKGkpLCEwfWNhdGNoe3JldHVybiExfX0pKSx0aGlzLmNvbXBsZXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChlMSkucGlwZShMaSh0aGlzLnN0b3JlLnNlbGVjdChEYykpLE4oKFtpLHJdKT0+aS5maWx0ZXIoKHtwbHVnaW46b30pPT4hci5zaXplfHxyLmhhcyhvKSkubWFwKCh7dGFnOm99KT0+bykpLE4oaT0+Wy4uLm5ldyBTZXQoaSldKSxOKGk9Pmkuc29ydCh5eSkpLExpKHRoaXMuc3RvcmUuc2VsZWN0KGtsKSksTigoW2kscl0pPT57dHJ5e3JldHVybltpLG5ldyBSZWdFeHAociwiaSIpXX1jYXRjaHtyZXR1cm5baSxudWxsXX19KSxrZSgoWyxpXSk9Pm51bGwhPT1pKSxOKChbaSxyXSk9PmkuZmlsdGVyKG89PnIudGVzdChvKSkpKX1vblRhZ0ZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFJUKHt0YWdGaWx0ZXI6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJyZWdleEZpbHRlclZhbHVlIiwiaXNSZWdleEZpbHRlclZhbGlkIiwiY29tcGxldGlvbnMiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiLDApLEkoIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWdGaWx0ZXJDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxnKCkpLDImZSYmXygicmVnZXhGaWx0ZXJWYWx1ZSIsVygxLDMsaS50YWdGaWx0ZXIkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsVygyLDUsaS5pc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkKSkoImNvbXBsZXRpb25zIixXKDMsNyxpLmNvbXBsZXRpb25zJCkpfSxkZXBlbmRlbmNpZXM6W2xuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gJEJlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiw4KSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiIixlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoLCIgY2FyZHMiKX19ZnVuY3Rpb24gZVZlKG4sdCl7MSZuJiYoaCgwLCJzcGFuIiw5KSxUKDEsIk5ldyBjYXJkIHBpbm5lZCIpLGcoKSksMiZuJiZCZSgiZGF0YS1pZCIsdC4kaW1wbGljaXQpfWZ1bmN0aW9uIHRWZShuLHQpe2lmKDEmbiYmUCgwLCJtZXRyaWNzLWNhcmQtZ3JpZCIsMTApLDImbil7bGV0IGU9dygpO18oImNhcmRJZHNXaXRoTWV0YWRhdGEiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsZS5jYXJkT2JzZXJ2ZXIpfX1mdW5jdGlvbiBuVmUobix0KXsxJm4mJihoKDAsImRpdiIsMTEpLFQoMSwiUGluIGNhcmRzIGZvciBhIHF1aWNrIHZpZXcgYW5kIGNvbXBhcmlzb24iKSxnKCkpfXZhciBkbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1waW5uZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsbmV3Q2FyZFBpbm5lZElkczoibmV3Q2FyZFBpbm5lZElkcyJ9LGRlY2xzOjEwLHZhcnM6NCxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il0sWzEsImdyb3VwLXRleHQiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuZXctY2FyZC1waW5uZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImVtcHR5UGlubmVkVmlldyIsIiJdLFsxLCJncm91cC1jYXJkLWNvdW50Il0sWzEsIm5ldy1jYXJkLXBpbm5lZCJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCksUCgxLCJtYXQtaWNvbiIsMSksaCgyLCJzcGFuIiwyKSgzLCJzcGFuIiwzKSxUKDQsIlBpbm5lZCIpLGcoKSxTKDUsJEJlLDIsMSwic3BhbiIsNCksUyg2LGVWZSwyLDEsInNwYW4iLDUpLGcoKSgpLFMoNyx0VmUsMSwyLCJtZXRyaWNzLWNhcmQtZ3JpZCIsNiksUyg4LG5WZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDcsV3QpKSwyJmUpe2xldCByPWl0KDkpO3YoNSksXygibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSx2KDEpLF8oIm5nRm9yT2YiLGkubmV3Q2FyZFBpbm5lZElkcyksdigxKSxfKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltubixGZSxFbixwX10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmbGV4Om5vbmU7bWFyZ2luLXJpZ2h0OjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2dhcDo2cHh9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ubmV3LWNhcmQtcGlubmVkW19uZ2NvbnRlbnQtJUNPTVAlXXthbmltYXRpb246X25nY29udGVudC0lQ09NUCVfcGlubmVkLXZpZXctZmFkZS1vdXQgM3MgbGluZWFyO2JhY2tncm91bmQ6I2Y0NDMzNjtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojZmZmO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxM3B4O29wYWNpdHk6MDtwYWRkaW5nOjNweCA1cHh9QGtleWZyYW1lcyBfbmdjb250ZW50LSVDT01QJV9waW5uZWQtdmlldy1mYWRlLW91dHtmcm9te29wYWNpdHk6MX02NiV7b3BhY2l0eTouOTl9dG97b3BhY2l0eTowfX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHVuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KHl2KS5waXBlKHFuKFtdKSksdGhpcy5uZXdDYXJkUGlubmVkSWRzJD10aGlzLnN0b3JlLnNlbGVjdCh5dikucGlwZShpYSgxKSxOKGk9PmkubWFwKHI9PnIuY2FyZElkKSksRm0oKSxOKChbaSxyXSk9PntsZXQgbz1uZXcgU2V0KGkpLHM9bmV3IFNldChyKTtmb3IobGV0IGEgb2YgcylpZighby5oYXMoYSkpcmV0dXJuIERhdGUubm93KCk7cmV0dXJuIG51bGx9KSxxbihudWxsKSxGbSgpLE4oKFtpLHJdKT0+bnVsbD09PWkmJm51bGw9PT1yP251bGw6bnVsbD09PXI/W2ldOltyXSksa2UoaT0+bnVsbCE9PWkpLE4oaT0+W2lbMF1dKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwibmV3Q2FyZFBpbm5lZElkcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKFAoMCwibWV0cmljcy1waW5uZWQtdmlldy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmXygiY2FyZElkc1dpdGhNZXRhZGF0YSIsVygxLDMsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJuZXdDYXJkUGlubmVkSWRzIixXKDIsNSxpLm5ld0NhcmRQaW5uZWRJZHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W2RuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gb1ZlKG4sdCl7MSZuJiZQKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTMpLDImbiYmXygiY2FyZE9ic2VydmVyIix3KCkuY2FyZE9ic2VydmVyKX1mdW5jdGlvbiBzVmUobix0KXsxJm4mJihoKDAsImRpdiIsMTcpLFAoMSwibWF0LXNwaW5uZXIiLDE4KSxnKCkpfXZhciBhVmU9ZnVuY3Rpb24obil7cmV0dXJueyJzbGlkZS1vdXQtbWVudS1leHBhbmRlZCI6bn19O2Z1bmN0aW9uIGxWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxOSksUCgxLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yIiksZygpKSwyJm4pe2xldCBlPXcoKTtfKCJuZ0NsYXNzIixJbigxLGFWZSxlLnNsaWRlT3V0TWVudU9wZW4pKX19ZnVuY3Rpb24gY1ZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyMCkoMSwiZGl2IiwyMSkoMiwiaDIiLDIyKSxUKDMsIlNldHRpbmdzIiksZygpLGgoNCwiYnV0dG9uIiwyMyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCkpfSksUCg1LCJtYXQtaWNvbiIsMjQpLGcoKSgpLFAoNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLGcoKX19dmFyIGRWZT1mdW5jdGlvbihuKXtyZXR1cm57Y2hlY2tlZDpuLCJzZXR0aW5ncy1idXR0b24iOiEwfX0sdVZlPW5ldyBpZSgiQ3VzdG9taXphYmxlIFNoYXJlIEJ1dHRvbiIpLHBuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5ob3N0PWUsdGhpcy5jdXN0b21TaGFyZUJ1dHRvbj1pLHRoaXMub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQ9bmV3IEYsdGhpcy5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkPW5ldyBGLHRoaXMub25QbHVnaW5UeXBlVG9nZ2xlZD1uZXcgRix0aGlzLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ9bmV3IEYsdGhpcy5QbHVnaW5UeXBlPXpuLHRoaXMuY2FyZE9ic2VydmVyPW5ldyB4eSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiNjAwcHggMHB4IDYwMHB4IDBweCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKE1lKSxDKHVWZSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0ZpbHRlcmVkVmlldzoic2hvd0ZpbHRlcmVkVmlldyIsaXNTaWRlcGFuZU9wZW46ImlzU2lkZXBhbmVPcGVuIixmaWx0ZXJlZFBsdWdpblR5cGVzOiJmaWx0ZXJlZFBsdWdpblR5cGVzIixpbml0aWFsVGFnc0xvYWRpbmc6ImluaXRpYWxUYWdzTG9hZGluZyIsc2xpZGVPdXRNZW51T3Blbjoic2xpZGVPdXRNZW51T3BlbiJ9LG91dHB1dHM6e29uU2V0dGluZ3NCdXR0b25DbGlja2VkOiJvblNldHRpbmdzQnV0dG9uQ2xpY2tlZCIsb25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZDoib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsb25QbHVnaW5UeXBlVG9nZ2xlZDoib25QbHVnaW5UeXBlVG9nZ2xlZCIsb25QbHVnaW5UeXBlQWxsVG9nZ2xlZDoib25QbHVnaW5UeXBlQWxsVG9nZ2xlZCJ9LGRlY2xzOjI0LHZhcnM6MjMsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIG9uIGEgdG9vbGJhciBidXR0b24gdG8gdG9nZ2xlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfZDM1MTZkYjZiYmU2ODYwYTU1YmVhYjY2ZTQ5NjlkYWM2MjViOGQ3MuKQnzc2NTkyODU0NDU1ODA4Mzg5MjU6VG9nZ2xlIHNldHRpbmdzIHNpZGUgcGFuZWAsZT0kbG9jYWxpemVgOkxhYmVsIG9uIGEgYnV0dG9uIHRvIGNsb3NlIHRoZSBzZXR0aW5ncyBzaWRlIHBhbmUu4pCfMDQ1MjFkYzBiNmE2NWNmNWMzODI5NDRjOWE4YjRiODQ0YTNlOTU5OOKQnzgxNTY3NjY5OTc3NDcxNjU4NzE6Q2xvc2Ugc2lkZSBwYW5lYCxbWzEsInRvb2xiYXIiXSxbIm11bHRpcGxlIiwiIiwiYXBwZWFyYW5jZSIsInN0YW5kYXJkIiwxLCJmaWx0ZXItdmlldyJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJhbGwiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwic2NhbGFycyIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJpbWFnZSIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJoaXN0b2dyYW0iLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbMywiY3VzdG9taXphYmxlQ29tcG9uZW50Il0sWzEsInJpZ2h0LWl0ZW1zIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsIm5nQ2xhc3MiLCJjbGljayJdLFsic3ZnSWNvbiIsInNldHRpbmdzXzI0cHgiXSxbMSwic3BsaXQtY29udGVudCJdLFsiY2RrU2Nyb2xsYWJsZSIsIiJdLFszLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiXSxbMywiY2FyZE9ic2VydmVyIl0sWyJjbGFzcyIsImxvYWRpbmctY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDQsIm5nSWYiXSxbMSwibG9hZGluZy1jb250YWluZXIiXSxbImRpYW1ldGVyIiwiMzYiXSxbMSwic2xpZGUtb3V0LW1lbnUiLDMsIm5nQ2xhc3MiXSxbMSwic2lkZWJhciJdLFsxLCJoZWFkZXIiXSxbMSwidGl0bGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiZGl2IiwwKSxQKDEsIm1ldHJpY3MtdGFnLWZpbHRlciIpLGgoMiwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiLDEpKDMsImJ1dHRvbiIsMiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlQWxsVG9nZ2xlZC5lbWl0KCl9KSxUKDQsIiBBbGwgIiksZygpLGgoNSwiYnV0dG9uIiwzKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLlNDQUxBUlMpfSksVCg2LCIgU2NhbGFycyAiKSxnKCksaCg3LCJidXR0b24iLDQpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSU1BR0VTKX0pLFQoOCwiIEltYWdlICIpLGcoKSxoKDksImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX0pLFQoMTAsIiBIaXN0b2dyYW0gIiksZygpKCksUCgxMSwidGItY3VzdG9taXphdGlvbiIsNiksaCgxMiwiZGl2Iiw3KSgxMywiYnV0dG9uIiw4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZC5lbWl0KCl9KSxQKDE0LCJtYXQtaWNvbiIsOSksVCgxNSwiIFNldHRpbmdzICIpLGcoKSgpKCksaCgxNiwiZGl2IiwxMCkoMTcsImRpdiIsMTEpLFMoMTgsb1ZlLDEsMSwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMiksUCgxOSwibWV0cmljcy1waW5uZWQtdmlldyIsMTMpLFMoMjAsc1ZlLDIsMCwiZGl2IiwxNCksUCgyMSwibWV0cmljcy1jYXJkLWdyb3VwcyIsMTMpLGcoKSxTKDIyLGxWZSwyLDMsImRpdiIsMTUpLFMoMjMsY1ZlLDcsMCwiZGl2IiwxNiksZygpKSwyJmUmJih2KDMpLEJlKCJhcmlhLWNoZWNrZWQiLDA9PT1pLmZpbHRlcmVkUGx1Z2luVHlwZXMuc2l6ZSksdigyKSxCZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5TQ0FMQVJTKSksdigyKSxCZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5JTUFHRVMpKSx2KDIpLEJlKCJhcmlhLWNoZWNrZWQiLGkuZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMoaS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpKSx2KDIpLF8oImN1c3RvbWl6YWJsZUNvbXBvbmVudCIsaS5jdXN0b21TaGFyZUJ1dHRvbiksdigyKSxfKCJuZ0NsYXNzIixJbigyMSxkVmUsaS5pc1NpZGVwYW5lT3BlbikpLEJlKCJhcmlhLXByZXNzZWQiLGkuaXNTaWRlcGFuZU9wZW4pLHYoNCksbnQoIm1haW4iLCEwKSgiZmlsdGVyLXZpZXciLGkuc2hvd0ZpbHRlcmVkVmlldyksdigxKSxfKCJuZ0lmIixpLnNob3dGaWx0ZXJlZFZpZXcpLHYoMSksVHQoImRpc3BsYXkiLGkuc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLF8oImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpLHYoMSksXygibmdJZiIsaS5pbml0aWFsVGFnc0xvYWRpbmcpLHYoMSksVHQoImRpc3BsYXkiLGkuc2hvd0ZpbHRlcmVkVmlldz8ibm9uZSI6IiIpLF8oImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpLHYoMSksXygibmdJZiIsaS5pc1NpZGVwYW5lT3BlbiksdigxKSxfKCJuZ0lmIixpLmlzU2lkZXBhbmVPcGVuKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsY1EsQ2QsSmksJGksUk4sRW4sdGwsYlEsQ1EsaW5lLGFuZSxjbmUsdW5lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDEwMHB4fS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yaWdodC1pdGVtc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLWxlZnQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fW1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo0cHg7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtoZWlnaHQ6MjVweDtsaW5lLWhlaWdodDoyNXB4O21pbi13aWR0aDp1bnNldDtwYWRkaW5nOjAgMTJweH0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSArIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSArIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9LnNwbGl0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtvdmVyZmxvdy15OmF1dG87ZmxleDoxfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLHNjcm9sbC1wb3NpdGlvbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY2Zjc7ZmxleDoxIDE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzYTNhM2F9Lm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1waW5uZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbn0ubWFpbi5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLWZpbHRlcmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46Y29udGVudDtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmxvYWRpbmctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjIwcHggMH0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDowIDAgMjUwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0MnB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MThweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6aW5saW5lLWZsZXh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlci1jb2xvcjojZTBlMGUwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b24uY2hlY2tlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1idXR0b24td3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjRweH0uc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtoZWlnaHQ6Y2FsYygxMDAlIC0gNDlweCk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NTBweDt0b3A6NDlweDt0cmFuc2l0aW9uOmFsbCAuNzVzIGVhc2U7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjAwcHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uc2xpZGUtb3V0LW1lbnUtZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjI1MHB4O3Zpc2liaWxpdHk6dmlzaWJsZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGZuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzU2lkZXBhbmVPcGVuJD10aGlzLnN0b3JlLnNlbGVjdChhMSksdGhpcy5pbml0aWFsVGFnc0xvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHZ2KS5waXBlKEFfKGk9Pm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcywhMCksTihpPT5pLnN0YXRlPT09VGUuTE9BRElORyYmbnVsbD09PWkubGFzdExvYWRlZFRpbWVJbk1zKSksdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChrbCkucGlwZShOKGk9PmkubGVuZ3RoPjApKSx0aGlzLmZpbHRlcmVkUGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KERjKSx0aGlzLmlzU2xpZGVvdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QobDEpfW9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChvVCgpKX1vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChyVCgpKX1vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Qoe3BsdWdpbjplfSkpfW9uU2hvd0FsbFBsdWdpbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGtUKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXciXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsInNob3dGaWx0ZXJlZFZpZXciLCJpc1NpZGVwYW5lT3BlbiIsImluaXRpYWxUYWdzTG9hZGluZyIsImZpbHRlcmVkUGx1Z2luVHlwZXMiLCJzbGlkZU91dE1lbnVPcGVuIiwib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIiwib25QbHVnaW5UeXBlVG9nZ2xlZCIsIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksSSgib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQoKX0pKCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKX0pKCJvblBsdWdpblR5cGVUb2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKG8pfSkoIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TaG93QWxsUGx1Z2lucygpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxnKCkpLDImZSYmXygic2hvd0ZpbHRlcmVkVmlldyIsVygxLDUsaS5zaG93RmlsdGVyZWRWaWV3JCkpKCJpc1NpZGVwYW5lT3BlbiIsVygyLDcsaS5pc1NpZGVwYW5lT3BlbiQpKSgiaW5pdGlhbFRhZ3NMb2FkaW5nIixXKDMsOSxpLmluaXRpYWxUYWdzTG9hZGluZyQpKSgiZmlsdGVyZWRQbHVnaW5UeXBlcyIsVyg0LDExLGkuZmlsdGVyZWRQbHVnaW5UeXBlcyQpKSgic2xpZGVPdXRNZW51T3BlbiIsVyg1LDEzLGkuaXNTbGlkZW91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W3BuZSxjdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYnM9KCgpPT4oZnVuY3Rpb24obil7bi5DSEVDS0JPWD0iY2hlY2tib3giLG4uUlVOX05BTUU9InJ1bl9uYW1lIixuLkVYUEVSSU1FTlRfTkFNRT0iZXhwZXJpbWVudF9uYW1lIixuLlJVTl9DT0xPUj0icnVuX2NvbG9yIn0oYnN8fChicz17fSkpLGJzKSkoKSxFcD0oKCk9PihmdW5jdGlvbihuKXtuW24uQkVGT1JFPTBdPSJCRUZPUkUiLG5bbi5BRlRFUj0xXT0iQUZURVIifShFcHx8KEVwPXt9KSksRXApKSgpLG1uZT1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIl0pLG1WZT17aW5zZXJ0VW5kZWZpbmVkOkVwLkFGVEVSfTtmdW5jdGlvbiBobmUobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBpc05hTihuKT92b2lkIDA6bjtpZighaXNOYU4ocGFyc2VJbnQobikpKXJldHVybiBwYXJzZUludChuKTtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZihpc05hTihwYXJzZUludChuW3RdKSkpcmV0dXJuIDA9PT10P3ZvaWQgMDpwYXJzZUludChuLnNsaWNlKDAsdCkpfXZhciBoVmU9WyJkaWFsb2dQb3B1cCJdLGdWZT1bImh1ZVNsaWRlciJdLF9WZT1bImFscGhhU2xpZGVyIl07ZnVuY3Rpb24gYlZlKG4sdCl7aWYoMSZuJiZQKDAsImRpdiIpLDImbil7bGV0IGU9dygpO21iKCJhcnJvdyBhcnJvdy0iLGUuY3BVc2VQb3NpdGlvbiwiIiksVHQoInRvcCIsZS5hcnJvd1RvcCwicHgiKX19ZnVuY3Rpb24gdlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwyOCksSSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRyYWdTdGFydCgic2F0dXJhdGlvbi1saWdodG5lc3MiKSl9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkRyYWdFbmQoInNhdHVyYXRpb24tbGlnaHRuZXNzIikpfSksUCgxLCJkaXYiLDE0KSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7VHQoImJhY2tncm91bmQtY29sb3IiLGUuaHVlU2xpZGVyQ29sb3IpLF8oInJnWCIsMSkoInJnWSIsMSksdigxKSxUdCgidG9wIixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnYsInB4IikoImxlZnQiLG51bGw9PWUuc2xpZGVyP251bGw6ZS5zbGlkZXIucywicHgiKX19ZnVuY3Rpb24geVZlKG4sdCl7MSZuJiYoTm4oKSxoKDAsInN2ZyIsMjkpLFAoMSwicGF0aCIsMzApKDIsInBhdGgiLDMxKSxnKCkpfWZ1bmN0aW9uIHhWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsMzIpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKTtyZXR1cm4gUShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLFQoMSksZygpfWlmKDImbil7bGV0IGU9dygpO0FzKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxfKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHYoMSksSGUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gQ1ZlKG4sdCl7MSZuJiZQKDAsImRpdiIsMzMpfWZ1bmN0aW9uIE1WZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImlucHV0IiwzOSksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oInJnIiwxKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LmEpfX1mdW5jdGlvbiB3VmUobix0KXsxJm4mJihoKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gU1ZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2IiwzNCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDM2KSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQ3lhbklucHV0KHIpKX0pLGcoKSxoKDMsImlucHV0IiwzNiksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbk1hZ2VudGFJbnB1dChyKSl9KSxnKCksaCg0LCJpbnB1dCIsMzYpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25ZZWxsb3dJbnB1dChyKSl9KSxnKCksaCg1LCJpbnB1dCIsMzYpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25CbGFja0lucHV0KHIpKX0pLGcoKSxTKDYsTVZlLDEsMiwiaW5wdXQiLDM3KSxnKCksaCg3LCJkaXYiLDM1KSg4LCJkaXYiKSxUKDksIkMiKSxnKCksaCgxMCwiZGl2IiksVCgxMSwiTSIpLGcoKSxoKDEyLCJkaXYiKSxUKDEzLCJZIiksZygpLGgoMTQsImRpdiIpLFQoMTUsIksiKSxnKCksUygxNix3VmUsMiwwLCJkaXYiLDM4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtUdCgiZGlzcGxheSIsMyE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx2KDIpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQuYyksdigxKSxfKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0Lm0pLHYoMSksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC55KSx2KDEpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQuayksdigxKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksdigxMCksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBFVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJpbnB1dCIsMzkpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVFZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIERWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkh1ZUlucHV0KHIpKX0pLGcoKSxoKDMsImlucHV0IiwzNiksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblNhdHVyYXRpb25JbnB1dChyKSl9KSxnKCksaCg0LCJpbnB1dCIsMzYpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25MaWdodG5lc3NJbnB1dChyKSl9KSxnKCksUyg1LEVWZSwxLDIsImlucHV0IiwzNyksZygpLGgoNiwiZGl2IiwzNSkoNywiZGl2IiksVCg4LCJIIiksZygpLGgoOSwiZGl2IiksVCgxMCwiUyIpLGcoKSxoKDExLCJkaXYiKSxUKDEyLCJMIiksZygpLFMoMTMsVFZlLDIsMCwiZGl2IiwzOCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7VHQoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIiksdigyKSxfKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHYoMSksXygicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx2KDEpLF8oInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCksdigxKSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksdig4KSxfKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIElWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImlucHV0IiwzOSksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWxwaGFJbnB1dChyKSl9KSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO18oInJnIiwxKSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmEpfX1mdW5jdGlvbiBBVmUobix0KXsxJm4mJihoKDAsImRpdiIpLFQoMSwiQSIpLGcoKSl9ZnVuY3Rpb24gUlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiZGl2Iiw0MikoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQzKSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uUmVkSW5wdXQocikpfSksZygpLGgoMywiaW5wdXQiLDQzKSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uR3JlZW5JbnB1dChyKSl9KSxnKCksaCg0LCJpbnB1dCIsNDMpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25CbHVlSW5wdXQocikpfSksZygpLFMoNSxJVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDYsImRpdiIsMzUpKDcsImRpdiIpLFQoOCwiUiIpLGcoKSxoKDksImRpdiIpLFQoMTAsIkciKSxnKCksaCgxMSwiZGl2IiksVCgxMiwiQiIpLGcoKSxTKDEzLEFWZSwyLDAsImRpdiIsMzgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO1R0KCJkaXNwbGF5IiwxIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHYoMiksXygicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5yKSx2KDEpLF8oInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuZyksdigxKSxfKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmIpLHYoMSksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpLHYoOCksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBQVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJpbnB1dCIsMzkpLEkoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygyKS5vbkFscGhhSW5wdXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygyKTtfKCJyZyIsMSkoInZhbHVlIixlLmhleEFscGhhKX19ZnVuY3Rpb24gT1ZlKG4sdCl7MSZuJiYoaCgwLCJkaXYiKSxUKDEsIkEiKSxnKCkpfWZ1bmN0aW9uIGtWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDQpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0NSksSSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkhleElucHV0KG51bGwpKX0pKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSGV4SW5wdXQocikpfSksZygpLFMoMyxQVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDQsImRpdiIsMzUpKDUsImRpdiIpLFQoNiwiSGV4IiksZygpLFMoNyxPVmUsMiwwLCJkaXYiLDM4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtUdCgiZGlzcGxheSIsMCE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSxudCgiaGV4LWFscGhhIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpLHYoMiksXygidmFsdWUiLGUuaGV4VGV4dCksdigxKSxfKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpLHYoNCksXygibmdJZiIsImZvcmNlZCI9PT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gRlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiaW5wdXQiLDM5KSxJKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BbHBoYUlucHV0KHIpKX0pLGcoKX1pZigyJm4pe2xldCBlPXcoMik7XygicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIE5WZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksSSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblZhbHVlSW5wdXQocikpfSksZygpLFMoMyxGVmUsMSwyLCJpbnB1dCIsMzcpLGcoKSxoKDQsImRpdiIsMzUpKDUsImRpdiIpLFQoNiwiViIpLGcoKSxoKDcsImRpdiIpLFQoOCwiQSIpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT13KCk7digyKSxfKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmwpLHYoMSksXygibmdJZiIsImRpc2FibGVkIiE9PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBMVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDQ3KSgxLCJzcGFuIiw0OCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLGcoKSxoKDIsInNwYW4iLDQ4KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5vbkZvcm1hdFRvZ2dsZSgxKSl9KSxnKCkoKX19ZnVuY3Rpb24gQlZlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwic3BhbiIsNTUpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygzKS5vblJlbW92ZVByZXNldENvbG9yKHIsbykpfSksZygpfTImbiYmQXModyg0KS5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3MpfWZ1bmN0aW9uIFZWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNTMpLEkoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0O3JldHVybiBRKHcoMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLFMoMSxCVmUsMSwzLCJzcGFuIiw1NCksZygpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDMpO1R0KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx2KDEpLF8oIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIEhWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiksUygxLFZWZSwyLDMsImRpdiIsNTIpLGcoKSksMiZuKXtsZXQgZT13KDIpO0FzKGUuY3BQcmVzZXRDb2xvcnNDbGFzcyksdigxKSxfKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gelZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpO0FzKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyksdigxKSxidChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gVVZlKG4sdCl7aWYoMSZuJiYoaCgwLCJkaXYiLDQ5KSxQKDEsImhyIiksaCgyLCJkaXYiLDUwKSxUKDMpLGcoKSxTKDQsSFZlLDIsNCwiZGl2Iiw1MSksUyg1LHpWZSwyLDQsImRpdiIsNTEpLGcoKSksMiZuKXtsZXQgZT13KCk7digzKSxidChlLmNwUHJlc2V0TGFiZWwpLHYoMSksXygibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx2KDEpLF8oIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiBqVmUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJidXR0b24iLDU4KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLm9uQ2FuY2VsQ29sb3IocikpfSksVCgxKSxnKCl9aWYoMiZuKXtsZXQgZT13KDIpO0FzKGUuY3BDYW5jZWxCdXR0b25DbGFzcyksdigxKSxidChlLmNwQ2FuY2VsQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIEdWZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImJ1dHRvbiIsNTgpLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMikub25BY2NlcHRDb2xvcihyKSl9KSxUKDEpLGcoKX1pZigyJm4pe2xldCBlPXcoMik7QXMoZS5jcE9LQnV0dG9uQ2xhc3MpLHYoMSksYnQoZS5jcE9LQnV0dG9uVGV4dCl9fWZ1bmN0aW9uIFdWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw1NiksUygxLGpWZSwyLDQsImJ1dHRvbiIsNTcpLFMoMixHVmUsMiw0LCJidXR0b24iLDU3KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksXygibmdJZiIsZS5jcENhbmNlbEJ1dHRvbiksdigxKSxfKCJuZ0lmIixlLmNwT0tCdXR0b24pfX1mdW5jdGlvbiBxVmUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIFlWZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2Iiw1OSksUygxLHFWZSwxLDAsIm5nLWNvbnRhaW5lciIsNjApLGcoKSksMiZuKXtsZXQgZT13KCk7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmNwRXh0cmFUZW1wbGF0ZSl9fXZhciBIbz0oKCk9PihmdW5jdGlvbihuKXtuW24uSEVYPTBdPSJIRVgiLG5bbi5SR0JBPTFdPSJSR0JBIixuW24uSFNMQT0yXT0iSFNMQSIsbltuLkNNWUs9M109IkNNWUsifShIb3x8KEhvPXt9KSksSG8pKSgpLHRjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMucj10LHRoaXMuZz1lLHRoaXMuYj1pLHRoaXMuYT1yfX0sZl89Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PWksdGhpcy5hPXJ9fSxZZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLmw9aSx0aGlzLmE9cn19LHhtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbz0xKXt0aGlzLmM9dCx0aGlzLm09ZSx0aGlzLnk9aSx0aGlzLms9cix0aGlzLmE9b319LFpWZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5uZXdWYWx1ZT1uZXcgRn1pbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldC52YWx1ZTtpZih2b2lkIDA9PT10aGlzLnJnKXRoaXMubmV3VmFsdWUuZW1pdChpKTtlbHNle2xldCByPXBhcnNlRmxvYXQoaSk7dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnIscmc6dGhpcy5yZ30pfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsInRleHQiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaW5wdXRDaGFuZ2Uobyl9KX0saW5wdXRzOntyZzoicmciLHRleHQ6InRleHQifSxvdXRwdXRzOntuZXdWYWx1ZToibmV3VmFsdWUifX0pLG59KSgpLEtWZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZWxSZWY9ZSx0aGlzLmRyYWdFbmQ9bmV3IEYsdGhpcy5kcmFnU3RhcnQ9bmV3IEYsdGhpcy5uZXdWYWx1ZT1uZXcgRix0aGlzLmxpc3RlbmVyTW92ZT1pPT50aGlzLm1vdmUoaSksdGhpcy5saXN0ZW5lclN0b3A9KCk9PnRoaXMuc3RvcCgpfW1vdXNlRG93bihlKXt0aGlzLnN0YXJ0KGUpfXRvdWNoU3RhcnQoZSl7dGhpcy5zdGFydChlKX1tb3ZlKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEN1cnNvcihlKX1zdGFydChlKXt0aGlzLnNldEN1cnNvcihlKSxlLnN0b3BQcm9wYWdhdGlvbigpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ1N0YXJ0LmVtaXQoKX1zdG9wKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLmxpc3RlbmVyTW92ZSksdGhpcy5kcmFnRW5kLmVtaXQoKX1nZXRYKGUpe2xldCBpPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4odm9pZCAwIT09ZS5wYWdlWD9lLnBhZ2VYOmUudG91Y2hlc1swXS5wYWdlWCktaS5sZWZ0LXdpbmRvdy5wYWdlWE9mZnNldH1nZXRZKGUpe2xldCBpPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4odm9pZCAwIT09ZS5wYWdlWT9lLnBhZ2VZOmUudG91Y2hlc1swXS5wYWdlWSktaS50b3Atd2luZG93LnBhZ2VZT2Zmc2V0fXNldEN1cnNvcihlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgscj10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0LG89TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFgoZSksaSkpLHM9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmdldFkoZSkscikpO3ZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3M6by9pLHY6MS1zL3IscmdYOnRoaXMucmdYLHJnWTp0aGlzLnJnWX0pOnZvaWQgMD09PXRoaXMucmdYJiZ2b2lkIDAhPT10aGlzLnJnWT90aGlzLm5ld1ZhbHVlLmVtaXQoe3Y6cy9yLHJnWTp0aGlzLnJnWX0pOnZvaWQgMCE9PXRoaXMucmdYJiZ2b2lkIDA9PT10aGlzLnJnWSYmdGhpcy5uZXdWYWx1ZS5lbWl0KHt2Om8vaSxyZ1g6dGhpcy5yZ1h9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNZSkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJzbGlkZXIiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZJKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm1vdXNlRG93bihvKX0pKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS50b3VjaFN0YXJ0KG8pfSl9LGlucHV0czp7cmdYOiJyZ1giLHJnWToicmdZIixzbGlkZXI6InNsaWRlciJ9LG91dHB1dHM6e2RyYWdFbmQ6ImRyYWdFbmQiLGRyYWdTdGFydDoiZHJhZ1N0YXJ0IixuZXdWYWx1ZToibmV3VmFsdWUifX0pLG59KSgpLG1BPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0saEE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy52PWksdGhpcy5hPXJ9fSxFVj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmU9bnVsbH1zZXRBY3RpdmUoZSl7dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlIT09ZSYmImlubGluZSIhPT10aGlzLmFjdGl2ZS5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuYWN0aXZlLmNsb3NlRGlhbG9nKCksdGhpcy5hY3RpdmU9ZX1oc3ZhMmhzbGEoZSl7bGV0IGk9ZS5oLHI9ZS5zLG89ZS52LHM9ZS5hO2lmKDA9PT1vKXJldHVybiBuZXcgWWQoaSwwLDAscyk7aWYoMD09PXImJjE9PT1vKXJldHVybiBuZXcgWWQoaSwxLDEscyk7e2xldCBhPW8qKDItcikvMjtyZXR1cm4gbmV3IFlkKGksbypyLygxLU1hdGguYWJzKDIqYS0xKSksYSxzKX19aHNsYTJoc3ZhKGUpe2xldCBpPU1hdGgubWluKGUuaCwxKSxyPU1hdGgubWluKGUucywxKSxvPU1hdGgubWluKGUubCwxKSxzPU1hdGgubWluKGUuYSwxKTtpZigwPT09bylyZXR1cm4gbmV3IGZfKGksMCwwLHMpO3tsZXQgYT1vK3IqKDEtTWF0aC5hYnMoMipvLTEpKS8yO3JldHVybiBuZXcgZl8oaSwyKihhLW8pL2EsYSxzKX19aHN2YVRvUmdiYShlKXtsZXQgaSxyLG8scz1lLmgsYT1lLnMsbD1lLnYsYz1lLmEsZD1NYXRoLmZsb29yKDYqcyksdT02KnMtZCxwPWwqKDEtYSksZj1sKigxLXUqYSksbT1sKigxLSgxLXUpKmEpO3N3aXRjaChkJTYpe2Nhc2UgMDppPWwscj1tLG89cDticmVhaztjYXNlIDE6aT1mLHI9bCxvPXA7YnJlYWs7Y2FzZSAyOmk9cCxyPWwsbz1tO2JyZWFrO2Nhc2UgMzppPXAscj1mLG89bDticmVhaztjYXNlIDQ6aT1tLHI9cCxvPWw7YnJlYWs7Y2FzZSA1Omk9bCxyPXAsbz1mO2JyZWFrO2RlZmF1bHQ6aT0wLHI9MCxvPTB9cmV0dXJuIG5ldyB0YyhpLHIsbyxjKX1jbXlrVG9SZ2IoZSl7cmV0dXJuIG5ldyB0YygoMS1lLmMpKigxLWUuayksKDEtZS5tKSooMS1lLmspLCgxLWUueSkqKDEtZS5rKSxlLmEpfXJnYmFUb0NteWsoZSl7bGV0IGk9MS1NYXRoLm1heChlLnIsZS5nLGUuYik7cmV0dXJuIDE9PT1pP25ldyB4bSgwLDAsMCwxLGUuYSk6bmV3IHhtKCgxLWUuci1pKS8oMS1pKSwoMS1lLmctaSkvKDEtaSksKDEtZS5iLWkpLygxLWkpLGksZS5hKX1yZ2JhVG9Ic3ZhKGUpe2xldCBpLHIsbz1NYXRoLm1pbihlLnIsMSkscz1NYXRoLm1pbihlLmcsMSksYT1NYXRoLm1pbihlLmIsMSksbD1NYXRoLm1pbihlLmEsMSksYz1NYXRoLm1heChvLHMsYSksZD1NYXRoLm1pbihvLHMsYSksdT1jLHA9Yy1kO2lmKHI9MD09PWM/MDpwL2MsYz09PWQpaT0wO2Vsc2V7c3dpdGNoKGMpe2Nhc2UgbzppPShzLWEpL3ArKHM8YT82OjApO2JyZWFrO2Nhc2UgczppPShhLW8pL3ArMjticmVhaztjYXNlIGE6aT0oby1zKS9wKzQ7YnJlYWs7ZGVmYXVsdDppPTB9aS89Nn1yZXR1cm4gbmV3IGZfKGkscix1LGwpfXJnYmFUb0hleChlLGkpe2xldCByPSIjIisoMTY3NzcyMTZ8ZS5yPDwxNnxlLmc8PDh8ZS5iKS50b1N0cmluZygxNikuc3Vic3RyKDEpO3JldHVybiBpJiYocis9KDI1NnxNYXRoLnJvdW5kKDI1NSplLmEpKS50b1N0cmluZygxNikuc3Vic3RyKDEpKSxyfW5vcm1hbGl6ZUNNWUsoZSl7cmV0dXJuIG5ldyB4bShlLmMvMTAwLGUubS8xMDAsZS55LzEwMCxlLmsvMTAwLGUuYSl9ZGVub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgeG0oTWF0aC5mbG9vcigxMDAqZS5jKSxNYXRoLmZsb29yKDEwMCplLm0pLE1hdGguZmxvb3IoMTAwKmUueSksTWF0aC5mbG9vcigxMDAqZS5rKSxlLmEpfWRlbm9ybWFsaXplUkdCQShlKXtyZXR1cm4gbmV3IHRjKE1hdGgucm91bmQoMjU1KmUuciksTWF0aC5yb3VuZCgyNTUqZS5nKSxNYXRoLnJvdW5kKDI1NSplLmIpLGUuYSl9c3RyaW5nVG9Ic3ZhKGU9IiIsaT0hMSl7bGV0IHI9bnVsbDtlPShlfHwiIikudG9Mb3dlckNhc2UoKTtsZXQgbz1be3JlOi8ocmdiKWE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqJT8sXHMqKFxkezEsM30pXHMqJT8oPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyB0YyhwYXJzZUludChzWzJdLDEwKS8yNTUscGFyc2VJbnQoc1szXSwxMCkvMjU1LHBhcnNlSW50KHNbNF0sMTApLzI1NSxpc05hTihwYXJzZUZsb2F0KHNbNV0pKT8xOnBhcnNlRmxvYXQoc1s1XSkpfX0se3JlOi8oaHNsKWE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pJVxzKixccyooXGR7MSwzfSklXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgWWQocGFyc2VJbnQoc1syXSwxMCkvMzYwLHBhcnNlSW50KHNbM10sMTApLzEwMCxwYXJzZUludChzWzRdLDEwKS8xMDAsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19XTtvLnB1c2goaT97cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pPyQvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgdGMocGFyc2VJbnQoc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0sMTYpLzI1NSxwYXJzZUludChzWzNdLDE2KS8yNTUscGFyc2VJbnQoc1s0XXx8IkZGIiwxNikvMjU1KX19OntyZTovIyhbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KSQvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgdGMocGFyc2VJbnQoc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0sMTYpLzI1NSxwYXJzZUludChzWzNdLDE2KS8yNTUsMSl9fSksby5wdXNoKHtyZTovIyhbYS1mQS1GMC05XSkoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKSQvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgdGMocGFyc2VJbnQoc1sxXStzWzFdLDE2KS8yNTUscGFyc2VJbnQoc1syXStzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXStzWzNdLDE2KS8yNTUsMSl9fSk7Zm9yKGxldCBzIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9b1tzXSxsPWEucmUuZXhlYyhlKSxjPWwmJmEucGFyc2UobCk7aWYoYylyZXR1cm4gYyBpbnN0YW5jZW9mIHRjP3I9dGhpcy5yZ2JhVG9Ic3ZhKGMpOmMgaW5zdGFuY2VvZiBZZCYmKHI9dGhpcy5oc2xhMmhzdmEoYykpLHJ9cmV0dXJuIHJ9b3V0cHV0Rm9ybWF0KGUsaSxyKXtzd2l0Y2goImF1dG8iPT09aSYmKGk9ZS5hPDE/InJnYmEiOiJoZXgiKSxpKXtjYXNlImhzbGEiOmxldCBvPXRoaXMuaHN2YTJoc2xhKGUpLHM9bmV3IFlkKE1hdGgucm91bmQoMzYwKm8uaCksTWF0aC5yb3VuZCgxMDAqby5zKSxNYXRoLnJvdW5kKDEwMCpvLmwpLE1hdGgucm91bmQoMTAwKm8uYSkvMTAwKTtyZXR1cm4gZS5hPDF8fCJhbHdheXMiPT09cj8iaHNsYSgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlLCIrcy5hKyIpIjoiaHNsKCIrcy5oKyIsIitzLnMrIiUsIitzLmwrIiUpIjtjYXNlInJnYmEiOmxldCBhPXRoaXMuZGVub3JtYWxpemVSR0JBKHRoaXMuaHN2YVRvUmdiYShlKSk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/InJnYmEoIithLnIrIiwiK2EuZysiLCIrYS5iKyIsIitNYXRoLnJvdW5kKDEwMCphLmEpLzEwMCsiKSI6InJnYigiK2EucisiLCIrYS5nKyIsIithLmIrIikiO2RlZmF1bHQ6bGV0IGw9ImFsd2F5cyI9PT1yfHwiZm9yY2VkIj09PXI7cmV0dXJuIHRoaXMucmdiYVRvSGV4KHRoaXMuZGVub3JtYWxpemVSR0JBKHRoaXMuaHN2YVRvUmdiYShlKSksbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxfbmU9dHlwZW9mIHdpbmRvdzwidSImJiJvbnRvdWNoc3RhcnQiaW4gd2luZG93LEpWZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLm5nWm9uZT1lLHRoaXMuZWxSZWY9aSx0aGlzLmNkUmVmPXIsdGhpcy5kb2N1bWVudD1vLHRoaXMucGxhdGZvcm1JZD1zLHRoaXMuc2VydmljZT1hLHRoaXMuaXNJRTEwPSExLHRoaXMuZGlhbG9nQXJyb3dTaXplPTEwLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MTUsdGhpcy5kaWFsb2dJbnB1dEZpZWxkcz1bSG8uSEVYLEhvLlJHQkEsSG8uSFNMQSxIby5DTVlLXSx0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyPSExLHRoaXMuZXllRHJvcHBlclN1cHBvcnRlZD1ndyh0aGlzLnBsYXRmb3JtSWQpJiYiRXllRHJvcHBlciJpbiB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3fWhhbmRsZUVzYyhlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkNhbmNlbENvbG9yKGUpfWhhbmRsZUVudGVyKGUpe3RoaXMuc2hvdyYmInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLm9uQWNjZXB0Q29sb3IoZSl9bmdPbkluaXQoKXt0aGlzLnNsaWRlcj1uZXcgbUEoMCwwLDAsMCksdGhpcy5zbGlkZXJEaW1NYXg9bmV3IGhBKHRoaXMuaHVlU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCx0aGlzLmNwV2lkdGgsMTMwLHRoaXMuYWxwaGFTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwKSx0aGlzLmZvcm1hdD10aGlzLmNwQ215a0VuYWJsZWQ/SG8uQ01ZSzoicmdiYSI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0P0hvLlJHQkE6ImhzbGEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9Iby5IU0xBOkhvLkhFWCx0aGlzLmxpc3RlbmVyTW91c2VEb3duPXI9Pnt0aGlzLm9uTW91c2VEb3duKHIpfSx0aGlzLmxpc3RlbmVyUmVzaXplPSgpPT57dGhpcy5vblJlc2l6ZSgpfSx0aGlzLm9wZW5EaWFsb2codGhpcy5pbml0aWFsQ29sb3IsITEpfW5nT25EZXN0cm95KCl7dGhpcy5jbG9zZURpYWxvZygpfW5nQWZ0ZXJWaWV3SW5pdCgpezIzMD09PXRoaXMuY3BXaWR0aCYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheXx8KHRoaXMuc2xpZGVyRGltTWF4PW5ldyBoQSh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSksdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfW9wZW5EaWFsb2coZSxpPSEwKXt0aGlzLnNlcnZpY2Uuc2V0QWN0aXZlKHRoaXMpLHRoaXMud2lkdGh8fCh0aGlzLmNwV2lkdGg9dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpLHRoaXMuaGVpZ2h0fHwodGhpcy5oZWlnaHQ9MzIwKSx0aGlzLnNldEluaXRpYWxDb2xvcihlKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyhlLGkpLHRoaXMub3BlbkNvbG9yUGlja2VyKCl9Y2xvc2VEaWFsb2coKXt0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKX1zZXR1cERpYWxvZyhlLGkscixvLHMsYSxsLGMsZCx1LHAsZixtLGIsTSx5LHgsUixBLFYsdGUsSyx4ZSxYZSxEZSxELHJlLGNlLGZlLGJlLG5lLGRlLHBlLGplLENlLE5lLGx0LE10KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9Zix0aGlzLmNwQ215a0VuYWJsZWQ9ZCx0aGlzLmNwQWxwaGFDaGFubmVsPXUsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PWEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1tLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPWIsdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPU0sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj15LHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQocywxMCksdGhpcy5jcFBvc2l0aW9uPXgsdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KFIsMTApLHRoaXMuY3BPS0J1dHRvbj1ELHRoaXMuY3BPS0J1dHRvblRleHQ9Y2UsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9cmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1mZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD1uZSx0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3M9YmUsdGhpcy5jcEV5ZURyb3BwZXI9TmUsdGhpcy5mYWxsYmFja0NvbG9yPWx8fCIjZmZmIix0aGlzLnNldFByZXNldENvbmZpZyhWLHRlKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9Syx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoPXhlLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9WGUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzPURlLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj1kZSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PWplLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPXBlLHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzPUNlLHRoaXMuY3BUcmlnZ2VyRWxlbWVudD1sdCx0aGlzLmNwRXh0cmFUZW1wbGF0ZT1NdCxBfHwodGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaW5saW5lIj09PWEmJih0aGlzLmRpYWxvZ0Fycm93U2l6ZT0wLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MCksImhleCI9PT1wJiYiYWx3YXlzIiE9PXUmJiJmb3JjZWQiIT09dSYmKHRoaXMuY3BBbHBoYUNoYW5uZWw9ImRpc2FibGVkIil9c2V0Q29sb3JNb2RlKGUpe3N3aXRjaChlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSl7Y2FzZSIxIjpjYXNlIkMiOmNhc2UiQ09MT1IiOmRlZmF1bHQ6dGhpcy5jcENvbG9yTW9kZT0xO2JyZWFrO2Nhc2UiMiI6Y2FzZSJHIjpjYXNlIkdSQVlTQ0FMRSI6dGhpcy5jcENvbG9yTW9kZT0yO2JyZWFrO2Nhc2UiMyI6Y2FzZSJQIjpjYXNlIlBSRVNFVFMiOnRoaXMuY3BDb2xvck1vZGU9M319c2V0SW5pdGlhbENvbG9yKGUpe3RoaXMuaW5pdGlhbENvbG9yPWV9c2V0UHJlc2V0Q29uZmlnKGUsaSl7dGhpcy5jcFByZXNldExhYmVsPWUsdGhpcy5jcFByZXNldENvbG9ycz1pfXNldENvbG9yRnJvbVN0cmluZyhlLGk9ITAscj0hMCl7bGV0IG87ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWw/KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCEwKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSkpOm89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsITEpKSxvJiYodGhpcy5oc3ZhPW8sdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLCJoZXgiPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmImRpc2FibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0aGlzLmhzdmEuYT0xKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKGkscikpfW9uUmVzaXplKCl7ImZpeGVkIj09PXRoaXMucG9zaXRpb24/dGhpcy5zZXREaWFsb2dQb3NpdGlvbigpOiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uRHJhZ0VuZChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdFbmQoe3NsaWRlcjplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkRyYWdTdGFydChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdTdGFydCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTW91c2VEb3duKGUpe3RoaXMuc2hvdyYmIXRoaXMuaXNJRTEwJiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJmUudGFyZ2V0IT09dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYhdGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYwPT09dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIoaT0+aT09PWUudGFyZ2V0KS5sZW5ndGgmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlP3RoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKToodGhpcy5oc3ZhPW51bGwsdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsITEpLHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpKSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfSl9b25BY2NlcHRDb2xvcihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3V0cHV0Q29sb3ImJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uQ2FuY2VsQ29sb3IoZSl7dGhpcy5oc3ZhPW51bGwsZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2FuY2VsZWQoKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMCksInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciwhMCksdGhpcy5jbG9zZUNvbG9yUGlja2VyKCkpfW9uRXllRHJvcHBlcigpe3RoaXMuZXllRHJvcHBlclN1cHBvcnRlZCYmKG5ldyB3aW5kb3cuRXllRHJvcHBlcikub3BlbigpLnRoZW4oaT0+e3RoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGkuc1JHQkhleCwhMCl9KX1vbkZvcm1hdFRvZ2dsZShlKXtsZXQgaT10aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aC0odGhpcy5jcENteWtFbmFibGVkPzA6MSkscj0oKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkrZSklaStpKSVpO3RoaXMuZm9ybWF0PXRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbcl19b25Db2xvckNoYW5nZShlKXt0aGlzLmhzdmEucz1lLnMvZS5yZ1gsdGhpcy5oc3ZhLnY9ZS52L2UucmdZLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoibGlnaHRuZXNzIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InNhdHVyYXRpb24iLHZhbHVlOnRoaXMuaHN2YS5zLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUNoYW5nZShlKXt0aGlzLmhzdmEuaD1lLnYvZS5yZ1gsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiaHVlIix2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUNoYW5nZShlKXt0aGlzLmhzdmEudj1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJ2YWx1ZSIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFDaGFuZ2UoZSl7dGhpcy5oc3ZhLmE9ZS52L2UucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiYWxwaGEiLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkhleElucHV0KGUpe2lmKG51bGw9PT1lKXRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKTtlbHNle2UmJiIjIiE9PWVbMF0mJihlPSIjIitlKTtsZXQgaT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9naTsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJihpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpKTtsZXQgcj1pLnRlc3QoZSk7ciYmKGUubGVuZ3RoPDUmJihlPSIjIitlLnN1YnN0cmluZygxKS5zcGxpdCgiIikubWFwKG89Pm8rbykuam9pbigiIikpLCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGUrPU1hdGgucm91bmQoMjU1KnRoaXMuaHN2YS5hKS50b1N0cmluZygxNikpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGUsITAsITEpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImhleCIsdmFsaWQ6cix2YWx1ZTplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX19b25SZWRJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoicmVkIix2YWxpZDpyLHZhbHVlOmkucixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25CbHVlSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5iPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsdWUiLHZhbGlkOnIsdmFsdWU6aS5iLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkdyZWVuSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5nPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImdyZWVuIix2YWxpZDpyLHZhbHVlOmkuZyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25IdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5oPWUudi9lLnJnLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaHVlIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlSW5wdXQoZSl7bGV0IGk9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO2kmJih0aGlzLmhzdmEudj1lLnYvZS5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoidmFsdWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5hPWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJhbHBoYSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEuYSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25MaWdodG5lc3NJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkubD1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLmhzbGEyaHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImxpZ2h0bmVzcyIsdmFsaWQ6cix2YWx1ZTppLmwsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uU2F0dXJhdGlvbklucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5zPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoic2F0dXJhdGlvbiIsdmFsaWQ6cix2YWx1ZTppLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQ3lhbklucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay5jPWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJjeWFuIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuYyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25NYWdlbnRhSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLm09ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6Im1hZ2VudGEiLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5tLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblllbGxvd0lucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay55PWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ5ZWxsb3ciLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay55LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsYWNrSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLms9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsYWNrIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuayxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BZGRQcmVzZXRDb2xvcihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+cj09PWkpLmxlbmd0aHx8KHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5jb25jYXQoaSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMuY3BQcmVzZXRDb2xvcnMpKX1vblJlbW92ZVByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzPXRoaXMuY3BQcmVzZXRDb2xvcnMuZmlsdGVyKHI9PnIhPT1pKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkNvbG9yUGlja2VyKCl7dGhpcy5zaG93fHwodGhpcy5zaG93PSEwLHRoaXMuaGlkZGVuPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmhpZGRlbj0hMSx0aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCksdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCl9LDApLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCEwKSx0aGlzLmlzSUUxMHx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntfbmU/ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5saXN0ZW5lck1vdXNlRG93bik6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpKX1jbG9zZUNvbG9yUGlja2VyKCl7dGhpcy5zaG93JiYodGhpcy5zaG93PSExLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCExKSx0aGlzLmlzSUUxMHx8KF9uZT9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmxpc3RlbmVyUmVzaXplKSx0aGlzLmNkUmVmLmRlc3Ryb3llZHx8dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfXVwZGF0ZUNvbG9yUGlja2VyKGU9ITAsaT0hMCxyPSExKXtpZih0aGlzLnNsaWRlckRpbU1heCl7Mj09PXRoaXMuY3BDb2xvck1vZGUmJih0aGlzLmhzdmEucz0wKTtsZXQgbyxzLGEsbD10aGlzLm91dHB1dENvbG9yO2lmKHM9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHRoaXMuY3BDbXlrRW5hYmxlZD8ocj8oYT10aGlzLnNlcnZpY2UuY215a1RvUmdiKHRoaXMuc2VydmljZS5ub3JtYWxpemVDTVlLKHRoaXMuY215aykpLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShhKSk6KGE9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSx0aGlzLmNteWs9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplQ01ZSyh0aGlzLnNlcnZpY2UucmdiYVRvQ215ayhhKSkpLGE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQShhKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgpOmE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpKSxvPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEodGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEobmV3IGZfKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgsMSwxLDEpKSksaSYmKHRoaXMuaHNsYVRleHQ9bmV3IFlkKE1hdGgucm91bmQoMzYwKnMuaCksTWF0aC5yb3VuZCgxMDAqcy5zKSxNYXRoLnJvdW5kKDEwMCpzLmwpLE1hdGgucm91bmQoMTAwKnMuYSkvMTAwKSx0aGlzLnJnYmFUZXh0PW5ldyB0YyhhLnIsYS5nLGEuYixNYXRoLnJvdW5kKDEwMCphLmEpLzEwMCksdGhpcy5jcENteWtFbmFibGVkJiYodGhpcy5jbXlrVGV4dD1uZXcgeG0odGhpcy5jbXlrLmMsdGhpcy5jbXlrLm0sdGhpcy5jbXlrLnksdGhpcy5jbXlrLmssTWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMCkpLHRoaXMuaGV4VGV4dD10aGlzLnNlcnZpY2UucmdiYVRvSGV4KGEsImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsKSx0aGlzLmhleEFscGhhPXRoaXMucmdiYVRleHQuYSksImF1dG8iPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmdGhpcy5mb3JtYXQhPT1Iby5SR0JBJiZ0aGlzLmZvcm1hdCE9PUhvLkNNWUsmJnRoaXMuZm9ybWF0IT09SG8uSFNMQSYmdGhpcy5oc3ZhLmE8MSYmKHRoaXMuZm9ybWF0PXRoaXMuaHN2YS5hPDE/SG8uUkdCQTpIby5IRVgpLHRoaXMuaHVlU2xpZGVyQ29sb3I9InJnYigiK28ucisiLCIrby5nKyIsIitvLmIrIikiLHRoaXMuYWxwaGFTbGlkZXJDb2xvcj0icmdiKCIrYS5yKyIsIithLmcrIiwiK2EuYisiKSIsdGhpcy5vdXRwdXRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuc2VsZWN0ZWRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSwicmdiYSIsbnVsbCksdGhpcy5mb3JtYXQhPT1Iby5DTVlLKXRoaXMuY215a0NvbG9yPSIiO2Vsc2UgaWYoImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZW5hYmxlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpe2xldCBjPU1hdGgucm91bmQoMTAwKnRoaXMuY215ay5hKS8xMDA7dGhpcy5jbXlrQ29sb3I9YGNteWthKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9LCR7Y30pYH1lbHNlIHRoaXMuY215a0NvbG9yPWBjbXlrKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9KWA7dGhpcy5zbGlkZXI9bmV3IG1BKCh0aGlzLnNsaWRlckh8fHRoaXMuaHN2YS5oKSp0aGlzLnNsaWRlckRpbU1heC5oLTgsdGhpcy5oc3ZhLnMqdGhpcy5zbGlkZXJEaW1NYXgucy04LCgxLXRoaXMuaHN2YS52KSp0aGlzLnNsaWRlckRpbU1heC52LTgsdGhpcy5oc3ZhLmEqdGhpcy5zbGlkZXJEaW1NYXguYS04KSxlJiZsIT09dGhpcy5vdXRwdXRDb2xvciYmKHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5vdXRwdXRDb2xvcikpfX1zZXREaWFsb2dQb3NpdGlvbigpe2lmKCJpbmxpbmUiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkpdGhpcy5wb3NpdGlvbj0icmVsYXRpdmUiO2Vsc2V7bGV0IHIsZT0ic3RhdGljIixpPSIiLG89bnVsbCxzPW51bGwsYT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLGw9dGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O2Zvcig7bnVsbCE9PWEmJiJIVE1MIiE9PWEudGFnTmFtZTspe2lmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSksZT1yLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIiksaT1yLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLCJzdGF0aWMiIT09ZSYmbnVsbD09PW8mJihvPWEpLGkmJiJub25lIiE9PWkmJm51bGw9PT1zJiYocz1hKSwiZml4ZWQiPT09ZSl7bz1zO2JyZWFrfWE9YS5wYXJlbnROb2RlfWxldCBjPXRoaXMuY3JlYXRlRGlhbG9nQm94KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJmaXhlZCIhPT1lKTtpZih0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyfHwiZml4ZWQiPT09ZSYmKCFvfHxvIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50KSl0aGlzLnRvcD1jLnRvcCx0aGlzLmxlZnQ9Yy5sZWZ0O2Vsc2V7bnVsbD09PW8mJihvPWEpO2xldCB1PXRoaXMuY3JlYXRlRGlhbG9nQm94KG8sImZpeGVkIiE9PWUpO3RoaXMudG9wPWMudG9wLXUudG9wLHRoaXMubGVmdD1jLmxlZnQtdS5sZWZ0fSJmaXhlZCI9PT1lJiYodGhpcy5wb3NpdGlvbj0iZml4ZWQiKTtsZXQgZD10aGlzLmNwUG9zaXRpb247ImF1dG8iPT09dGhpcy5jcFBvc2l0aW9uJiYoZD1mdW5jdGlvbihuLHQpe2xldCBlPSJyaWdodCIsaT0iYm90dG9tIix7aGVpZ2h0OnIsd2lkdGg6b309bix7dG9wOnMsbGVmdDphfT10LGw9cyt0LmhlaWdodCxjPWErdC53aWR0aCxkPXMtcjwwLHU9bCtyPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpLHA9YS1vPDAsZj1jK28+KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpO3JldHVybiB1JiYoaT0idG9wIiksZCYmKGk9ImJvdHRvbSIpLHAmJihlPSJyaWdodCIpLGYmJihlPSJsZWZ0IiksZCYmdSYmcCYmZj9bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLnJlZHVjZSgoTSx5KT0+bltNXT5uW3ldP006eSk6cCYmZj9kPyJib3R0b20iOnV8fHM+bD8idG9wIjoiYm90dG9tIjpkJiZ1P3A/InJpZ2h0IjpmfHxhPmM/ImxlZnQiOiJyaWdodCI6YCR7aX0tJHtlfWB9KHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3BUcmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSksInRvcCI9PT1kPyh0aGlzLmFycm93VG9wPWwtMSx0aGlzLnRvcC09bCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToiYm90dG9tIj09PWQ/KHRoaXMudG9wKz1jLmhlaWdodCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLWxlZnQiPT09ZHx8ImxlZnQtdG9wIj09PWQ/KHRoaXMudG9wLT1sLWMuaGVpZ2h0K2MuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLXJpZ2h0Ij09PWR8fCJyaWdodC10b3AiPT09ZD8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToibGVmdCI9PT1kfHwiYm90dG9tLWxlZnQiPT09ZHx8ImxlZnQtYm90dG9tIj09PWQ/KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMik6KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0Kz1jLndpZHRoK3RoaXMuZGlhbG9nQXJyb3dTaXplLTIpLHRoaXMuY3BVc2VQb3NpdGlvbj1kfX1pc0Rlc2NlbmRhbnQoZSxpKXtsZXQgcj1pLnBhcmVudE5vZGU7Zm9yKDtudWxsIT09cjspe2lmKHI9PT1lKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfXJldHVybiExfWNyZWF0ZURpYWxvZ0JveChlLGkpe2xldHt0b3A6cixsZWZ0Om99PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpyKyhpP3dpbmRvdy5wYWdlWU9mZnNldDowKSxsZWZ0Om8rKGk/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOmUub2Zmc2V0V2lkdGgsaGVpZ2h0OmUub2Zmc2V0SGVpZ2h0fX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhhdCksQyhNZSksQygkdCksQyhMdCksQyh2YyksQyhFVikpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbImNvbG9yLXBpY2tlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihHZShoVmUsNyksR2UoZ1ZlLDcpLEdlKF9WZSw3KSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5kaWFsb2dFbGVtZW50PXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLmh1ZVNsaWRlcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5hbHBoYVNsaWRlcj1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmSSgia2V5dXAuZXNjIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFc2Mobyl9LDAsaGMpKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlRW50ZXIobyl9LCExLGhjKX0sZGVjbHM6MzAsdmFyczo1MSxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIiwzLCJjbGljayJdLFsiY2xhc3MiLCJleWVkcm9wcGVyLWljb24iLCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMywiY2xhc3MiLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInJpZ2h0Il0sWyJzdHlsZSIsImhlaWdodDogMTZweDsiLDQsIm5nSWYiXSxbMSwiaHVlIiwzLCJzbGlkZXIiLCJyZ1giLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbImh1ZVNsaWRlciIsIiJdLFsxLCJjdXJzb3IiXSxbMSwidmFsdWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsidmFsdWVTbGlkZXIiLCIiXSxbMSwiYWxwaGEiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiYWxwaGFTbGlkZXIiLCIiXSxbImNsYXNzIiwiY215ay10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImhzbGEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJyZ2JhLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaGV4LXRleHQiLDMsImhleC1hbHBoYSIsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwidmFsdWUtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0eXBlLXBvbGljeSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJidXR0b24tYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJleHRyYS10ZW1wbGF0ZSIsNCwibmdJZiJdLFsxLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsMSwiZXllZHJvcHBlci1pY29uIl0sWyJkIiwiTTAgMGgyNHYyNEgwVjB6IiwiZmlsbCIsIm5vbmUiXSxbImQiLCJNMTcuNjYgNS40MWwuOTIuOTItMi42OSAyLjY5LS45Mi0uOTIgMi42OS0yLjY5TTE3LjY3IDNjLS4yNiAwLS41MS4xLS43MS4yOWwtMy4xMiAzLjEyLTEuOTMtMS45MS0xLjQxIDEuNDEgMS40MiAxLjQyTDMgMTYuMjVWMjFoNC43NWw4LjkyLTguOTIgMS40MiAxLjQyIDEuNDEtMS40MS0xLjkyLTEuOTIgMy4xMi0zLjEyYy40LS40LjQtMS4wMy4wMS0xLjQybC0yLjM0LTIuMzRjLS4yLS4xOS0uNDUtLjI5LS43LS4yOXpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdLFsxLCJleHRyYS10ZW1wbGF0ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksSSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBvLnN0b3BQcm9wYWdhdGlvbigpfSksUygyLGJWZSwxLDUsImRpdiIsMiksUygzLHZWZSwyLDgsImRpdiIsMyksaCg0LCJkaXYiLDQpKDUsImRpdiIsNSksUCg2LCJkaXYiLDYpLGgoNywiZGl2Iiw3KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciYmaS5vbkV5ZURyb3BwZXIoKX0pLFMoOCx5VmUsMywwLCJzdmciLDgpLGcoKSxTKDkseFZlLDIsNSwiYnV0dG9uIiw5KSxnKCksaCgxMCwiZGl2IiwxMCksUygxMSxDVmUsMSwwLCJkaXYiLDExKSxoKDEyLCJkaXYiLDEyLDEzKSxJKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiaHVlIil9KSxQKDE0LCJkaXYiLDE0KSxnKCksaCgxNSwiZGl2IiwxNSwxNiksSSgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJ2YWx1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJ2YWx1ZSIpfSksUCgxNywiZGl2IiwxNCksZygpLGgoMTgsImRpdiIsMTcsMTgpLEkoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFscGhhQ2hhbmdlKG8pfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdTdGFydCgiYWxwaGEiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiYWxwaGEiKX0pLFAoMjAsImRpdiIsMTQpLGcoKSgpKCksUygyMSxTVmUsMTcsMTIsImRpdiIsMTkpLFMoMjIsRFZlLDE0LDEwLCJkaXYiLDIwKSxTKDIzLFJWZSwxNCwxMCwiZGl2IiwyMSksUygyNCxrVmUsOCw3LCJkaXYiLDIyKSxTKDI1LE5WZSw5LDMsImRpdiIsMjMpLFMoMjYsTFZlLDMsMCwiZGl2IiwyNCksUygyNyxVVmUsNiwzLCJkaXYiLDI1KSxTKDI4LFdWZSwzLDIsImRpdiIsMjYpLFMoMjksWVZlLDIsMSwiZGl2IiwyNyksZygpKSwyJmUmJihUdCgiZGlzcGxheSIsaS5zaG93PyJibG9jayI6Im5vbmUiKSgidmlzaWJpbGl0eSIsaS5oaWRkZW4/ImhpZGRlbiI6InZpc2libGUiKSgidG9wIixpLnRvcCwicHgiKSgibGVmdCIsaS5sZWZ0LCJweCIpKCJwb3NpdGlvbiIsaS5wb3NpdGlvbikoImhlaWdodCIsaS5jcEhlaWdodCwicHgiKSgid2lkdGgiLGkuY3BXaWR0aCwicHgiKSxudCgib3BlbiIsaS5zaG93KSx2KDIpLF8oIm5nSWYiLCJwb3B1cCI9PT1pLmNwRGlhbG9nRGlzcGxheSksdigxKSxfKCJuZ0lmIiwxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx2KDQpLFR0KCJiYWNrZ3JvdW5kLWNvbG9yIixpLnNlbGVjdGVkQ29sb3IpKCJjdXJzb3IiLGkuZXllRHJvcHBlclN1cHBvcnRlZCYmaS5jcEV5ZURyb3BwZXI/InBvaW50ZXIiOm51bGwpLHYoMSksXygibmdJZiIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciksdigxKSxfKCJuZ0lmIixpLmNwQWRkQ29sb3JCdXR0b24pLHYoMiksXygibmdJZiIsImRpc2FibGVkIj09PWkuY3BBbHBoYUNoYW5uZWwpLHYoMSksVHQoImRpc3BsYXkiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLF8oInJnWCIsMSksdigyKSxUdCgibGVmdCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci5oLCJweCIpLHYoMSksVHQoImRpc3BsYXkiLDI9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLF8oInJnWCIsMSksdigyKSxUdCgicmlnaHQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIudiwicHgiKSx2KDEpLFR0KCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLGkuYWxwaGFTbGlkZXJDb2xvciksXygicmdYIiwxKSx2KDIpLFR0KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmEsInB4IiksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMj09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksdigxKSxfKCJuZ0lmIiwobnVsbD09aS5jcFByZXNldENvbG9ycz9udWxsOmkuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKXx8aS5jcEFkZENvbG9yQnV0dG9uKSx2KDEpLF8oIm5nSWYiLGkuY3BPS0J1dHRvbnx8aS5jcENhbmNlbEJ1dHRvbiksdigxKSxfKCJuZ0lmIixpLmNwRXh0cmFUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W25uLEZlLExyLFpWZSxLVmVdLHN0eWxlczpbJy5jb2xvci1waWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3dpZHRoOjIzMHB4O2hlaWdodDphdXRvO2JvcmRlcjojNzc3IHNvbGlkIDFweDtjdXJzb3I6ZGVmYXVsdDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIGlucHV0e3dpZHRoOjA7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAwMH0uY29sb3ItcGlja2VyIGlucHV0OmludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXN1Ym1pdC1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNvbG9yLXBpY2tlciAuYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5OTk7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItc3R5bGU6c29saWR9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6Izc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217dG9wOi0yMHB4O2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApICM3NzcgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcHtyaWdodDotMjFweDtib3R0b206OHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtdG9we2JvdHRvbTo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdHt0b3A6OHB4O3JpZ2h0Oi0yMXB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b20sLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLXJpZ2h0e3RvcDo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuY3Vyc29ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOiMyMjIgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNnB4IDhweH0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjojNTU1fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW46NHB4IDZweCA4cHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXttaW4taGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo4cHg7Zm9udC1zdHlsZTppdGFsaWM7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2Zsb2F0OmxlZnQ7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNTU1O2NsZWFyOmxlZnR9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4O2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e3dpZHRoOjEwMCU7cGFkZGluZzo0cHggOHB4O2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7ZmxleDoxIDEgYXV0bzttYXJnaW4tcmlnaHQ6OHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtmbG9hdDpsZWZ0O2ZsZXg6MTtwYWRkaW5nOjFweDttYXJnaW46MCA4cHggMCAwO2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAudmFsdWV7ZGlyZWN0aW9uOnJ0bDt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O21hcmdpbi1ib3R0b206MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0pfS5jb2xvci1waWNrZXIgLmFscGhhe2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSl9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3l7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIxOHB4O3JpZ2h0OjEycHg7d2lkdGg6MTZweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kLXNpemU6OHB4IDE2cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNnB4O2xlZnQ6OHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxMzBweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNze3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6MDttYXJnaW46M3B4IC0zcHg7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6Izk5OX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVkOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7dG9wOi01cHg7cmlnaHQ6LTVweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MXB4IDFweCA1cHggIzMzM30uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNzOmJlZm9yZXtjb250ZW50OiJ4Ijtwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206My41cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEwcHh9LmNvbG9yLXBpY2tlciAuZXllZHJvcHBlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2ZpbGw6I2ZmZjttaXgtYmxlbmQtbW9kZTpleGNsdXNpb259XG4nXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxnQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPXMsdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBGKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRighMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEYoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRighMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRighMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRighMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRighMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sTWkuTlVMTCk7byE9PU1pLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShKVmUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9TWkuY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhNaSksQyhmbyksQyh5YyksQyhzaSksQyhNZSksQyhFVikpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W0d0XX0pLG59KSgpLGJuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltFVl0saW1wb3J0czpbUGVdfSksbn0pKCksZTRlPVsicmVnZXhTdHJpbmdJbnB1dCJdO2Z1bmN0aW9uIHQ0ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwibGkiLDIyKSxUKDIpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksXygidGl0bGUiLGUubmFtZSksdigxKSxidChlLm5hbWUpfX1mdW5jdGlvbiBuNGUobix0KXtpZigxJm4mJihoKDAsImxpIiwyMykoMSwiZW0iKSxUKDIpLGooMywibnVtYmVyIiksZygpKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdDt2KDIpLEhlKCJhbmQgIixXKDMsMSxlLnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiBpNGUobix0KXsxJm4mJihoKDAsImxpIiwyNCkoMSwiZW0iKSxUKDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLGcoKSgpKX12YXIgcjRlPWZ1bmN0aW9uKG4pe3JldHVybntib3JkZXJDb2xvcjpufX0sbzRlPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19O2Z1bmN0aW9uIHM0ZShuLHQpe2lmKDEmbiYmKGgoMCwidWwiLDE2KSgxLCJsaSIpKDIsImxhYmVsIiksUCgzLCJzcGFuIiwxNyksaCg0LCJjb2RlIiwxOCksVCg1KSxnKCkoKSxoKDYsInVsIiksUyg3LHQ0ZSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLGooOCwic2xpY2UiKSxTKDksbjRlLDQsMywibGkiLDIwKSxTKDEwLGk0ZSwzLDAsImxpIiwyMSksZygpKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtfKCJuZ1N0eWxlIixJbigxMSxyNGUsZS5jb2xvcikpLHYoMyksXygibmdTdHlsZSIsSW4oMTMsbzRlLGUuY29sb3IpKSx2KDEpLF8oInRpdGxlIixlLmdyb3VwSWQpLHYoMSksYnQoZS5ncm91cElkKSx2KDIpLF8oIm5nRm9yT2YiLFBPKDgsNyxlLnJ1bnMsMCw1KSksdigyKSxfKCJuZ0lmIixlLnJ1bnMubGVuZ3RoPjUpLHYoMSksXygibmdJZiIsMD09PWUucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBhNGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTQpLFMoMSxzNGUsMTEsMTUsInVsIiwxNSksZygpKSwyJm4pe2xldCBlPXcoMik7digxKSxfKCJuZ0Zvck9mIixlLmNvbG9yUnVuUGFpckxpc3QpfX1mdW5jdGlvbiBsNGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMjUpLFQoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksaCgyLCJjb2RlIiksVCgzKSxnKCksVCg0LCIuIFBsZWFzZSBjaGVjayBpZiB5b3VyIHJlZ2V4IHN0cmluZyBpcyBjb3JyZWN0LiAiKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDMpLEhlKCIvIixlLnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIGM0ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwxMCkoMSwiaDQiKSxUKDIsIkNvbG9yIGdyb3VwIHByZXZpZXciKSxnKCksaCgzLCJkaXYiLDExKSxTKDQsYTRlLDIsMSwiZGl2IiwxMiksUyg1LGw0ZSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLFd0KSxnKCkoKSksMiZuKXtsZXQgZT1pdCg2KSxpPXcoKTt2KDQpLF8oIm5nSWYiLGkuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsZSl9fXZhciB5bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5ob3N0RWxSZWY9aSx0aGlzLm9uU2F2ZT1uZXcgRix0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgRix0aGlzLnRpbWVPdXRJZD0wfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoZSl7dGhpcy5vblNhdmVDbGljayhlKSx0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfW9uU2F2ZUNsaWNrKGUpe3RoaXMub25TYXZlLmVtaXQoZSl9ZmlsbEV4YW1wbGUoZSl7dGhpcy5yZWdleFN0cmluZz1lLHRoaXMucmVnZXhJbnB1dENoYW5nZShlKX1yZWdleElucHV0Q2hhbmdlKGUpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQoZSl9aGFuZGxlRm9jdXNPdXQoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpLHRoaXMudGltZU91dElkPXNldFRpbWVvdXQodGhpcy5yZXNldEZvY3VzLmJpbmQodGhpcyksMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoRWQpLEMoTWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZHZShlNGUsNyksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5yZWdleFN0cmluZ0lucHV0PXIuZmlyc3QpfX0saW5wdXRzOntyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLGNvbG9yUnVuUGFpckxpc3Q6ImNvbG9yUnVuUGFpckxpc3QifSxvdXRwdXRzOntvblNhdmU6Im9uU2F2ZSIscmVnZXhJbnB1dE9uQ2hhbmdlOiJyZWdleElucHV0T25DaGFuZ2UifSxkZWNsczozMCx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ54pCfMTVlZDlmNmZkMmQ0OTA2YTQ4MDNmYzEyNTVkZTNjNWRiMmM1NjUzMOKQnzkwODg5ODUxMTM5NjAzMTI4MDg6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeWAsW1sxLCJyZWdleC1lZGl0LWRpYWxvZyIsMywiZm9jdXNvdXQiXSxbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMSwic2F2ZS1idXR0b24iLDMsImNsaWNrIl0sWzEsImdyb3VwLWNvbnRhaW5lciJdLFsxLCJncm91cGluZy1wcmV2aWV3Il0sWyJjbGFzcyIsIm1hdGNoLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eSIsIiJdLFsxLCJtYXRjaC1jb250YWluZXIiXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbMSwiZ3JvdXAtaWQiLDMsInRpdGxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb3JlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLW1hdGNoIiw0LCJuZ0lmIl0sWzMsInRpdGxlIl0sWzEsIm1vcmUiXSxbMSwibm8tbWF0Y2giXSxbMSwid2FybmluZyJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPWdlKCk7aCgwLCJkaXYiLDApLEkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzT3V0KCl9KSxoKDEsImgxIiwxKSxUKDIsIkNvbG9yIHJ1bnMgYnkgcmVnZXgiKSxnKCksaCgzLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSg0LCJwIiksVCg1LCJFbnRlciBhIHJlZ2V4IHdpdGggY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhZ2FpbnN0IHJ1biBuYW1lczoiKSxnKCksaCg2LCJtYXQtZm9ybS1maWVsZCIpKDcsImlucHV0IiwyLDMpLEkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKHMpe3JldHVybiBpLm9uRW50ZXIocy50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihzKXtyZXR1cm4gaS5yZWdleElucHV0Q2hhbmdlKHMudGFyZ2V0LnZhbHVlKX0pLGcoKSgpKCksaCg5LCJkaXYiLDQpKDEwLCJwIiksVCgxMSwnIEVhY2ggbWF0Y2hpbmcgcnVuIHdpbGwgYmUgYXNzaWduZWQgYSBjb2xvciBiYXNlZCBvbiB0aGUgImtleSIgZm9ybWVkIGJ5IGl0cyBtYXRjaGVzIHRvIHRoZSBjYXB0dXJpbmcgZ3JvdXBzLiAnKSxQKDEyLCJiciIpLGgoMTMsImJ1dHRvbiIsNSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZmlsbEV4YW1wbGUoIih0cmFpbnxldmFsKSIpfSksVCgxNCwiIFRyeSAiKSxoKDE1LCJjb2RlIiksVCgxNiwiKHRyYWlufGV2YWwpIiksZygpKCksVCgxNywiIHRvIGFzc2lnbiBhbGwgcnVucyBjb250YWluaW5nICIpLGgoMTgsImNvZGUiKSxUKDE5LCJ0cmFpbiIpLGcoKSxUKDIwLCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLGgoMjEsImNvZGUiKSxUKDIyLCJldmFsIiksZygpLFQoMjMsIiB0byBhbm90aGVyIGNvbG9yLiAiKSxnKCkoKSxTKDI0LGM0ZSw3LDIsImRpdiIsNiksaCgyNSwiZGl2Iiw3KSgyNiwiYnV0dG9uIiw4KSxUKDI3LCJDYW5jZWwiKSxnKCksaCgyOCwiYnV0dG9uIiw5KSxJKCJjbGljayIsZnVuY3Rpb24oKXtYKHIpO2xldCBzPWl0KDgpO3JldHVybiBRKGkub25TYXZlQ2xpY2socy52YWx1ZSkpfSksVCgyOSwiIFNhdmUgIiksZygpKCkoKX0yJmUmJih2KDcpLFdpKCJ2YWx1ZSIsaS5yZWdleFN0cmluZyksdigxNyksXygibmdJZiIsaS5yZWdleFN0cmluZykpfSxkZXBlbmRlbmNpZXM6W25uLEZlLHB1LEthLEppLFoxLHA5LEsxLEoxLFV1LGpqLExhXSxzdHlsZXM6WyIuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjE2cHh9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTZweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6LjllbX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjttYXgtaGVpZ2h0OjUwdmg7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lm1hdGNoLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtkaXNwbGF5OmdyaWQ7ZmxleC13cmFwOndyYXA7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoNTAlLCAxZnIpKX0uY29sb3Itc3dhdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3gtc2hhZG93OjAgMCAycHggIzAwMDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTVweDt3aWR0aDoxNXB4fXVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nOjB9bWF0LWZvcm0tZmllbGRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czozcHg7bWFyZ2luOjA7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDoxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczptYXgtY29udGVudCBhdXRvO3BhZGRpbmc6MTZweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnNhdmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc3RvcmU9ZSx0aGlzLmRpYWxvZ1JlZj1pLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckPW5ldyBJZSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGEoKCk9PnRuKHRoaXMuc3RvcmUuc2VsZWN0KHYxKS5waXBlKFl0KDEpKSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJCkpLnBpcGUocW4oIiIpKSx0aGlzLmNvbG9yUnVuUGFpckxpc3QkPXRhKCgpPT50aGlzLmdyb3VwQnlSZWdleFN0cmluZyQucGlwZSh3cig1MDApLGtlKG89Pnt0cnl7bGV0IHM9bmV3IFJlZ0V4cChvKTtyZXR1cm4gQm9vbGVhbihzKX1jYXRjaHtyZXR1cm4hMX19KSxMaSh0aGlzLmFsbFJ1bnMkLHRoaXMucnVuSWRUb0VpZCQsdGhpcy5zdG9yZS5zZWxlY3QoQnMuZ2V0Q29sb3JQYWxldHRlKSx0aGlzLnN0b3JlLnNlbGVjdChSbCkpLE4oKFtvLHMsYSxsLGNdKT0+e2xldCB1PVN2KHtrZXk6WWkuUkVHRVgscmVnZXhTdHJpbmc6b30scyxhKSxwPW5ldyBNYXAsZj1bXTtmb3IobGV0W20sYl1vZiBPYmplY3QuZW50cmllcyh1Lm1hdGNoZXMpKXtsZXQgTT1wLmdldChtKTtpZighTSl7bGV0IHk9bC5jb2xvcnNbcC5zaXplJWwuY29sb3JzLmxlbmd0aF07TT1jP3kuZGFya0hleDp5LmxpZ2h0SGV4LHAuc2V0KG0sTSl9Zi5wdXNoKHtncm91cElkOm0sY29sb3I6TSxydW5zOmJ9KX1yZXR1cm4gZn0pKSkucGlwZShxbihbXSkpLHRoaXMuZXhwZXJpbWVudElkcz1yLmV4cGVyaW1lbnRJZHMsdGhpcy5ydW5JZFRvRWlkJD1kbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KEJXLHtleHBlcmltZW50SWQ6b30pLnBpcGUoTihzPT4oe2V4cGVyaW1lbnRJZDpvLHJ1bklkczpzfSkpKSkpLnBpcGUoTihvPT57bGV0IHM9e307Zm9yKGxldHtydW5JZHM6YSxleHBlcmltZW50SWQ6bH1vZiBvKWZvcihsZXQgYyBvZiBhKXNbY109bDtyZXR1cm4gc30pKSx0aGlzLmFsbFJ1bnMkPWRuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoRHUse2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKE4obz0+by5mbGF0KCkpKX1vblJlZ2V4SW5wdXRPbkNoYW5nZShlKXt0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJC5uZXh0KGUpfW9uU2F2ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEhoKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OntrZXk6WWkuUkVHRVgscmVnZXhTdHJpbmc6ZX19KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpLEMoRWQpLEMoWHYpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZyJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJyZWdleFN0cmluZyIsImNvbG9yUnVuUGFpckxpc3QiLCJvblNhdmUiLCJyZWdleElucHV0T25DaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInJlZ2V4LWVkaXQtZGlhbG9nLWNvbXBvbmVudCIsMCksSSgib25TYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNhdmUobyl9KSgicmVnZXhJbnB1dE9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4SW5wdXRPbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksZygpKSwyJmUmJl8oInJlZ2V4U3RyaW5nIixXKDEsMixpLmdyb3VwQnlSZWdleFN0cmluZyQpKSgiY29sb3JSdW5QYWlyTGlzdCIsVygyLDQsaS5jb2xvclJ1blBhaXJMaXN0JCkpfSxkZXBlbmRlbmNpZXM6W3luZSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSwgcmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCk7ZnVuY3Rpb24gcDRlKG4sdCl7MSZuJiZQKDAsIm1hdC1pY29uIiwxNCl9ZnVuY3Rpb24gZjRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwxMyksSSgiY2xpY2siLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KCk7cmV0dXJuIFEoci5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OnIuR3JvdXBCeUtleS5FWFBFUklNRU5UfSkpfSksUygxLHA0ZSwxLDAsIm1hdC1pY29uIiw3KSxoKDIsInNwYW4iKSxUKDMsIkV4cGVyaW1lbnQiKSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtCZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksdigxKSxfKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIG00ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGg0ZShuLHQpezEmbiYmUCgwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGc0ZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIpLFQoMSksZygpKSwyJm4pe2xldCBlPXcoKTt2KDEpLGJ0KGUucmVnZXhTdHJpbmcpfX1mdW5jdGlvbiBfNGUobix0KXsxJm4mJihoKDAsInNwYW4iLDE1KSxUKDEsIihub25lIHNldCkiKSxnKCkpfXZhciBDbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lLHRoaXMuR3JvdXBCeUtleT1ZaSx0aGlzLm9uR3JvdXBCeUNoYW5nZT1uZXcgRn1vblJlZ2V4U3RyaW5nRWRpdCgpe3RoaXMuZGlhbG9nLm9wZW4oeG5lLHttYXhIZWlnaHQ6Ijk1dmgiLG1heFdpZHRoOiI4MHZ3IixkYXRhOntleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc319KX1vbkdyb3VwQnlSZWdleENsaWNrKCl7dGhpcy5yZWdleFN0cmluZz90aGlzLm9uR3JvdXBCeUNoYW5nZS5lbWl0KHtrZXk6WWkuUkVHRVgscmVnZXhTdHJpbmc6dGhpcy5yZWdleFN0cmluZ30pOnRoaXMub25SZWdleFN0cmluZ0VkaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh6bCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50Il1dLGlucHV0czp7c2hvd0V4cGVyaW1lbnRzR3JvdXBCeToic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhTdHJpbmc6InJlZ2V4U3RyaW5nIixzZWxlY3RlZEdyb3VwQnk6InNlbGVjdGVkR3JvdXBCeSJ9LG91dHB1dHM6e29uR3JvdXBCeUNoYW5nZToib25Hcm91cEJ5Q2hhbmdlIn0sZGVjbHM6MTksdmFyczo4LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNvbG9yIHJ1bnMgYnkuLi4iLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIl0sWyJzdmdJY29uIiwicGFsZXR0ZV8yNHB4Il0sWzEsInJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSJdLFsiZ3JvdXBCeU1lbnUiLCJtYXRNZW51Il0sWzEsImxhYmVsIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJydW4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Iiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwicmVnZXgiLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtIiwiZGF0YS12YWx1ZSIsInJlZ2V4LWVkaXQiLDEsImRpc3BsYXktcmVnZXgtc3RyaW5nIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImVkaXRfMjRweCJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vbmUtc2V0LXN0cmluZyIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsImV4cGVyaW1lbnQiLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZG9uZV8yNHB4Il0sWzEsIm5vbmUtc2V0LXN0cmluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwiYnV0dG9uIiwwKSxQKDEsIm1hdC1pY29uIiwxKSxnKCksaCgyLCJtYXQtbWVudSIsMiwzKSg0LCJkaXYiLDQpLFQoNSwiQ29sb3IgcnVucyBieSIpLGcoKSxTKDYsZjRlLDQsMiwiYnV0dG9uIiw1KSxoKDcsImJ1dHRvbiIsNiksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTppLkdyb3VwQnlLZXkuUlVOfSl9KSxTKDgsbTRlLDEsMCwibWF0LWljb24iLDcpLGgoOSwic3BhbiIpLFQoMTAsIlJ1biIpLGcoKSgpLGgoMTEsImJ1dHRvbiIsOCksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEJ5UmVnZXhDbGljaygpfSksUygxMixoNGUsMSwwLCJtYXQtaWNvbiIsNyksaCgxMywic3BhbiIpLFQoMTQsIlJlZ2V4IiksZygpKCksaCgxNSwiYnV0dG9uIiw5KSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlZ2V4U3RyaW5nRWRpdCgpfSksUCgxNiwibWF0LWljb24iLDEwKSxTKDE3LGc0ZSwyLDEsInNwYW4iLDExKSxTKDE4LF80ZSwyLDAsInNwYW4iLDEyKSxnKCkoKSksMiZlJiYoXygibWF0TWVudVRyaWdnZXJGb3IiLGl0KDMpKSx2KDYpLF8oIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSksdigxKSxCZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx2KDEpLF8oIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHYoMyksQmUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSx2KDEpLF8oIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCksdig1KSxfKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx2KDEpLF8oIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbRmUsJGksRW4sTmMsamwsTGNdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksX0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaG93RXhwZXJpbWVudHNHcm91cEJ5JD10aGlzLnN0b3JlLnNlbGVjdChHOCkucGlwZShOKGk9PmkuaGFzKHduLkNPTVBBUkVfRVhQRVJJTUVOVCkpKSx0aGlzLnNlbGVjdGVkR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoSFcpLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD10aGlzLnN0b3JlLnNlbGVjdCh2MSl9b25Hcm91cEJ5Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSGgoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iXV0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIn0sZGVjbHM6NCx2YXJzOjEwLGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwic2VsZWN0ZWRHcm91cEJ5Iiwic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsImV4cGVyaW1lbnRJZHMiLCJvbkdyb3VwQnlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24tY29tcG9uZW50IiwwKSxJKCJvbkdyb3VwQnlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uR3JvdXBCeUNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGcoKSksMiZlJiZfKCJyZWdleFN0cmluZyIsVygxLDQsaS5ncm91cEJ5UmVnZXhTdHJpbmckKSkoInNlbGVjdGVkR3JvdXBCeSIsVygyLDYsaS5zZWxlY3RlZEdyb3VwQnkkKSkoInNob3dFeHBlcmltZW50c0dyb3VwQnkiLFcoMyw4LGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQpKSgiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKX0sZGVwZW5kZW5jaWVzOltDbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHY0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIpKDEsIm1hdC1jaGVja2JveCIsMTUpLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoMykuaGFuZGxlU2VsZWN0QWxsKHIpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKTt2KDEpLF8oImNoZWNrZWQiLGUuYWxsUm93c1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhZS5hbGxSb3dzU2VsZWN0ZWQoKSYmZS5zb21lUm93c1NlbGVjdGVkKCkpfX1mdW5jdGlvbiB5NGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDE2KSxQKDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDE3KSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLF8oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcyl9fXZhciB3bmU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiB4NGUobix0KXtpZigxJm4mJihoKDAsInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDExKSxPdCgxLDEyKSxTKDIsdjRlLDIsMiwiZGl2IiwxMyksUygzLHk0ZSwyLDEsInNwYW4iLDE0KSxrdCgpLGcoKSksMiZuKXtsZXQgZT13KCkuJGltcGxpY2l0LGk9dygpO18oImhlYWRlciIsZSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiaHBhcmFtc0VuYWJsZWQiLCEwKSgibmdDbGFzcyIsSW4oNyx3bmUsInRhYmxlLWNvbHVtbi0iK2UubmFtZSkpLHYoMSksXygibmdTd2l0Y2giLGUubmFtZSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJzZWxlY3RlZCIpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiY29sb3IiKX19ZnVuY3Rpb24gQzRlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLHg0ZSw0LDksInRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGwiLDEwKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3YoMSksXygibmdJZiIsZS5lbmFibGVkKX19ZnVuY3Rpb24gTTRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwic3BhbiIsMjEpKDEsImJ1dHRvbiIsMjIpLEkoImNvbG9yUGlja2VyQ2hhbmdlIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMykuJGltcGxpY2l0O3JldHVybiBRKHcoKS5vblJ1bkNvbG9yQ2hhbmdlLmVtaXQoe3J1bklkOm8uaWQsbmV3Q29sb3I6cn0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKS4kaW1wbGljaXQ7digxKSxUdCgiYmFja2dyb3VuZCIsZS5jb2xvciksXygiY29sb3JQaWNrZXIiLGUuY29sb3IpKCJjcERpYWxvZ0Rpc3BsYXkiLCJwb3B1cCIpKCJjcFBvc2l0aW9uT2Zmc2V0IiwtMjApKCJjcFVzZVJvb3RWaWV3Q29udGFpbmVyIiwhMCkoImNwT3V0cHV0Rm9ybWF0IiwiaGV4Iil9fWZ1bmN0aW9uIHc0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIpKDEsIm1hdC1jaGVja2JveCIsMjMpLEkoImNsaWNrIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMykuJGltcGxpY2l0O3JldHVybiBRKHcoKS5zZWxlY3Rpb25DbGljayhyLG8uaWQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygzKS4kaW1wbGljaXQ7digxKSxfKCJjaGVja2VkIixlLnNlbGVjdGVkKX19ZnVuY3Rpb24gUzRlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiksUCgxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwyNCksZygpKSwyJm4pe2xldCBlPXcoMykuJGltcGxpY2l0O3YoMSksXygiYWxpYXMiLGUuZXhwZXJpbWVudEFsaWFzKX19ZnVuY3Rpb24gRTRlKG4sdCl7aWYoMSZuJiYoaCgwLCJ0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbCIsMTkpLE90KDEsMTIpLFMoMixNNGUsMiw3LCJzcGFuIiwyMCksUygzLHc0ZSwyLDEsImRpdiIsMTMpLFMoNCxTNGUsMiwxLCJzcGFuIiwxMyksa3QoKSxnKCkpLDImbil7bGV0IGU9dygpLiRpbXBsaWNpdCxpPXcoKS4kaW1wbGljaXQ7XygiaGVhZGVyIixlKSgiZGF0dW0iLGlbZS5uYW1lXSkoIm5nQ2xhc3MiLEluKDcsd25lLCJ0YWJsZS1jb2x1bW4tIitlLm5hbWUpKSx2KDEpLF8oIm5nU3dpdGNoIixlLm5hbWUpLHYoMSksXygibmdTd2l0Y2hDYXNlIiwiY29sb3IiKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsInNlbGVjdGVkIiksdigxKSxfKCJuZ1N3aXRjaENhc2UiLCJleHBlcmltZW50QWxpYXMiKX19ZnVuY3Rpb24gVDRlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLEU0ZSw1LDksInRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsIiwxOCksa3QoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt2KDEpLF8oIm5nSWYiLGUuZW5hYmxlZCl9fWZ1bmN0aW9uIEQ0ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwidGItZGF0YS10YWJsZS1jb250ZW50LXJvdyIpLFMoMixUNGUsMiwxLCJuZy1jb250YWluZXIiLDUpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpO3YoMSksQmUoImRhdGEtaWQiLGUuaWQpLHYoMSksXygibmdGb3JPZiIsaS5nZXRIZWFkZXJzKCkpfX12YXIgSTRlPWZ1bmN0aW9uKG4pe3JldHVybnsiZnVsbC1zY3JlZW4iOm59fSxTbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuQ29sdW1uSGVhZGVyVHlwZT1odCx0aGlzLnNvcnREYXRhQnk9bmV3IEYsdGhpcy5vcmRlckNvbHVtbnM9bmV3IEYsdGhpcy5vblNlbGVjdGlvblRvZ2dsZT1uZXcgRix0aGlzLm9uQWxsU2VsZWN0aW9uVG9nZ2xlPW5ldyBGLHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRix0aGlzLnRvZ2dsZUZ1bGxTY3JlZW49bmV3IEYsdGhpcy5vblJ1bkNvbG9yQ2hhbmdlPW5ldyBGLHRoaXMuYWRkQ29sdW1uPW5ldyBGLHRoaXMucmVtb3ZlQ29sdW1uPW5ldyBGLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRix0aGlzLmFkZEZpbHRlcj1uZXcgRix0aGlzLmJlZm9yZUNvbHVtbnM9W3tuYW1lOiJzZWxlY3RlZCIsZGlzcGxheU5hbWU6IiIsdHlwZTpodC5DVVNUT00sZW5hYmxlZDohMH1dLHRoaXMuYWZ0ZXJDb2x1bW5zPVt7bmFtZToiY29sb3IiLGRpc3BsYXlOYW1lOiIiLHR5cGU6aHQuQ09MT1IsZW5hYmxlZDohMH1dfWdldEhlYWRlcnMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5iZWZvcmVDb2x1bW5zLHRoaXMuaGVhZGVycyx0aGlzLmFmdGVyQ29sdW1ucyl9c2VsZWN0aW9uQ2xpY2soZSxpKXtlLnByZXZlbnREZWZhdWx0KCksMT09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQoaSksMj09PWUuZGV0YWlsJiZ0aGlzLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChpKX1hbGxSb3dzU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5kYXRhPy5ldmVyeShlPT5lLnNlbGVjdGVkKX1zb21lUm93c1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMuZGF0YT8uc29tZShlPT5lLnNlbGVjdGVkKX1oYW5kbGVTZWxlY3RBbGwoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMub25BbGxTZWxlY3Rpb25Ub2dnbGUuZW1pdCh0aGlzLmRhdGE/Lm1hcChpPT5pLmlkKSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIscmVnZXhGaWx0ZXI6InJlZ2V4RmlsdGVyIixpc0Z1bGxTY3JlZW46ImlzRnVsbFNjcmVlbiIsc2VsZWN0YWJsZUNvbHVtbnM6InNlbGVjdGFibGVDb2x1bW5zIixsb2FkaW5nOiJsb2FkaW5nIixjb2x1bW5GaWx0ZXJzOiJjb2x1bW5GaWx0ZXJzIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25BbGxTZWxlY3Rpb25Ub2dnbGU6Im9uQWxsU2VsZWN0aW9uVG9nZ2xlIixvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIix0b2dnbGVGdWxsU2NyZWVuOiJ0b2dnbGVGdWxsU2NyZWVuIixvblJ1bkNvbG9yQ2hhbmdlOiJvblJ1bkNvbG9yQ2hhbmdlIixhZGRDb2x1bW46ImFkZENvbHVtbiIscmVtb3ZlQ29sdW1uOiJyZW1vdmVDb2x1bW4iLG9uU2VsZWN0aW9uRGJsQ2xpY2s6Im9uU2VsZWN0aW9uRGJsQ2xpY2siLGFkZEZpbHRlcjoiYWRkRmlsdGVyIn0sZGVjbHM6MTEsdmFyczoxNCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWzMsImhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic2VsZWN0YWJsZUNvbHVtbnMiLCJjb2x1bW5GaWx0ZXJzIiwibG9hZGluZyIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iLCJhZGRGaWx0ZXIiXSxbImhlYWRlciIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNvbnRlbnQiLCIiXSxbMSwiZnVsbC1zY3JlZW4tdG9nZ2xlIiwzLCJuZ0NsYXNzIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJmdWxsLXNjcmVlbi1idG4iLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsxLCJleHBhbmQtY29sbGFwc2UtaWNvbiIsMywic3ZnSWNvbiJdLFszLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiwibmdDbGFzcyIsNCwibmdJZiJdLFszLCJoZWFkZXIiLCJzb3J0aW5nSW5mbyIsImhwYXJhbXNFbmFibGVkIiwibmdDbGFzcyJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZ3JvdXAtbWVudS1jb250YWluZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNsaWNrIl0sWzEsImdyb3VwLW1lbnUtY29udGFpbmVyIl0sWzMsImV4cGVyaW1lbnRJZHMiXSxbMywiaGVhZGVyIiwiZGF0dW0iLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWzMsImhlYWRlciIsImRhdHVtIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJjb2xvci1jb250YWluZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJjb2xvci1jb250YWluZXIiXSxbMSwicnVuLWNvbG9yLXN3YXRjaCIsMywiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbMywiY2hlY2tlZCIsImNsaWNrIl0sWzMsImFsaWFzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsInRiLWZpbHRlci1pbnB1dCIsMSksSSgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyS2V5VXAobyl9KSxnKCkoKSxoKDIsImRpdiIsMikoMywidGItZGF0YS10YWJsZSIsMyksSSgic29ydERhdGFCeSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc29ydERhdGFCeS5lbWl0KG8pfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub3JkZXJDb2x1bW5zLmVtaXQobyl9KSgiYWRkQ29sdW1uIixmdW5jdGlvbihvKXtyZXR1cm4gaS5hZGRDb2x1bW4uZW1pdChvKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbW92ZUNvbHVtbi5lbWl0KG8pfSkoImFkZEZpbHRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuYWRkRmlsdGVyLmVtaXQobyl9KSxPdCg0LDQpLFMoNSxDNGUsMiwxLCJuZy1jb250YWluZXIiLDUpLGt0KCksT3QoNiw2KSxTKDcsRDRlLDMsMiwibmctY29udGFpbmVyIiw1KSxrdCgpLGcoKSgpLGgoOCwiZGl2Iiw3KSg5LCJidXR0b24iLDgpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZUZ1bGxTY3JlZW4uZW1pdCgpfSksUCgxMCwibWF0LWljb24iLDkpLGcoKSgpKSwyJmUmJih2KDEpLFdpKCJ2YWx1ZSIsaS5yZWdleEZpbHRlciksdigyKSxfKCJoZWFkZXJzIixpLmhlYWRlcnMpKCJzb3J0aW5nSW5mbyIsaS5zb3J0aW5nSW5mbykoImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwhMCkoInNlbGVjdGFibGVDb2x1bW5zIixpLnNlbGVjdGFibGVDb2x1bW5zKSgiY29sdW1uRmlsdGVycyIsaS5jb2x1bW5GaWx0ZXJzKSgibG9hZGluZyIsaS5sb2FkaW5nKSx2KDIpLF8oIm5nRm9yT2YiLGkuZ2V0SGVhZGVycygpKSx2KDIpLF8oIm5nRm9yT2YiLGkuZGF0YSksdigxKSxfKCJuZ0NsYXNzIixJbigxMixJNGUsaS5pc0Z1bGxTY3JlZW4pKSx2KDEpLF8oIm5nQ2xhc3MiLGkuaXNGdWxsU2NyZWVuPyJjb2xsYXBzZSI6ImV4cGFuZCIpLHYoMSksXygic3ZnSWNvbiIsaS5pc0Z1bGxTY3JlZW4/ImFycm93X2JhY2tfMjRweCI6ImFycm93X2ZvcndhcmRfMjRweCIpKX0sZGVwZW5kZW5jaWVzOltnQSx5bixubixGZSxzcixTcixkXyxzQSx1QSx1XyxRdSxTcCxKaSxoYSxFbixfQV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17b3ZlcmZsb3cteTphdXRvO3dpZHRoOjEwMCV9LmNvbG9yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0uZ3JvdXAtbWVudS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9dGItZGF0YS10YWJsZS1jb250ZW50LXJvd1tfbmdjb250ZW50LSVDT01QJV0sIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo0OHB4fXRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fXRiLWRhdGEtdGFibGUtY29udGVudC1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxkLCB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWNvbnRlbnQtY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1jb250ZW50LWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRiLWRhdGEtdGFibGUtaGVhZGVyLWNlbGxbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGItZGF0YS10YWJsZS1oZWFkZXItY2VsbFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1vZi10eXBlLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Yi1kYXRhLXRhYmxlLWhlYWRlci1jZWxsW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fS50YWJsZS1jb2x1bW4tc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGUtY29sdW1uLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo0MHB4fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtsZWZ0OmNhbGMoMTAwJSArIDJweCk7dG9wOjA7ei1pbmRleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3BhY2l0eTouOH0uZnVsbC1zY3JlZW4tdG9nZ2xlLmZ1bGwtc2NyZWVuW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OnVuc2V0O3JpZ2h0OjB9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZnVsbC1zY3JlZW4tYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmdyYXk7cGFkZGluZzowO21pbi13aWR0aDoxNnB4O3dpZHRoOjE2cHh9LmZ1bGwtc2NyZWVuLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZnVsbC1zY3JlZW4tYnRuLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czowIDE2cHggMTZweCAwfS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bi5jb2xsYXBzZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxNnB4IDAgMCAxNnB4fS5mdWxsLXNjcmVlbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmZ1bGwtc2NyZWVuLWJ0bltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kLWNvbGxhcHNlLWljb25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHh9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgdGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6MTZweDtmbGV4LWdyb3c6MX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmF1dG99Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSNGU9WyJ0b29sdGlwIl0sRG5lPW5ldyBpZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksazRlPXtwcm92aWRlOkRuZSxkZXBzOlt6aV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOjIwfSl9fSxONGU9bmV3IGllKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pLEVuZT0idG9vbHRpcC1wYW5lbCIsVG5lPXFvKHtwYXNzaXZlOiEwfSksVTRlPSgoKT0+e2NsYXNzIG57Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXtlIT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj1lLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl90b29sdGlwSW5zdGFuY2U/LnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IHBvc2l0aW9uQXRPcmlnaW4oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25BdE9yaWdpbn1zZXQgcG9zaXRpb25BdE9yaWdpbihlKXt0aGlzLl9wb3NpdGlvbkF0T3JpZ2luPVJ0KGUpLHRoaXMuX2RldGFjaCgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpLHRoaXMuX2Rpc2FibGVkP3RoaXMuaGlkZSgwKTp0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl9Z2V0IHNob3dEZWxheSgpe3JldHVybiB0aGlzLl9zaG93RGVsYXl9c2V0IHNob3dEZWxheShlKXt0aGlzLl9zaG93RGVsYXk9X2koZSl9Z2V0IGhpZGVEZWxheSgpe3JldHVybiB0aGlzLl9oaWRlRGVsYXl9c2V0IGhpZGVEZWxheShlKXt0aGlzLl9oaWRlRGVsYXk9X2koZSksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tb3VzZUxlYXZlSGlkZURlbGF5PXRoaXMuX2hpZGVEZWxheSl9Z2V0IG1lc3NhZ2UoKXtyZXR1cm4gdGhpcy5fbWVzc2FnZX1zZXQgbWVzc2FnZShlKXt0aGlzLl9hcmlhRGVzY3JpYmVyLnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLl9tZXNzYWdlLCJ0b29sdGlwIiksdGhpcy5fbWVzc2FnZT1udWxsIT1lP1N0cmluZyhlKS50cmltKCk6IiIsIXRoaXMuX21lc3NhZ2UmJnRoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoMCk6KHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKSx0aGlzLl91cGRhdGVUb29sdGlwTWVzc2FnZSgpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9hcmlhRGVzY3JpYmVyLmRlc2NyaWJlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKX0pfSkpfWdldCB0b29sdGlwQ2xhc3MoKXtyZXR1cm4gdGhpcy5fdG9vbHRpcENsYXNzfXNldCB0b29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9zZXRUb29sdGlwQ2xhc3ModGhpcy5fdG9vbHRpcENsYXNzKX1jb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsZCx1LHAsZil7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXIsdGhpcy5fdmlld0NvbnRhaW5lclJlZj1vLHRoaXMuX25nWm9uZT1zLHRoaXMuX3BsYXRmb3JtPWEsdGhpcy5fYXJpYURlc2NyaWJlcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX2Rpcj11LHRoaXMuX2RlZmF1bHRPcHRpb25zPXAsdGhpcy5fcG9zaXRpb249ImJlbG93Iix0aGlzLl9wb3NpdGlvbkF0T3JpZ2luPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgSWUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ZCx0aGlzLl9kb2N1bWVudD1mLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnBvc2l0aW9uQXRPcmlnaW4mJih0aGlzLnBvc2l0aW9uQXRPcmlnaW49cC5wb3NpdGlvbkF0T3JpZ2luKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksdS5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixUbmUpfSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oZSx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcoZSl9c2hvdyhlPXRoaXMuc2hvd0RlbGF5LGkpe2lmKHRoaXMuZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSlyZXR1cm4gdm9pZCB0aGlzLl90b29sdGlwSW5zdGFuY2U/Ll9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO2xldCByPXRoaXMuX2NyZWF0ZU92ZXJsYXkoaSk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IFZsKHRoaXMuX3Rvb2x0aXBDb21wb25lbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZik7bGV0IG89dGhpcy5fdG9vbHRpcEluc3RhbmNlPXIuYXR0YWNoKHRoaXMuX3BvcnRhbCkuaW5zdGFuY2U7by5fdHJpZ2dlckVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LG8uX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5LG8uYWZ0ZXJIaWRkZW4oKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksby5zaG93KGUpfWhpZGUoZT10aGlzLmhpZGVEZWxheSl7bGV0IGk9dGhpcy5fdG9vbHRpcEluc3RhbmNlO2kmJihpLmlzVmlzaWJsZSgpP2kuaGlkZShlKTooaS5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9kZXRhY2goKSkpfXRvZ2dsZShlKXt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KHZvaWQgMCxlKX1faXNUb29sdGlwVmlzaWJsZSgpe3JldHVybiEhdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYodGhpcy5fb3ZlcmxheVJlZil7bGV0IG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5O2lmKCghdGhpcy5wb3NpdGlvbkF0T3JpZ2lufHwhZSkmJm8uX29yaWdpbiBpbnN0YW5jZW9mIE1lKXJldHVybiB0aGlzLl9vdmVybGF5UmVmO3RoaXMuX2RldGFjaCgpfWxldCBpPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLHI9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5wb3NpdGlvbkF0T3JpZ2luJiZlfHx0aGlzLl9lbGVtZW50UmVmKS53aXRoVHJhbnNmb3JtT3JpZ2luT24oYC4ke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwYCkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoaSk7cmV0dXJuIHIucG9zaXRpb25DaGFuZ2VzLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhvLmNvbm5lY3Rpb25QYWlyKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJm8uc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzLmlzT3ZlcmxheUNsaXBwZWQmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKX0pLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTpyLHBhbmVsQ2xhc3M6YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7RW5lfWAsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKX0pLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fdG9vbHRpcEluc3RhbmNlPy5faGFuZGxlQm9keUludGVyYWN0aW9uKCkpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJjI3PT09by5rZXlDb2RlJiYhdnIobykmJihvLnByZXZlbnREZWZhdWx0KCksby5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpKX0pLHRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlVG9vbHRpcEludGVyYWN0aXZpdHkmJnRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyhgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmVgKSx0aGlzLl9vdmVybGF5UmVmfV9kZXRhY2goKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGx9X3VwZGF0ZVBvc2l0aW9uKGUpe2xldCBpPWUuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSxyPXRoaXMuX2dldE9yaWdpbigpLG89dGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uKCk7aS53aXRoUG9zaXRpb25zKFt0aGlzLl9hZGRPZmZzZXQoey4uLnIubWFpbiwuLi5vLm1haW59KSx0aGlzLl9hZGRPZmZzZXQoey4uLnIuZmFsbGJhY2ssLi4uby5mYWxsYmFja30pXSl9X2FkZE9mZnNldChlKXtyZXR1cm4gZX1fZ2V0T3JpZ2luKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pfHwiYmVsb3ciPT1pP3I9e29yaWdpblg6ImNlbnRlciIsb3JpZ2luWToiYWJvdmUiPT1pPyJ0b3AiOiJib3R0b20ifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJjZW50ZXIifSk7bGV0e3g6byx5OnN9PXRoaXMuX2ludmVydFBvc2l0aW9uKHIub3JpZ2luWCxyLm9yaWdpblkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e29yaWdpblg6byxvcmlnaW5ZOnN9fX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJib3R0b20ifToiYmVsb3ciPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJ0b3AifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvdmVybGF5WDoiZW5kIixvdmVybGF5WToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm92ZXJsYXlYLHIub3ZlcmxheVkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e292ZXJsYXlYOm8sb3ZlcmxheVk6c319fV91cGRhdGVUb29sdGlwTWVzc2FnZSgpe3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tZXNzYWdlPXRoaXMubWVzc2FnZSx0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpLHRoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoWXQoMSksb3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSl9X3NldFRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UudG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSl9X2ludmVydFBvc2l0aW9uKGUsaSl7cmV0dXJuImFib3ZlIj09PXRoaXMucG9zaXRpb258fCJiZWxvdyI9PT10aGlzLnBvc2l0aW9uPyJ0b3AiPT09aT9pPSJib3R0b20iOiJib3R0b20iPT09aSYmKGk9InRvcCIpOiJlbmQiPT09ZT9lPSJzdGFydCI6InN0YXJ0Ij09PWUmJihlPSJlbmQiKSx7eDplLHk6aX19X3VwZGF0ZUN1cnJlbnRQb3NpdGlvbkNsYXNzKGUpe2xldCBzLHtvdmVybGF5WTppLG9yaWdpblg6cixvcmlnaW5ZOm99PWU7aWYocz0iY2VudGVyIj09PWk/dGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iZW5kIj09PXI/ImxlZnQiOiJyaWdodCI6InN0YXJ0Ij09PXI/ImxlZnQiOiJyaWdodCI6ImJvdHRvbSI9PT1pJiYidG9wIj09PW8/ImFib3ZlIjoiYmVsb3ciLHMhPT10aGlzLl9jdXJyZW50UG9zaXRpb24pe2xldCBhPXRoaXMuX292ZXJsYXlSZWY7aWYoYSl7bGV0IGw9YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7RW5lfS1gO2EucmVtb3ZlUGFuZWxDbGFzcyhsK3RoaXMuX2N1cnJlbnRQb3NpdGlvbiksYS5hZGRQYW5lbENsYXNzKGwrcyl9dGhpcy5fY3VycmVudFBvc2l0aW9uPXN9fV9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl7dGhpcy5fZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fCF0aGlzLl92aWV3SW5pdGlhbGl6ZWR8fHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMubGVuZ3RofHwodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCk/dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsibW91c2VlbnRlciIsZT0+e2xldCBpO3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLHZvaWQgMCE9PWUueCYmdm9pZCAwIT09ZS55JiYoaT1lKSx0aGlzLnNob3codm9pZCAwLGkpfV0pOiJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzJiYodGhpcy5fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goWyJ0b3VjaHN0YXJ0IixlPT57bGV0IGk9ZS50YXJnZXRUb3VjaGVzPy5bMF0scj1pP3t4OmkuY2xpZW50WCx5OmkuY2xpZW50WX06dm9pZCAwO3RoaXMuX3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpLGNsZWFyVGltZW91dCh0aGlzLl90b3VjaHN0YXJ0VGltZW91dCksdGhpcy5fdG91Y2hzdGFydFRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5zaG93KHZvaWQgMCxyKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixUbmUpfSl9X3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpe3JldHVybiF0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9wbGF0Zm9ybS5BTkRST0lEfV93aGVlbExpc3RlbmVyKGUpe2lmKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpIT09ciYmIXIuY29udGFpbnMoaSkmJnRoaXMuaGlkZSgpfX1fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKXtsZXQgZT10aGlzLnRvdWNoR2VzdHVyZXM7aWYoIm9mZiIhPT1lKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQscj1pLnN0eWxlOygib24iPT09ZXx8IklOUFVUIiE9PWkubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1pLm5vZGVOYW1lKSYmKHIudXNlclNlbGVjdD1yLm1zVXNlclNlbGVjdD1yLndlYmtpdFVzZXJTZWxlY3Q9ci5Nb3pVc2VyU2VsZWN0PSJub25lIiksKCJvbiI9PT1lfHwhaS5kcmFnZ2FibGUpJiYoci53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLHIudG91Y2hBY3Rpb249Im5vbmUiLHIud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtJcygpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGlucHV0czp7cG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLHBvc2l0aW9uQXRPcmlnaW46WyJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsInBvc2l0aW9uQXRPcmlnaW4iXSxkaXNhYmxlZDpbIm1hdFRvb2x0aXBEaXNhYmxlZCIsImRpc2FibGVkIl0sc2hvd0RlbGF5OlsibWF0VG9vbHRpcFNob3dEZWxheSIsInNob3dEZWxheSJdLGhpZGVEZWxheTpbIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJoaWRlRGVsYXkiXSx0b3VjaEdlc3R1cmVzOlsibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJ0b3VjaEdlc3R1cmVzIl0sbWVzc2FnZTpbIm1hdFRvb2x0aXAiLCJtZXNzYWdlIl0sdG9vbHRpcENsYXNzOlsibWF0VG9vbHRpcENsYXNzIiwidG9vbHRpcENsYXNzIl19fSksbn0pKCksSW5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBVNGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLGQsdSxwLGYpe3N1cGVyKGUsaSxyLG8scyxhLGwsYyxkLHUscCxmKSx0aGlzLl90b29sdGlwQ29tcG9uZW50PUc0ZSx0aGlzLl9jc3NDbGFzc1ByZWZpeD0ibWF0LW1kYyIsdGhpcy5fdmlld3BvcnRNYXJnaW49OH1fYWRkT2Zmc2V0KGUpe2xldCByPSF0aGlzLl9kaXJ8fCJsdHIiPT10aGlzLl9kaXIudmFsdWU7cmV0dXJuInRvcCI9PT1lLm9yaWdpblk/ZS5vZmZzZXRZPS04OiJib3R0b20iPT09ZS5vcmlnaW5ZP2Uub2Zmc2V0WT04OiJzdGFydCI9PT1lLm9yaWdpblg/ZS5vZmZzZXRYPXI/LTg6ODoiZW5kIj09PWUub3JpZ2luWCYmKGUub2Zmc2V0WD1yPzg6LTgpLGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoemkpLEMoTWUpLEMoTnUpLEMoc2kpLEMoYXQpLEMoR24pLEMoTDEpLEMoWHIpLEMoRG5lKSxDKFhpLDgpLEMoTjRlLDgpLEMoTHQpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0VG9vbHRpcCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZGMtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLGo0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgSWUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IHM9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoJHQpLEMoaGksOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpufSksbn0pKCksRzRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqNGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2lzTXVsdGlsaW5lPSExLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC1tZGMtdG9vbHRpcC1zaG93Iix0aGlzLl9oaWRlQW5pbWF0aW9uPSJtYXQtbWRjLXRvb2x0aXAtaGlkZSJ9X29uU2hvdygpe3RoaXMuX2lzTXVsdGlsaW5lPXRoaXMuX2lzVG9vbHRpcE11bHRpbGluZSgpLHRoaXMuX21hcmtGb3JDaGVjaygpfV9pc1Rvb2x0aXBNdWx0aWxpbmUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGUuaGVpZ2h0PjI0JiZlLndpZHRoPj0yMDB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoJHQpLEMoTWUpLEMoaGksOCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sdGlwLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJkdlKFI0ZSw3KSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLl90b29sdGlwPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZUxlYXZlKG8pfSksMiZlJiZUdCgiem9vbSIsaS5pc1Zpc2libGUoKT8xOm51bGwpfSxmZWF0dXJlczpbS2VdLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsIm1kYy10b29sdGlwIiwibWRjLXRvb2x0aXAtLXNob3duIiwibWF0LW1kYy10b29sdGlwIiwzLCJuZ0NsYXNzIiwiYW5pbWF0aW9uZW5kIl0sWyJ0b29sdGlwIiwiIl0sWzEsIm1kYy10b29sdGlwX19zdXJmYWNlIiwibWRjLXRvb2x0aXBfX3N1cmZhY2UtYW5pbWF0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDAsMSksSSgiYW5pbWF0aW9uZW5kIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQW5pbWF0aW9uRW5kKG8pfSksaCgyLCJkaXYiLDIpLFQoMyksZygpKCkpLDImZSYmKG50KCJtZGMtdG9vbHRpcC0tbXVsdGlsaW5lIixpLl9pc011bHRpbGluZSksXygibmdDbGFzcyIsaS50b29sdGlwQ2xhc3MpLHYoMyksYnQoaS5tZXNzYWdlKSl9LGRlcGVuZGVuY2llczpbeW5dLHN0eWxlczpbJy5tZGMtdG9vbHRpcF9fc3VyZmFjZXt3b3JkLWJyZWFrOnZhcigtLW1kYy10b29sdGlwLXdvcmQtYnJlYWssIG5vcm1hbCk7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX0ubWRjLXRvb2x0aXB7cG9zaXRpb246Zml4ZWQ7ZGlzcGxheTpub25lO3otaW5kZXg6OX0ubWRjLXRvb2x0aXAtd3JhcHBlci0tcmljaHtwb3NpdGlvbjpyZWxhdGl2ZX0ubWRjLXRvb2x0aXAtLXNob3duLC5tZGMtdG9vbHRpcC0tc2hvd2luZywubWRjLXRvb2x0aXAtLWhpZGV7ZGlzcGxheTppbmxpbmUtZmxleH0ubWRjLXRvb2x0aXAtLXNob3duLm1kYy10b29sdGlwLS1yaWNoLC5tZGMtdG9vbHRpcC0tc2hvd2luZy5tZGMtdG9vbHRpcC0tcmljaCwubWRjLXRvb2x0aXAtLWhpZGUubWRjLXRvb2x0aXAtLXJpY2h7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGVmdDotMzIwcHg7cG9zaXRpb246YWJzb2x1dGV9Lm1kYy10b29sdGlwX19zdXJmYWNle2xpbmUtaGVpZ2h0OjE2cHg7cGFkZGluZzo0cHggOHB4O21pbi13aWR0aDo0MHB4O21heC13aWR0aDoyMDBweDttaW4taGVpZ2h0OjI0cHg7bWF4LWhlaWdodDo0MHZoO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXJ9Lm1kYy10b29sdGlwX19zdXJmYWNlOjpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7Y29udGVudDoiIjtwb2ludGVyLWV2ZW50czpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChmb3JjZWQtY29sb3JzOiBhY3RpdmUpey5tZGMtdG9vbHRpcF9fc3VyZmFjZTo6YmVmb3Jle2JvcmRlci1jb2xvcjpDYW52YXNUZXh0fX0ubWRjLXRvb2x0aXAtLXJpY2ggLm1kYy10b29sdGlwX19zdXJmYWNle2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4taGVpZ2h0OjI0cHg7bWluLXdpZHRoOjQwcHg7bWF4LXdpZHRoOjMyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZGMtdG9vbHRpcC0tbXVsdGlsaW5lIC5tZGMtdG9vbHRpcF9fc3VyZmFjZXt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tZGMtdG9vbHRpcC0tbXVsdGlsaW5lIC5tZGMtdG9vbHRpcF9fc3VyZmFjZSwubWRjLXRvb2x0aXAtLW11bHRpbGluZSAubWRjLXRvb2x0aXBfX3N1cmZhY2VbZGlyPXJ0bF17dGV4dC1hbGlnbjpyaWdodH0ubWRjLXRvb2x0aXBfX3N1cmZhY2UgLm1kYy10b29sdGlwX190aXRsZXttYXJnaW46MCA4cHh9Lm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudHttYXgtd2lkdGg6Y2FsYygyMDBweCAtICgyICogOHB4KSk7bWFyZ2luOjhweDt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tZGMtdG9vbHRpcF9fc3VyZmFjZSAubWRjLXRvb2x0aXBfX2NvbnRlbnQsLm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudFtkaXI9cnRsXXt0ZXh0LWFsaWduOnJpZ2h0fS5tZGMtdG9vbHRpcC0tcmljaCAubWRjLXRvb2x0aXBfX3N1cmZhY2UgLm1kYy10b29sdGlwX19jb250ZW50e21heC13aWR0aDpjYWxjKDMyMHB4IC0gKDIgKiA4cHgpKTthbGlnbi1zZWxmOnN0cmV0Y2h9Lm1kYy10b29sdGlwX19zdXJmYWNlIC5tZGMtdG9vbHRpcF9fY29udGVudC1saW5re3RleHQtZGVjb3JhdGlvbjpub25lfS5tZGMtdG9vbHRpcC0tcmljaC1hY3Rpb25zLC5tZGMtdG9vbHRpcF9fY29udGVudCwubWRjLXRvb2x0aXBfX3RpdGxle3otaW5kZXg6MX0ubWRjLXRvb2x0aXBfX3N1cmZhY2UtYW5pbWF0aW9ue29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eX0ubWRjLXRvb2x0aXAtLXNob3duIC5tZGMtdG9vbHRpcF9fc3VyZmFjZS1hbmltYXRpb257dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6MX0ubWRjLXRvb2x0aXAtLWhpZGUgLm1kYy10b29sdGlwX19zdXJmYWNlLWFuaW1hdGlvbnt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLXRvcCwubWRjLXRvb2x0aXBfX2NhcmV0LXN1cmZhY2UtYm90dG9te3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7dHJhbnNmb3JtOnJvdGF0ZSgzNWRlZykgc2tld1koMjBkZWcpIHNjYWxlWCgwLjkzOTY5MjYyMDgpfS5tZGMtdG9vbHRpcF9fY2FyZXQtc3VyZmFjZS10b3AgLm1kYy1lbGV2YXRpb24tb3ZlcmxheSwubWRjLXRvb2x0aXBfX2NhcmV0LXN1cmZhY2UtYm90dG9tIC5tZGMtZWxldmF0aW9uLW92ZXJsYXl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjB9Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtvdXRsaW5lOjFweCBzb2xpZCByZ2JhKDAsMCwwLDApO3otaW5kZXg6LTF9QG1lZGlhIHNjcmVlbiBhbmQgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSl7Lm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtvdXRsaW5lLWNvbG9yOkNhbnZhc1RleHR9fS5tZGMtdG9vbHRpcF9fc3VyZmFjZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1jb2xvciwgI2ZmZil9Lm1kYy10b29sdGlwX19zdXJmYWNle2JvcmRlci1yYWRpdXM6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtY29udGFpbmVyLXNoYXBlLCB2YXIoLS1tZGMtc2hhcGUtc21hbGwsIDRweCkpfS5tZGMtdG9vbHRpcF9fY2FyZXQtc3VyZmFjZS10b3AsLm1kYy10b29sdGlwX19jYXJldC1zdXJmYWNlLWJvdHRvbXtib3JkZXItcmFkaXVzOnZhcigtLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1zaGFwZSwgdmFyKC0tbWRjLXNoYXBlLXNtYWxsLCA0cHgpKX0ubWRjLXRvb2x0aXBfX3N1cmZhY2V7Y29sb3I6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWNvbG9yLCAjMDAwKX0ubWRjLXRvb2x0aXBfX3N1cmZhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWZvbnQsIGluaGVyaXQpO2ZvbnQtc2l6ZTp2YXIoLS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtc2l6ZSwgaW5oZXJpdCk7Zm9udC13ZWlnaHQ6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXdlaWdodCwgaW5oZXJpdCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nLCBpbmhlcml0KX0ubWF0LW1kYy10b29sdGlwe3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LW1kYy10b29sdGlwOjpiZWZvcmV7Y29udGVudDoiIjt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4Oi0xO3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtYmVsb3cgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle3RvcDotOHB4fS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtYWJvdmUgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle2JvdHRvbTotOHB4fS5tYXQtbWRjLXRvb2x0aXAtcGFuZWwtcmlnaHQgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle2xlZnQ6LThweH0ubWF0LW1kYy10b29sdGlwLXBhbmVsLWxlZnQgLm1hdC1tZGMtdG9vbHRpcDo6YmVmb3Jle3JpZ2h0Oi04cHh9Lm1hdC1tZGMtdG9vbHRpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXthbmltYXRpb246bm9uZTt0cmFuc2Zvcm06c2NhbGUoMSl9Lm1hdC1tZGMtdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmV7cG9pbnRlci1ldmVudHM6bm9uZX1Aa2V5ZnJhbWVzIG1hdC1tZGMtdG9vbHRpcC1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LW1kYy10b29sdGlwLWhpZGV7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMC44KX19Lm1hdC1tZGMtdG9vbHRpcC1zaG93e2FuaW1hdGlvbjptYXQtbWRjLXRvb2x0aXAtc2hvdyAxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSBmb3J3YXJkc30ubWF0LW1kYy10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC1tZGMtdG9vbHRpcC1oaWRlIDc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkgZm9yd2FyZHN9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQW5lPShfcigic3RhdGUiLFt3aSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC44KSJ9KSksd2koInZpc2libGUiLHJuKHt0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSxnaSgiKiA9PiB2aXNpYmxlIixDaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksZ2koIiogPT4gaGlkZGVuIixDaSgiNzVtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKSIpKV0pLCgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2s0ZV0saW1wb3J0czpbbGcsUGUsQ28sZm4sZm4sUGNdfSksbn0pKCkpO2Z1bmN0aW9uIHE0ZShuLHQpe2lmKDEmbiYmKGgoMCwibWF0LW9wdGlvbiIsMTkpLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O18oInZhbHVlIixlKSx2KDEpLEhlKCIgIixlLCIgIil9fWZ1bmN0aW9uIFk0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsIm1hdC1mb3JtLWZpZWxkIiwxNikoMSwibWF0LXNlbGVjdCIsMTcpLEkoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KDIpLl9jaGFuZ2VQYWdlU2l6ZShyLnZhbHVlKSl9KSxTKDIscTRlLDIsMiwibWF0LW9wdGlvbiIsMTgpLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKTtfKCJhcHBlYXJhbmNlIixlLl9mb3JtRmllbGRBcHBlYXJhbmNlKSgiY29sb3IiLGUuY29sb3IpLHYoMSksXygidmFsdWUiLGUucGFnZVNpemUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCkoImFyaWEtbGFiZWxsZWRieSIsZS5fcGFnZVNpemVMYWJlbElkKSgicGFuZWxDbGFzcyIsZS5zZWxlY3RDb25maWcucGFuZWxDbGFzc3x8IiIpKCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixlLnNlbGVjdENvbmZpZy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKSx2KDEpLF8oIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIFg0ZShuLHQpe2lmKDEmbiYmKGgoMCwiZGl2IiwyMCksVCgxKSxnKCkpLDImbil7bGV0IGU9dygyKTt2KDEpLGJ0KGUucGFnZVNpemUpfX1mdW5jdGlvbiBRNGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLFQoMiksZygpLFMoMyxZNGUsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLFMoNCxYNGUsMiwxLCJkaXYiLDE1KSxnKCkpLDImbil7bGV0IGU9dygpO3YoMSksV2koImlkIixlLl9wYWdlU2l6ZUxhYmVsSWQpLHYoMSksSGUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSx2KDEpLF8oIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSksdigxKSxfKCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gWjRlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwiYnV0dG9uIiwyMSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFgoZSksUSh3KCkuZmlyc3RQYWdlKCkpfSksTm4oKSxoKDEsInN2ZyIsNyksUCgyLCJwYXRoIiwyMiksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7XygibWF0VG9vbHRpcCIsZS5faW50bC5maXJzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsZS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSxCZSgiYXJpYS1sYWJlbCIsZS5faW50bC5maXJzdFBhZ2VMYWJlbCl9fWZ1bmN0aW9uIEs0ZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtObigpLE9vKCksaCgwLCJidXR0b24iLDIzKSxJKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS5sYXN0UGFnZSgpKX0pLE5uKCksaCgxLCJzdmciLDcpLFAoMiwicGF0aCIsMjQpLGcoKSgpfWlmKDImbil7bGV0IGU9dygpO18oIm1hdFRvb2x0aXAiLGUuX2ludGwubGFzdFBhZ2VMYWJlbCkoIm1hdFRvb2x0aXBEaXNhYmxlZCIsZS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSksQmUoImFyaWEtbGFiZWwiLGUuX2ludGwubGFzdFBhZ2VMYWJlbCl9fXZhciBDbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBJZSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJJdGVtcyBwZXIgcGFnZToiLHRoaXMubmV4dFBhZ2VMYWJlbD0iTmV4dCBwYWdlIix0aGlzLnByZXZpb3VzUGFnZUxhYmVsPSJQcmV2aW91cyBwYWdlIix0aGlzLmZpcnN0UGFnZUxhYmVsPSJGaXJzdCBwYWdlIix0aGlzLmxhc3RQYWdlTGFiZWw9Ikxhc3QgcGFnZSIsdGhpcy5nZXRSYW5nZUxhYmVsPShlLGkscik9PntpZigwPT1yfHwwPT1pKXJldHVybmAwIG9mICR7cn1gO2xldCBvPWUqaTtyZXR1cm5gJHtvKzF9IFx1MjAxMyAke288KHI9TWF0aC5tYXgociwwKSk/TWF0aC5taW4obytpLHIpOm8raX0gb2YgJHtyfWB9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXVlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSwkNGU9e3Byb3ZpZGU6Q20sZGVwczpbW25ldyBUcyxuZXcgc2QsQ21dXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybiBufHxuZXcgQ219fSx0SGU9bmV3IGllKCJNQVRfUEFHSU5BVE9SX0RFRkFVTFRfT1BUSU9OUyIpLG5IZT1zbyhWMShjbGFzc3t9KSksaUhlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBuSGV7Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoX2koZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9X2koZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChfaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5faShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9UnQoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1SdChlKX1jb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRix0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19bmdPbkluaXQoKXt0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKSx0aGlzLl9tYXJrSW5pdGlhbGl6ZWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2ludGxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9bmV4dFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLnBhZ2VJbmRleCsxLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9cHJldmlvdXNQYWdlKCl7aWYoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4LTEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1maXJzdFBhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9MCx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWxhc3RQYWdlKCl7aWYoIXRoaXMuaGFzTmV4dFBhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWhhc1ByZXZpb3VzUGFnZSgpe3JldHVybiB0aGlzLnBhZ2VJbmRleD49MSYmMCE9dGhpcy5wYWdlU2l6ZX1oYXNOZXh0UGFnZSgpe2xldCBlPXRoaXMuZ2V0TnVtYmVyT2ZQYWdlcygpLTE7cmV0dXJuIHRoaXMucGFnZUluZGV4PGUmJjAhPXRoaXMucGFnZVNpemV9Z2V0TnVtYmVyT2ZQYWdlcygpe3JldHVybiB0aGlzLnBhZ2VTaXplP01hdGguY2VpbCh0aGlzLmxlbmd0aC90aGlzLnBhZ2VTaXplKTowfV9jaGFuZ2VQYWdlU2l6ZShlKXtsZXQgcj10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD1NYXRoLmZsb29yKHRoaXMucGFnZUluZGV4KnRoaXMucGFnZVNpemUvZSl8fDAsdGhpcy5wYWdlU2l6ZT1lLHRoaXMuX2VtaXRQYWdlRXZlbnQocil9X25leHRCdXR0b25zRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMuaGFzTmV4dFBhZ2UoKX1fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMuaGFzUHJldmlvdXNQYWdlKCl9X3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpeyF0aGlzLl9pbml0aWFsaXplZHx8KHRoaXMucGFnZVNpemV8fCh0aGlzLl9wYWdlU2l6ZT0wIT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGg/dGhpcy5wYWdlU2l6ZU9wdGlvbnNbMF06NTApLHRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucz10aGlzLnBhZ2VTaXplT3B0aW9ucy5zbGljZSgpLC0xPT09dGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLmluZGV4T2YodGhpcy5wYWdlU2l6ZSkmJnRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5wdXNoKHRoaXMucGFnZVNpemUpLHRoaXMuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5zb3J0KChlLGkpPT5lLWkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fZW1pdFBhZ2VFdmVudChlKXt0aGlzLnBhZ2UuZW1pdCh7cHJldmlvdXNQYWdlSW5kZXg6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxsZW5ndGg6dGhpcy5sZW5ndGh9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe0lzKCl9LG4uXHUwMjc1ZGlyPXdlKHt0eXBlOm4saW5wdXRzOntjb2xvcjoiY29sb3IiLHBhZ2VJbmRleDoicGFnZUluZGV4IixsZW5ndGg6Imxlbmd0aCIscGFnZVNpemU6InBhZ2VTaXplIixwYWdlU2l6ZU9wdGlvbnM6InBhZ2VTaXplT3B0aW9ucyIsaGlkZVBhZ2VTaXplOiJoaWRlUGFnZVNpemUiLHNob3dGaXJzdExhc3RCdXR0b25zOiJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsc2VsZWN0Q29uZmlnOiJzZWxlY3RDb25maWcifSxvdXRwdXRzOntwYWdlOiJwYWdlIn0sZmVhdHVyZXM6W0tlXX0pLG59KSgpLHJIZT0wLGJBPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBpSGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSxyKSx0aGlzLl9wYWdlU2l6ZUxhYmVsSWQ9Im1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsLSIrckhlKyssdGhpcy5fZm9ybUZpZWxkQXBwZWFyYW5jZT1yPy5mb3JtRmllbGRBcHBlYXJhbmNlfHwib3V0bGluZSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQ20pLEMoJHQpLEModEhlLDgpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcGFnaW5hdG9yIl1dLGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LW1kYy1wYWdpbmF0b3IiXSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl0sZmVhdHVyZXM6W0tlXSxkZWNsczoxNCx2YXJzOjE0LGNvbnN0czpbWzEsIm1hdC1tZGMtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtbWRjLXBhZ2luYXRvci1jb250YWluZXIiXSxbImNsYXNzIiwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplIiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbImFyaWEtbGl2ZSIsInBvbGl0ZSIsMSwibWF0LW1kYy1wYWdpbmF0b3ItcmFuZ2UtbGFiZWwiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1tZGMtcGFnaW5hdG9yLW5hdmlnYXRpb24tZmlyc3QiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1pY29uIl0sWyJkIiwiTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1uYXZpZ2F0aW9uLW5leHQiLDMsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwUG9zaXRpb24iLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJkIiwiTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LW1kYy1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUiXSxbMSwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsIiwzLCJpZCJdLFsiY2xhc3MiLCJtYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0IiwzLCJhcHBlYXJhbmNlIiwiY29sb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIiw0LCJuZ0lmIl0sWzEsIm1hdC1tZGMtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFsiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsIiIsMywidmFsdWUiLCJkaXNhYmxlZCIsImFyaWEtbGFiZWxsZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLXZhbHVlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtbWRjLXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1tZGMtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoaCgwLCJkaXYiLDApKDEsImRpdiIsMSksUygyLFE0ZSw1LDQsImRpdiIsMiksaCgzLCJkaXYiLDMpKDQsImRpdiIsNCksVCg1KSxnKCksUyg2LFo0ZSwzLDUsImJ1dHRvbiIsNSksaCg3LCJidXR0b24iLDYpLEkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksTm4oKSxoKDgsInN2ZyIsNyksUCg5LCJwYXRoIiw4KSxnKCkoKSxPbygpLGgoMTAsImJ1dHRvbiIsOSksSSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLE5uKCksaCgxMSwic3ZnIiw3KSxQKDEyLCJwYXRoIiwxMCksZygpKCksUygxMyxLNGUsMyw1LCJidXR0b24iLDExKSxnKCkoKSgpKSwyJmUmJih2KDIpLF8oIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSksdigzKSxIZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIiksdigxKSxfKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSx2KDEpLF8oIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksQmUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHYoMyksXygibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSxCZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSx2KDMpLF8oIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOltubixGZSwkaSxLYSx6dSxVcyxJbmVdLHN0eWxlczpbIi5tYXQtbWRjLXBhZ2luYXRvcntkaXNwbGF5OmJsb2NrfS5tYXQtbWRjLXBhZ2luYXRvciAubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2Rpc3BsYXk6bm9uZX0ubWF0LW1kYy1wYWdpbmF0b3IgLm1hdC1tZGMtc2VsZWN0e2xpbmUtaGVpZ2h0OjEuNX0ubWF0LW1kYy1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LW1kYy1wYWdpbmF0b3ItY29udGFpbmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MCA4cHg7ZmxleC13cmFwOndyYXAtcmV2ZXJzZTt3aWR0aDoxMDAlfS5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtbGFiZWx7bWFyZ2luOjAgNHB4fS5tYXQtbWRjLXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0e21hcmdpbjowIDRweDt3aWR0aDo4NHB4fS5tYXQtbWRjLXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LW1kYy1wYWdpbmF0b3ItcmFuZ2UtYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI4cHh9W2Rpcj1ydGxdIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LW1kYy1wYWdpbmF0b3ItaWNvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXBhZ2luYXRvci1pY29ue2ZpbGw6Y3VycmVudENvbG9yO2ZpbGw6Q2FudmFzVGV4dH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWRjLXBhZ2luYXRvci1yYW5nZS1hY3Rpb25zIC5tYXQtbWRjLWljb24tYnV0dG9ue291dGxpbmU6c29saWQgMXB4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlskNGVdLGltcG9ydHM6W1BlLGNpLEphLEFuZV19KSxufSkoKSxzSGU9WyJtYXQtc29ydC1oZWFkZXIiLCIiXTtmdW5jdGlvbiBhSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJkaXYiLDMpLEkoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKX0pKCJAYXJyb3dQb3NpdGlvbi5kb25lIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExKX0pLFAoMSwiZGl2Iiw0KSxoKDIsImRpdiIsNSksUCgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwiZGl2Iiw4KSxnKCkoKX1pZigyJm4pe2xldCBlPXcoKTtfKCJAYXJyb3dPcGFjaXR5IixlLl9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFycm93UG9zaXRpb24iLGUuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYWxsb3dDaGlsZHJlbiIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSx2KDIpLF8oIkBpbmRpY2F0b3IiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSksdigxKSxfKCJAbGVmdFBvaW50ZXIiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSksdigxKSxfKCJAcmlnaHRQb2ludGVyIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpfX12YXIgbEhlPVsiKiJdLFBuZT1uZXcgaWUoIk1BVF9TT1JUX0RFRkFVTFRfT1BUSU9OUyIpLGNIZT1WMShzbyhjbGFzc3t9KSksJHg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNIZXtnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn1zZXQgZGlyZWN0aW9uKGUpe3RoaXMuX2RpcmVjdGlvbj1lfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVJ0KGUpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZSx0aGlzLnNvcnRhYmxlcz1uZXcgTWFwLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgSWUsdGhpcy5zdGFydD0iYXNjIix0aGlzLl9kaXJlY3Rpb249IiIsdGhpcy5zb3J0Q2hhbmdlPW5ldyBGfXJlZ2lzdGVyKGUpe3RoaXMuc29ydGFibGVzLnNldChlLmlkLGUpfWRlcmVnaXN0ZXIoZSl7dGhpcy5zb3J0YWJsZXMuZGVsZXRlKGUuaWQpfXNvcnQoZSl7dGhpcy5hY3RpdmUhPWUuaWQ/KHRoaXMuYWN0aXZlPWUuaWQsdGhpcy5kaXJlY3Rpb249ZS5zdGFydD9lLnN0YXJ0OnRoaXMuc3RhcnQpOnRoaXMuZGlyZWN0aW9uPXRoaXMuZ2V0TmV4dFNvcnREaXJlY3Rpb24oZSksdGhpcy5zb3J0Q2hhbmdlLmVtaXQoe2FjdGl2ZTp0aGlzLmFjdGl2ZSxkaXJlY3Rpb246dGhpcy5kaXJlY3Rpb259KX1nZXROZXh0U29ydERpcmVjdGlvbihlKXtpZighZSlyZXR1cm4iIjtsZXQgcj1mdW5jdGlvbihuLHQpe2xldCBlPVsiYXNjIiwiZGVzYyJdO3JldHVybiJkZXNjIj09biYmZS5yZXZlcnNlKCksdHx8ZS5wdXNoKCIiKSxlfShlLnN0YXJ0fHx0aGlzLnN0YXJ0LGU/LmRpc2FibGVDbGVhcj8/dGhpcy5kaXNhYmxlQ2xlYXI/PyEhdGhpcy5fZGVmYXVsdE9wdGlvbnM/LmRpc2FibGVDbGVhciksbz1yLmluZGV4T2YodGhpcy5kaXJlY3Rpb24pKzE7cmV0dXJuIG8+PXIubGVuZ3RoJiYobz0wKSxyW29dfW5nT25Jbml0KCl7dGhpcy5fbWFya0luaXRpYWxpemVkKCl9bmdPbkNoYW5nZXMoKXt0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoUG5lLDgpKX0sbi5cdTAyNzVkaXI9d2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0U29ydCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0Il0saW5wdXRzOntkaXNhYmxlZDpbIm1hdFNvcnREaXNhYmxlZCIsImRpc2FibGVkIl0sYWN0aXZlOlsibWF0U29ydEFjdGl2ZSIsImFjdGl2ZSJdLHN0YXJ0OlsibWF0U29ydFN0YXJ0Iiwic3RhcnQiXSxkaXJlY3Rpb246WyJtYXRTb3J0RGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZGlzYWJsZUNsZWFyOlsibWF0U29ydERpc2FibGVDbGVhciIsImRpc2FibGVDbGVhciJdfSxvdXRwdXRzOntzb3J0Q2hhbmdlOiJtYXRTb3J0Q2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRTb3J0Il0sZmVhdHVyZXM6W0tlLEd0XX0pLG59KSgpLFRwPVQ3LkVOVEVSSU5HKyIgIitFNy5TVEFOREFSRF9DVVJWRSxtXz17aW5kaWNhdG9yOl9yKCJpbmRpY2F0b3IiLFt3aSgiYWN0aXZlLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDBweCkifSkpLHdpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgxMHB4KSJ9KSksZ2koImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixDaShUcCkpXSksbGVmdFBvaW50ZXI6X3IoImxlZnRQb2ludGVyIixbd2koImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKC00NWRlZykifSkpLHdpKCJhY3RpdmUtZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksZ2koImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixDaShUcCkpXSkscmlnaHRQb2ludGVyOl9yKCJyaWdodFBvaW50ZXIiLFt3aSgiYWN0aXZlLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJyb3RhdGUoNDVkZWcpIn0pKSx3aSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxnaSgiYWN0aXZlLWFzYyA8PT4gYWN0aXZlLWRlc2MiLENpKFRwKSldKSxhcnJvd09wYWNpdHk6X3IoImFycm93T3BhY2l0eSIsW3dpKCJkZXNjLXRvLWFjdGl2ZSwgYXNjLXRvLWFjdGl2ZSwgYWN0aXZlIixybih7b3BhY2l0eToxfSkpLHdpKCJkZXNjLXRvLWhpbnQsIGFzYy10by1oaW50LCBoaW50Iixybih7b3BhY2l0eTouNTR9KSksd2koImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MsIGhpbnQtdG8tYXNjLCBhY3RpdmUtdG8tYXNjLCBhc2MsIHZvaWQiLHJuKHtvcGFjaXR5OjB9KSksZ2koIiogPT4gYXNjLCAqID0+IGRlc2MsICogPT4gYWN0aXZlLCAqID0+IGhpbnQsICogPT4gdm9pZCIsQ2koIjBtcyIpKSxnaSgiKiA8PT4gKiIsQ2koVHApKV0pLGFycm93UG9zaXRpb246X3IoImFycm93UG9zaXRpb24iLFtnaSgiKiA9PiBkZXNjLXRvLWhpbnQsICogPT4gZGVzYy10by1hY3RpdmUiLENpKFRwLGtiKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSldKSkpLGdpKCIqID0+IGhpbnQtdG8tZGVzYywgKiA9PiBhY3RpdmUtdG8tZGVzYyIsQ2koVHAsa2IoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSkscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pXSkpKSxnaSgiKiA9PiBhc2MtdG8taGludCwgKiA9PiBhc2MtdG8tYWN0aXZlIixDaShUcCxrYihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgyNSUpIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMCkifSldKSkpLGdpKCIqID0+IGhpbnQtdG8tYXNjLCAqID0+IGFjdGl2ZS10by1hc2MiLENpKFRwLGtiKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSldKSkpLHdpKCJkZXNjLXRvLWhpbnQsIGFzYy10by1oaW50LCBoaW50LCBkZXNjLXRvLWFjdGl2ZSwgYXNjLXRvLWFjdGl2ZSwgYWN0aXZlIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pKSx3aSgiaGludC10by1kZXNjLCBhY3RpdmUtdG8tZGVzYywgZGVzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSksd2koImhpbnQtdG8tYXNjLCBhY3RpdmUtdG8tYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSldKSxhbGxvd0NoaWxkcmVuOl9yKCJhbGxvd0NoaWxkcmVuIixbZ2koIiogPD0+ICoiLFtKcCgiQCoiLEtwKCkse29wdGlvbmFsOiEwfSldKV0pfSx2QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPW5ldyBJZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscEhlPXtwcm92aWRlOnZBLGRlcHM6W1tuZXcgVHMsbmV3IHNkLHZBXV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gbnx8bmV3IHZBfX0sZkhlPXNvKGNsYXNze30pLE9uZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZkhle2dldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVJ0KGUpfWNvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zb3J0PXIsdGhpcy5fY29sdW1uRGVmPW8sdGhpcy5fZm9jdXNNb25pdG9yPXMsdGhpcy5fZWxlbWVudFJlZj1hLHRoaXMuX2FyaWFEZXNjcmliZXI9bCx0aGlzLl9zaG93SW5kaWNhdG9ySGludD0hMSx0aGlzLl92aWV3U3RhdGU9e30sdGhpcy5fYXJyb3dEaXJlY3Rpb249IiIsdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLmFycm93UG9zaXRpb249ImFmdGVyIix0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb249IlNvcnQiLGM/LmFycm93UG9zaXRpb24mJih0aGlzLmFycm93UG9zaXRpb249Yz8uYXJyb3dQb3NpdGlvbiksdGhpcy5faGFuZGxlU3RhdGVDaGFuZ2VzKCl9bmdPbkluaXQoKXshdGhpcy5pZCYmdGhpcy5fY29sdW1uRGVmJiYodGhpcy5pZD10aGlzLl9jb2x1bW5EZWYubmFtZSksdGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe3RvU3RhdGU6dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlIjp0aGlzLl9hcnJvd0RpcmVjdGlvbn0pLHRoaXMuX3NvcnQucmVnaXN0ZXIodGhpcyksdGhpcy5fc29ydEJ1dHRvbj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiKSx0aGlzLl91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24odGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoZT0+e2xldCBpPSEhZTtpIT09dGhpcy5fc2hvd0luZGljYXRvckhpbnQmJih0aGlzLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZShpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9zb3J0LmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fcmVyZW5kZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fc2V0SW5kaWNhdG9ySGludFZpc2libGUoZSl7dGhpcy5faXNEaXNhYmxlZCgpJiZlfHwodGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ZSx0aGlzLl9pc1NvcnRlZCgpfHwodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUodGhpcy5fc2hvd0luZGljYXRvckhpbnQ/e2Zyb21TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbix0b1N0YXRlOiJoaW50In06e2Zyb21TdGF0ZToiaGludCIsdG9TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbn0pKSl9X3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZShlKXt0aGlzLl92aWV3U3RhdGU9ZXx8e30sdGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbiYmKHRoaXMuX3ZpZXdTdGF0ZT17dG9TdGF0ZTplLnRvU3RhdGV9KX1fdG9nZ2xlT25JbnRlcmFjdGlvbigpe3RoaXMuX3NvcnQuc29ydCh0aGlzKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCl9X2hhbmRsZUNsaWNrKCl7dGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9zb3J0LnNvcnQodGhpcyl9X2hhbmRsZUtleWRvd24oZSl7IXRoaXMuX2lzRGlzYWJsZWQoKSYmKDMyPT09ZS5rZXlDb2RlfHwxMz09PWUua2V5Q29kZSkmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fdG9nZ2xlT25JbnRlcmFjdGlvbigpKX1faXNTb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5hY3RpdmU9PXRoaXMuaWQmJigiYXNjIj09PXRoaXMuX3NvcnQuZGlyZWN0aW9ufHwiZGVzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbil9X2dldEFycm93RGlyZWN0aW9uU3RhdGUoKXtyZXR1cm5gJHt0aGlzLl9pc1NvcnRlZCgpPyJhY3RpdmUtIjoiIn0ke3RoaXMuX2Fycm93RGlyZWN0aW9ufWB9X2dldEFycm93Vmlld1N0YXRlKCl7bGV0IGU9dGhpcy5fdmlld1N0YXRlLmZyb21TdGF0ZTtyZXR1cm4oZT9gJHtlfS10by1gOiIiKSt0aGlzLl92aWV3U3RhdGUudG9TdGF0ZX1fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKXt0aGlzLl9hcnJvd0RpcmVjdGlvbj10aGlzLl9pc1NvcnRlZCgpP3RoaXMuX3NvcnQuZGlyZWN0aW9uOnRoaXMuc3RhcnR8fHRoaXMuX3NvcnQuc3RhcnR9X2lzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fc29ydC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZH1fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKXtyZXR1cm4gdGhpcy5faXNTb3J0ZWQoKT8iYXNjIj09dGhpcy5fc29ydC5kaXJlY3Rpb24/ImFzY2VuZGluZyI6ImRlc2NlbmRpbmciOiJub25lIn1fcmVuZGVyQXJyb3coKXtyZXR1cm4hdGhpcy5faXNEaXNhYmxlZCgpfHx0aGlzLl9pc1NvcnRlZCgpfV91cGRhdGVTb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fc29ydEJ1dHRvbiYmKHRoaXMuX2FyaWFEZXNjcmliZXI/LnJlbW92ZURlc2NyaXB0aW9uKHRoaXMuX3NvcnRCdXR0b24sdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uKSx0aGlzLl9hcmlhRGVzY3JpYmVyPy5kZXNjcmliZSh0aGlzLl9zb3J0QnV0dG9uLGUpKSx0aGlzLl9zb3J0QWN0aW9uRGVzY3JpcHRpb249ZX1faGFuZGxlU3RhdGVDaGFuZ2VzKCl7dGhpcy5fcmVyZW5kZXJTdWJzY3JpcHRpb249dG4odGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuX3N0YXRlQ2hhbmdlcyx0aGlzLl9pbnRsLmNoYW5nZXMpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2lzU29ydGVkKCkmJih0aGlzLl91cGRhdGVBcnJvd0RpcmVjdGlvbigpLCgiaGludCI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZXx8ImFjdGl2ZSI9PT10aGlzLl92aWV3U3RhdGUudG9TdGF0ZSkmJih0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZTp0aGlzLl9hcnJvd0RpcmVjdGlvbix0b1N0YXRlOiJhY3RpdmUifSksdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEpLCF0aGlzLl9pc1NvcnRlZCgpJiZ0aGlzLl92aWV3U3RhdGUmJiJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUmJih0aGlzLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSExLHRoaXMuX3NldEFuaW1hdGlvblRyYW5zaXRpb25TdGF0ZSh7ZnJvbVN0YXRlOiJhY3RpdmUiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyh2QSksQygkdCksQygkeCw4KSxDKCJNQVRfU09SVF9IRUFERVJfQ09MVU1OX0RFRiIsOCksQyhYciksQyhNZSksQyhMMSw4KSxDKFBuZSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LXNvcnQtaGVhZGVyIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXNvcnQtaGVhZGVyIl0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJkkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVDbGljaygpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NldEluZGljYXRvckhpbnRWaXNpYmxlKCEwKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMSl9KSwyJmUmJihCZSgiYXJpYS1zb3J0IixpLl9nZXRBcmlhU29ydEF0dHJpYnV0ZSgpKSxudCgibWF0LXNvcnQtaGVhZGVyLWRpc2FibGVkIixpLl9pc0Rpc2FibGVkKCkpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGlkOlsibWF0LXNvcnQtaGVhZGVyIiwiaWQiXSxhcnJvd1Bvc2l0aW9uOiJhcnJvd1Bvc2l0aW9uIixzdGFydDoic3RhcnQiLHNvcnRBY3Rpb25EZXNjcmlwdGlvbjoic29ydEFjdGlvbkRlc2NyaXB0aW9uIixkaXNhYmxlQ2xlYXI6ImRpc2FibGVDbGVhciJ9LGV4cG9ydEFzOlsibWF0U29ydEhlYWRlciJdLGZlYXR1cmVzOltLZV0sYXR0cnM6c0hlLG5nQ29udGVudFNlbGVjdG9yczpsSGUsZGVjbHM6NCx2YXJzOjcsY29uc3RzOltbMSwibWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxbMSwibWF0LXNvcnQtaGVhZGVyLWNvbnRlbnQiXSxbImNsYXNzIiwibWF0LXNvcnQtaGVhZGVyLWFycm93Iiw0LCJuZ0lmIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyJdLFsxLCJtYXQtc29ydC1oZWFkZXItc3RlbSJdLFsxLCJtYXQtc29ydC1oZWFkZXItaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLWxlZnQiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHQiXSxbMSwibWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRG4oKSxoKDAsImRpdiIsMCkoMSwiZGl2IiwxKSx6dCgyKSxnKCksUygzLGFIZSw2LDYsImRpdiIsMiksZygpKSwyJmUmJihudCgibWF0LXNvcnQtaGVhZGVyLXNvcnRlZCIsaS5faXNTb3J0ZWQoKSkoIm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUiLCJiZWZvcmUiPT09aS5hcnJvd1Bvc2l0aW9uKSxCZSgidGFiaW5kZXgiLGkuX2lzRGlzYWJsZWQoKT9udWxsOjApKCJyb2xlIixpLl9pc0Rpc2FibGVkKCk/bnVsbDoiYnV0dG9uIiksdigzKSxfKCJuZ0lmIixpLl9yZW5kZXJBcnJvdygpKSl9LGRlcGVuZGVuY2llczpbRmVdLHN0eWxlczpbIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO291dGxpbmU6MH1bbWF0LXNvcnQtaGVhZGVyXS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcixbbWF0LXNvcnQtaGVhZGVyXS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc29ydC1oZWFkZXItY29udGFpbmVye2JvcmRlci1ib3R0b206c29saWQgMXB4IGN1cnJlbnRDb2xvcn0ubWF0LXNvcnQtaGVhZGVyLWRpc2FibGVkIC5tYXQtc29ydC1oZWFkZXItY29udGFpbmVye2N1cnNvcjpkZWZhdWx0fS5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDJweCkgKiAtMSl9Lm1hdC1zb3J0LWhlYWRlci1jb250ZW50e3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmV7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3toZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtvcGFjaXR5OjB9Lm1hdC1zb3J0LWhlYWRlci1hcnJvdyxbZGlyPXJ0bF0gLm1hdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmUgLm1hdC1zb3J0LWhlYWRlci1hcnJvd3ttYXJnaW46MCAwIDAgNnB4fS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgNnB4IDAgMH0ubWF0LXNvcnQtaGVhZGVyLXN0ZW17YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7aGVpZ2h0OjEwcHg7d2lkdGg6MnB4O21hcmdpbjphdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXN0ZW17d2lkdGg6MDtib3JkZXItbGVmdDpzb2xpZCAycHh9Lm1hdC1zb3J0LWhlYWRlci1pbmRpY2F0b3J7d2lkdGg6MTAwJTtoZWlnaHQ6MnB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1taWRkbGV7bWFyZ2luOmF1dG87aGVpZ2h0OjJweDt3aWR0aDoycHg7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0LC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcjt3aWR0aDo2cHg7aGVpZ2h0OjJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0LC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6c29saWQgNnB4O2JvcmRlci10b3A6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0e3RyYW5zZm9ybS1vcmlnaW46cmlnaHQ7bGVmdDowfS5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQ7cmlnaHQ6MH0iXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlttXy5pbmRpY2F0b3IsbV8ubGVmdFBvaW50ZXIsbV8ucmlnaHRQb2ludGVyLG1fLmFycm93T3BhY2l0eSxtXy5hcnJvd1Bvc2l0aW9uLG1fLmFsbG93Q2hpbGRyZW5dfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltwSGVdLGltcG9ydHM6W1BlLGZuXX0pLG59KSgpO2Z1bmN0aW9uIEFWKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Z2V0IHN0aWNreSgpe3JldHVybiB0aGlzLl9zdGlja3l9c2V0IHN0aWNreSh0KXtsZXQgZT10aGlzLl9zdGlja3k7dGhpcy5fc3RpY2t5PVJ0KHQpLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ZSE9PXRoaXMuX3N0aWNreX1oYXNTdGlja3lDaGFuZ2VkKCl7bGV0IHQ9dGhpcy5faGFzU3RpY2t5Q2hhbmdlZDtyZXR1cm4gdGhpcy5faGFzU3RpY2t5Q2hhbmdlZD0hMSx0fXJlc2V0U3RpY2t5Q2hhbmdlZCgpe3RoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fc3RpY2t5PSExLHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITF9fX12YXIgUlY9bmV3IGllKCJDREtfVEFCTEUiKSxGbmU9KG5ldyBpZSgidGV4dC1jb2x1bW4tb3B0aW9ucyIpLEFWKGNsYXNze30pLG5ldyBpZSgiX0NPQUxFU0NFRF9TVFlMRV9TQ0hFRFVMRVIiKSwoKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy50ZW1wbGF0ZT1lLHRoaXMuX2RpZmZlcnM9aX1uZ09uQ2hhbmdlcyhlKXtpZighdGhpcy5fY29sdW1uc0RpZmZlcil7bGV0IGk9ZS5jb2x1bW5zJiZlLmNvbHVtbnMuY3VycmVudFZhbHVlfHxbXTt0aGlzLl9jb2x1bW5zRGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChpKS5jcmVhdGUoKSx0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYoaSl9fWdldENvbHVtbnNEaWZmKCl7cmV0dXJuIHRoaXMuX2NvbHVtbnNEaWZmZXIuZGlmZih0aGlzLmNvbHVtbnMpfWV4dHJhY3RDZWxsVGVtcGxhdGUoZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBObmU/ZS5oZWFkZXJDZWxsLnRlbXBsYXRlOnRoaXMgaW5zdGFuY2VvZiBMbmU/ZS5mb290ZXJDZWxsLnRlbXBsYXRlOmUuY2VsbC50ZW1wbGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhTaSksQyh3bCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLGZlYXR1cmVzOltHdF19KSxufSkoKSksZ0hlPUFWKGNsYXNzIGV4dGVuZHMgRm5le30pLE5uZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ0hle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX3RhYmxlPXJ9bmdPbkNoYW5nZXMoZSl7c3VwZXIubmdPbkNoYW5nZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU2kpLEMod2wpLEMoUlYsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtIZWFkZXJSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsiY2RrSGVhZGVyUm93RGVmIiwiY29sdW1ucyJdLHN0aWNreTpbImNka0hlYWRlclJvd0RlZlN0aWNreSIsInN0aWNreSJdfSxmZWF0dXJlczpbS2UsR3RdfSksbn0pKCksX0hlPUFWKGNsYXNzIGV4dGVuZHMgRm5le30pLExuZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgX0hle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX3RhYmxlPXJ9bmdPbkNoYW5nZXMoZSl7c3VwZXIubmdPbkNoYW5nZXMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoU2kpLEMod2wpLEMoUlYsOCkpfSxuLlx1MDI3NWRpcj13ZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtGb290ZXJSb3dEZWYiLCIiXV0saW5wdXRzOntjb2x1bW5zOlsiY2RrRm9vdGVyUm93RGVmIiwiY29sdW1ucyJdLHN0aWNreTpbImNka0Zvb3RlclJvd0RlZlN0aWNreSIsInN0aWNreSJdfSxmZWF0dXJlczpbS2UsR3RdfSksbn0pKCksQm5lPShuZXcgaWUoIkNES19TUEwiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbTWRdfSksbn0pKCkpLFZuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZm4sQm5lLGZuXX0pLG59KSgpLFBWPWNsYXNzIGV4dGVuZHMgV3Z7Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YS52YWx1ZX1zZXQgZGF0YSh0KXt0PUFycmF5LmlzQXJyYXkodCk/dDpbXSx0aGlzLl9kYXRhLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0KX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMuX2ZpbHRlci52YWx1ZX1zZXQgZmlsdGVyKHQpe3RoaXMuX2ZpbHRlci5uZXh0KHQpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb258fHRoaXMuX2ZpbHRlckRhdGEodGhpcy5kYXRhKX1nZXQgc29ydCgpe3JldHVybiB0aGlzLl9zb3J0fXNldCBzb3J0KHQpe3RoaXMuX3NvcnQ9dCx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgcGFnaW5hdG9yKCl7cmV0dXJuIHRoaXMuX3BhZ2luYXRvcn1zZXQgcGFnaW5hdG9yKHQpe3RoaXMuX3BhZ2luYXRvcj10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWNvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgQWkoW10pLHRoaXMuX2ZpbHRlcj1uZXcgQWkoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IEllLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKHMyKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLGQ9dHlwZW9mIGwsdT10eXBlb2YgYztkIT09dSYmKCJudW1iZXIiPT09ZCYmKGwrPSIiKSwibnVtYmVyIj09PXUmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBBaSh0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl7bGV0IHQ9dGhpcy5fc29ydD90bih0aGlzLl9zb3J0LnNvcnRDaGFuZ2UsdGhpcy5fc29ydC5pbml0aWFsaXplZCk6SHQobnVsbCksZT10aGlzLl9wYWdpbmF0b3I/dG4odGhpcy5fcGFnaW5hdG9yLnBhZ2UsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcyx0aGlzLl9wYWdpbmF0b3IuaW5pdGlhbGl6ZWQpOkh0KG51bGwpLHI9ZG4oW3RoaXMuX2RhdGEsdGhpcy5fZmlsdGVyXSkucGlwZShOKChbYV0pPT50aGlzLl9maWx0ZXJEYXRhKGEpKSksbz1kbihbcix0XSkucGlwZShOKChbYV0pPT50aGlzLl9vcmRlckRhdGEoYSkpKSxzPWRuKFtvLGVdKS5waXBlKE4oKFthXSk9PnRoaXMuX3BhZ2VEYXRhKGEpKSk7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPXMuc3Vic2NyaWJlKGE9PnRoaXMuX3JlbmRlckRhdGEubmV4dChhKSl9X2ZpbHRlckRhdGEodCl7cmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhPW51bGw9PXRoaXMuZmlsdGVyfHwiIj09PXRoaXMuZmlsdGVyP3Q6dC5maWx0ZXIoZT0+dGhpcy5maWx0ZXJQcmVkaWNhdGUoZSx0aGlzLmZpbHRlcikpLHRoaXMucGFnaW5hdG9yJiZ0aGlzLl91cGRhdGVQYWdpbmF0b3IodGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoKSx0aGlzLmZpbHRlcmVkRGF0YX1fb3JkZXJEYXRhKHQpe3JldHVybiB0aGlzLnNvcnQ/dGhpcy5zb3J0RGF0YSh0LnNsaWNlKCksdGhpcy5zb3J0KTp0fV9wYWdlRGF0YSh0KXtpZighdGhpcy5wYWdpbmF0b3IpcmV0dXJuIHQ7bGV0IGU9dGhpcy5wYWdpbmF0b3IucGFnZUluZGV4KnRoaXMucGFnaW5hdG9yLnBhZ2VTaXplO3JldHVybiB0LnNsaWNlKGUsZSt0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSl9X3VwZGF0ZVBhZ2luYXRvcih0KXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57bGV0IGU9dGhpcy5wYWdpbmF0b3I7aWYoZSYmKGUubGVuZ3RoPXQsZS5wYWdlSW5kZXg+MCkpe2xldCBpPU1hdGguY2VpbChlLmxlbmd0aC9lLnBhZ2VTaXplKS0xfHwwLHI9TWF0aC5taW4oZS5wYWdlSW5kZXgsaSk7ciE9PWUucGFnZUluZGV4JiYoZS5wYWdlSW5kZXg9cix0aGlzLl9pbnRlcm5hbFBhZ2VDaGFuZ2VzLm5leHQoKSl9fSl9Y29ubmVjdCgpe3JldHVybiB0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKSx0aGlzLl9yZW5kZXJEYXRhfWRpc2Nvbm5lY3QoKXt0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbH19LHlBPWNsYXNzIGV4dGVuZHMgUFZ7fSx5SGU9WyJmaWx0ZXIiXTtmdW5jdGlvbiB4SGUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIENIZShuLHQpezEmbiYmbGkoMCl9dmFyIE1IZT1mdW5jdGlvbihuKXtyZXR1cm57aXRlbTpufX07ZnVuY3Rpb24gd0hlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLENIZSwxLDAsIm5nLWNvbnRhaW5lciIsMTIpLGt0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7dygpO2xldCBpPWl0KDE0KTt2KDEpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSW4oMixNSGUsZSkpfX1mdW5jdGlvbiBTSGUobix0KXsxJm4mJihoKDAsImRpdiIsMTMpLFAoMSwibWF0LXNwaW5uZXIiLDE0KSxnKCkpfWZ1bmN0aW9uIEVIZShuLHQpezEmbiYmKGgoMCwiZGl2IiwxNSksVCgxLCJObyBSdW5zIiksZygpKX1mdW5jdGlvbiBUSGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsMTUpKDEsInNwYW4iKSxUKDIsJ05vIHJ1bnMgbWF0Y2ggIicpLGgoMywiY29kZSIpLFQoNCksZygpLFQoNSwnIicpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTt2KDQpLGJ0KGUucmVnZXhGaWx0ZXIpfX12YXIgREhlPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBJSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJtYXQtcGFnaW5hdG9yIiwxNiksSSgicGFnZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25QYWdpbmF0aW9uQ2hhbmdlLmVtaXQocikpfSksZygpfWlmKDImbil7bGV0IGU9dygpO18oInBhZ2VTaXplT3B0aW9ucyIsY3UoNCxESGUpKSgicGFnZUluZGV4IixlLnBhZ2luYXRpb25PcHRpb24ucGFnZUluZGV4KSgicGFnZVNpemUiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlU2l6ZSkoImxlbmd0aCIsZS5maWx0ZXJlZEl0ZW1zTGVuZ3RoKX19ZnVuY3Rpb24gQUhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO2goMCwibWF0LWNoZWNrYm94IiwyNiksSSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBYKGUpLFEodygzKS5oYW5kbGVQYWdlVG9nZ2xlKCkpfSksZygpfWlmKDImbil7bGV0IGU9dygzKTtfKCJjaGVja2VkIixlLmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkpKCJpbmRldGVybWluYXRlIiwhZS5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpJiZlLnNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpKX19dmFyIEhuZT1mdW5jdGlvbihuKXtyZXR1cm57dHlwZTpufX07ZnVuY3Rpb24gUkhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyNyksVCgxLCJFeHBlcmltZW50IiksZygpKSwyJm4pe2xldCBlPXcoMyk7XygibWF0LXNvcnQtaGVhZGVyIixJbigxLEhuZSxlLlNvcnRUeXBlLkVYUEVSSU1FTlRfTkFNRSkpfX1mdW5jdGlvbiBQSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDI3KSxUKDEsIlJ1biIpLGcoKSksMiZuKXtsZXQgZT13KDMpO18oIm1hdC1zb3J0LWhlYWRlciIsSW4oMSxIbmUsZS5Tb3J0VHlwZS5SVU5fTkFNRSkpfX1mdW5jdGlvbiBPSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iKSxQKDEsInJ1bnMtZ3JvdXAtbWVudS1idXR0b24iLDI4KSxnKCkpLDImbil7bGV0IGU9dygzKTt2KDEpLF8oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcyl9fXZhciB6bmU9ZnVuY3Rpb24obil7cmV0dXJuWyJjb2x1bW4iLG5dfTtmdW5jdGlvbiBrSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDIxKSxPdCgxLDIyKSxTKDIsQUhlLDEsMiwibWF0LWNoZWNrYm94IiwyMyksUygzLFJIZSwyLDMsInNwYW4iLDI0KSxTKDQsUEhlLDIsMywic3BhbiIsMjQpLFMoNSxPSGUsMiwxLCJzcGFuIiwyNSksa3QoKSxnKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT13KDIpO18oIm5nQ2xhc3MiLEluKDYsem5lLCJ0Yi1jb2x1bW4tIitlKSksdigxKSxfKCJuZ1N3aXRjaCIsZSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uRVhQRVJJTUVOVF9OQU1FKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX05BTUUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBGSGUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7T3QoMCksaCgxLCJkaXYiLDM3KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDIsInRiLXJhbmdlLWlucHV0IiwzOCksSSgicmFuZ2VWYWx1ZXNDaGFuZ2VkIixmdW5jdGlvbihyKXtYKGUpO2xldCBvPXcoMikuJGltcGxpY2l0O3JldHVybiBRKHcoMikuaGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKG8scikpfSksZygpKCksa3QoKX1pZigyJm4pe2xldCBlPXcoMikuJGltcGxpY2l0O3YoMiksXygibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fWZ1bmN0aW9uIE5IZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsNDApLEkoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGgoMSwibWF0LWNoZWNrYm94IiwzNiksSSgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPVgoZSkuJGltcGxpY2l0LHM9dygzKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVIcGFyYW1EaXNjcmV0ZUNoYW5nZWQocyxvKSl9KSxoKDIsInNwYW4iKSxUKDMpLGcoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMykuJGltcGxpY2l0O3YoMSksXygiY2hlY2tlZCIsaS5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpKSx2KDIpLGJ0KGUpfX1mdW5jdGlvbiBMSGUobix0KXtpZigxJm4mJihPdCgwKSxTKDEsTkhlLDQsMiwiZGl2IiwzOSksa3QoKSksMiZuKXtsZXQgZT13KDIpLiRpbXBsaWNpdDt2KDEpLF8oIm5nRm9yT2YiLGUuZmlsdGVyLnBvc3NpYmxlVmFsdWVzKX19ZnVuY3Rpb24gQkhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiYnV0dG9uIiwzMiksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksUCgyLCJtYXQtaWNvbiIsMzMpLGcoKSxoKDMsIm1hdC1tZW51IixudWxsLDM0KSg1LCJkaXYiLDM1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDYsIm1hdC1jaGVja2JveCIsMzYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVIcGFyYW1JbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZChyKSl9KSxoKDcsInNwYW4iKSxUKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLGcoKSgpKCksUyg5LEZIZSwzLDQsIm5nLWNvbnRhaW5lciIsMzEpLFMoMTAsTEhlLDIsMSwibmctY29udGFpbmVyIiwzMSksZygpLGt0KCl9aWYoMiZuKXtsZXQgZT1pdCg0KSxpPXcoKS4kaW1wbGljaXQscj13KDIpO3YoMSksXygibWF0TWVudVRyaWdnZXJGb3IiLGUpLEJlKCJhcmlhLWxhYmVsIiwiRmlsdGVyIGhwYXJhbSAiKyhpLmRpc3BsYXlOYW1lfHxpLm5hbWUpKSx2KDUpLF8oImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLHYoMyksXygibmdJZiIsaS5maWx0ZXIudHlwZT09PXIuRG9tYWluVHlwZS5JTlRFUlZBTCksdigxKSxfKCJuZ0lmIixpLmZpbHRlci50eXBlPT09ci5Eb21haW5UeXBlLkRJU0NSRVRFKX19dmFyIFZIZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sbmFtZTp0fX07ZnVuY3Rpb24gSEhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyOSkoMSwic3BhbiIsMzApLFQoMiksZygpLFMoMyxCSGUsMTEsNSwibmctY29udGFpbmVyIiwzMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtfKCJtYXQtc29ydC1oZWFkZXIiLHFyKDMsVkhlLGkuU29ydFR5cGUuSFBBUkFNLGUubmFtZSkpLHYoMiksYnQoZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSx2KDEpLF8oIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gekhlKG4sdCl7aWYoMSZuKXtsZXQgZT1nZSgpO090KDApLGgoMSwiYnV0dG9uIiwzMiksSSgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksUCgyLCJtYXQtaWNvbiIsMzMpLGcoKSxoKDMsIm1hdC1tZW51IixudWxsLDM0KSg1LCJkaXYiLDM1KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDYsIm1hdC1jaGVja2JveCIsMzYpLEkoImNoYW5nZSIsZnVuY3Rpb24oKXtYKGUpO2xldCByPXcoKS4kaW1wbGljaXQ7cmV0dXJuIFEodygyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChyKSl9KSxoKDcsInNwYW4iKSxUKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLGcoKSgpKCksaCg5LCJkaXYiLDM3KSxJKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxoKDEwLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLEkoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KCkuJGltcGxpY2l0O3JldHVybiBRKHcoMikuaGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChvLHIpKX0pLGcoKSgpKCksa3QoKX1pZigyJm4pe2xldCBlPWl0KDQpLGk9dygpLiRpbXBsaWNpdDt2KDEpLF8oIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSxCZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBtZXRyaWMgIisoaS5kaXNwbGF5TmFtZXx8aS50YWcpKSx2KDUpLF8oImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLHYoNCksXygibWluIixpLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsaS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixpLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsaS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBVSGU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLHRhZzp0fX07ZnVuY3Rpb24gakhlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwyOSkoMSwic3BhbiIsMzApLFQoMiksZygpLFMoMyx6SGUsMTEsNywibmctY29udGFpbmVyIiwzMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygyKTtfKCJtYXQtc29ydC1oZWFkZXIiLHFyKDMsVUhlLGkuU29ydFR5cGUuTUVUUklDLGUudGFnKSksdigyKSxidChlLmRpc3BsYXlOYW1lfHxlLnRhZyksdigxKSxfKCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIEdIZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsImRpdiIsMTcpKDEsImRpdiIsMTgpLEkoIm1hdFNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLmhhbmRsZVNvcnRDaGFuZ2UocikpfSksUygyLGtIZSw2LDgsInNwYW4iLDE5KSxTKDMsSEhlLDQsNiwic3BhbiIsMjApLFMoNCxqSGUsNCw2LCJzcGFuIiwyMCksZygpKCl9aWYoMiZuKXtsZXQgZT13KCk7digxKSxfKCJtYXRTb3J0QWN0aXZlIixlLnNvcnRPcHRpb24uY29sdW1uKSx2KDEpLF8oIm5nRm9yT2YiLGUuY29sdW1ucyksdigxKSxfKCJuZ0Zvck9mIixlLmhwYXJhbUNvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeUhwYXJhbUNvbHVtbiksdigxKSxfKCJuZ0Zvck9mIixlLm1ldHJpY0NvbHVtbnMpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ldHJpY0NvbHVtbil9fWZ1bmN0aW9uIFdIZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iKSgxLCJtYXQtY2hlY2tib3giLDQ3KSxJKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7WChlKTtsZXQgcj13KDIpLml0ZW07cmV0dXJuIFEodygpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQocikpfSkoImRibGNsaWNrIixmdW5jdGlvbigpe1goZSk7bGV0IHI9dygyKS5pdGVtO3JldHVybiBRKHcoKS5vblNlbGVjdGlvbkRibENsaWNrLmVtaXQoci5ydW4uaWQpKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKS5pdGVtO3YoMSksXygiY2hlY2tlZCIsZS5zZWxlY3RlZCl9fWZ1bmN0aW9uIHFIZShuLHQpe2lmKDEmbiYmUCgwLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0OCksMiZuKXtsZXQgZT13KDIpLml0ZW07XygiYWxpYXMiLGUuZXhwZXJpbWVudEFsaWFzKSgidGl0bGUiLGUuZXhwZXJpbWVudE5hbWUpfX1mdW5jdGlvbiBZSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDMwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT13KDIpLml0ZW07digxKSxidChlLnJ1bi5uYW1lKX19dmFyIFhIZT1mdW5jdGlvbihuKXtyZXR1cm57InJ1bi1jb2xvci1zd2F0Y2giOiEwLCJuby1jb2xvciI6bn19O2Z1bmN0aW9uIFFIZShuLHQpe2lmKDEmbil7bGV0IGU9Z2UoKTtoKDAsInNwYW4iKSgxLCJidXR0b24iLDQ5KSxJKCJjb2xvclBpY2tlckNoYW5nZSIsZnVuY3Rpb24ocil7WChlKTtsZXQgbz13KDIpLml0ZW07cmV0dXJuIFEodygpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6cn0pKX0pLGcoKSgpfWlmKDImbil7bGV0IGU9dygyKS5pdGVtO3YoMSksVHQoImJhY2tncm91bmQiLGUucnVuQ29sb3IpLF8oIm5nQ2xhc3MiLEluKDgsWEhlLCFlLnJ1bkNvbG9yKSkoImNvbG9yUGlja2VyIixlLnJ1bkNvbG9yKSgiY3BEaWFsb2dEaXNwbGF5IiwicG9wdXAiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBaSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDQ0KSxPdCgxLDIyKSxTKDIsV0hlLDIsMSwic3BhbiIsMjUpLFMoMyxxSGUsMSwyLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0NSksUyg0LFlIZSwyLDEsInNwYW4iLDQ2KSxTKDUsUUhlLDIsMTAsInNwYW4iLDI1KSxrdCgpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoMik7XygibmdDbGFzcyIsSW4oNix6bmUsInRiLWNvbHVtbi0iK2UpKSx2KDEpLF8oIm5nU3dpdGNoIixlKSx2KDEpLF8oIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHYoMSksXygibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIEtIZShuLHQpe2lmKDEmbiYmKGgoMCwic3BhbiIsNTApLFQoMSksZygpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dygpLml0ZW07digxKSxidChpLmhwYXJhbXMuZ2V0KGUubmFtZSkpfX1mdW5jdGlvbiBKSGUobix0KXtpZigxJm4mJihoKDAsInNwYW4iLDUwKSxUKDEpLGcoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXcoKS5pdGVtO3YoMSksYnQoaS5tZXRyaWNzLmdldChlLnRhZykpfX1mdW5jdGlvbiAkSGUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNDEpLFMoMSxaSGUsNiw4LCJzcGFuIiw0MiksUygyLEtIZSwyLDEsInNwYW4iLDQzKSxTKDMsSkhlLDIsMSwic3BhbiIsNDMpLGcoKSksMiZuKXtsZXQgZT10Lml0ZW0saT13KCk7QmUoImRhdGEtaWQiLGUucnVuLmlkKSx2KDEpLF8oIm5nRm9yT2YiLGkuY29sdW1ucyksdigxKSxfKCJuZ0Zvck9mIixpLmhwYXJhbUNvbHVtbnMpLHYoMSksXygibmdGb3JPZiIsaS5tZXRyaWNDb2x1bW5zKX19dmFyIGU1ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQ217Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9IlNob3cgcnVuczoifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PVhuKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj11ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRhdGFTb3VyY2U9bmV3IHlBLHRoaXMuRG9tYWluVHlwZT1nbix0aGlzLlJ1bnNUYWJsZUNvbHVtbj1icyx0aGlzLlNvcnRUeXBlPUljLHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRix0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBGLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRix0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgRix0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgRix0aGlzLm9uU29ydENoYW5nZT1uZXcgRix0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IEYsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRix0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkPW5ldyBGLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBGfW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQoZSl7cmV0dXJuYGg6JHtlLm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZChlKXtyZXR1cm5gbToke2UudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoZT0+ZS5zZWxlY3RlZCl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlUGFnZVRvZ2dsZSgpe3RoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlLmVtaXQoe2l0ZW1zOnRoaXMucGFnZUl0ZW1zfSl9aGFuZGxlU29ydENoYW5nZShlKXtsZXQgaTtzd2l0Y2goZS5kaXJlY3Rpb24pe2Nhc2UiYXNjIjppPVlhLkFTQzticmVhaztjYXNlImRlc2MiOmk9WWEuREVTQzticmVhaztkZWZhdWx0Omk9WWEuVU5TRVR9dGhpcy5vblNvcnRDaGFuZ2UuZW1pdCh7a2V5OmUuYWN0aXZlLGRpcmVjdGlvbjppfSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dGFibGVUcmFja0J5KGUsaSl7cmV0dXJuIGkucnVuLmlkfWhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKGUpe2xldHtuYW1lOmksZmlsdGVyOnJ9PWU7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3IudHlwZT09PWduLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6ci5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO2lmKG8udHlwZSE9PWduLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGV4cGVjdGVkIGRpc2NyZXRlIGRvbWFpbiBmb3IgJHtyfWApO2xldCBzPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7cy5oYXMoaSk/cy5kZWxldGUoaSk6cy5hZGQoaSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5zXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKGUpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOiFlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKGUsaSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6ZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4oZSl7cmV0dXJuIGUubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKGUpe3JldHVybiBlLnRhZ319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy10YWJsZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UoeUhlLDcsTWUpLEdlKGJBLDcpLEdlKCR4LDcpKSwyJmUpe2xldCByO1NlKHI9RWUoKSkmJihpLmZpbHRlcj1yLmZpcnN0KSxTZShyPUVlKCkpJiYoaS5wYWdpbmF0b3I9ci5maXJzdCksU2Uocj1FZSgpKSYmKGkuc29ydD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dFeHBlcmltZW50TmFtZToic2hvd0V4cGVyaW1lbnROYW1lIixjb2x1bW5zOiJjb2x1bW5zIixocGFyYW1Db2x1bW5zOiJocGFyYW1Db2x1bW5zIixtZXRyaWNDb2x1bW5zOiJtZXRyaWNDb2x1bW5zIixhbGxJdGVtc0xlbmd0aDoiYWxsSXRlbXNMZW5ndGgiLGZpbHRlcmVkSXRlbXNMZW5ndGg6ImZpbHRlcmVkSXRlbXNMZW5ndGgiLHVzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIscGFnZUl0ZW1zOiJwYWdlSXRlbXMiLGxvYWRpbmc6ImxvYWRpbmciLG51bVNlbGVjdGVkSXRlbXM6Im51bVNlbGVjdGVkSXRlbXMiLHNvcnRPcHRpb246InNvcnRPcHRpb24iLHBhZ2luYXRpb25PcHRpb246InBhZ2luYXRpb25PcHRpb24iLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJDaGFuZ2UiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25TZWxlY3Rpb25EYmxDbGljazoib25TZWxlY3Rpb25EYmxDbGljayIsb25QYWdlU2VsZWN0aW9uVG9nZ2xlOiJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLG9uUGFnaW5hdGlvbkNoYW5nZToib25QYWdpbmF0aW9uQ2hhbmdlIixvblNvcnRDaGFuZ2U6Im9uU29ydENoYW5nZSIsb25SdW5Db2xvckNoYW5nZToib25SdW5Db2xvckNoYW5nZSIsb25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDoib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIn0sZmVhdHVyZXM6W1F0KFt7cHJvdmlkZTpDbSx1c2VDbGFzczplNWV9XSksR3RdLGRlY2xzOjE1LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJyb2xlIiwidGFibGUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJyb3dzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJsb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXJ1bnMiLDQsIm5nSWYiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiLDQsIm5nSWYiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJoZWFkZXIiXSxbIm1hdFNvcnQiLCIiLCJyb2xlIiwicm93IiwzLCJtYXRTb3J0QWN0aXZlIiwibWF0U29ydENoYW5nZSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbMywiYWxpYXMiLCJ0aXRsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm5hbWUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsidGl0bGUiLCJDbGljayB0byB0b2dnbGUgcnVuIHNlbGVjdGlvbiBvciBkb3VibGUgY2xpY2sgdG8gc2VsZWN0IG9ubHkgdGhpcyBydW4uIiwzLCJjaGVja2VkIiwiY2hhbmdlIiwiZGJsY2xpY2siXSxbMywiYWxpYXMiLCJ0aXRsZSJdLFszLCJuZ0NsYXNzIiwiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbInJvbGUiLCJjZWxsIiwxLCJjb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihoKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxJKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLGcoKSgpLGgoMiwiZGl2IiwyKSgzLCJkaXYiLDMpLFMoNCx4SGUsMSwwLCJuZy1jb250YWluZXIiLDQpLGgoNSwiZGl2Iiw1KSxTKDYsd0hlLDIsNCwibmctY29udGFpbmVyIiw2KSxnKCkoKSxTKDcsU0hlLDIsMCwiZGl2Iiw3KSxTKDgsRUhlLDIsMCwiZGl2Iiw4KSxTKDksVEhlLDYsMSwiZGl2Iiw4KSxnKCksUygxMCxJSGUsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxTKDExLEdIZSw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLFd0KSxTKDEzLCRIZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLFd0KSksMiZlKXtsZXQgcj1pdCgxMik7digxKSxXaSgidmFsdWUiLGkucmVnZXhGaWx0ZXIpLHYoMyksXygibmdUZW1wbGF0ZU91dGxldCIsciksdigyKSxfKCJuZ0Zvck9mIixpLnBhZ2VJdGVtcykoIm5nRm9yVHJhY2tCeSIsaS50YWJsZVRyYWNrQnkpLHYoMSksXygibmdJZiIsaS5sb2FkaW5nKSx2KDEpLF8oIm5nSWYiLCFpLmxvYWRpbmcmJjA9PT1pLmFsbEl0ZW1zTGVuZ3RoKSx2KDEpLF8oIm5nSWYiLCFpLmxvYWRpbmcmJmkuYWxsSXRlbXNMZW5ndGg+MCYmMD09PWkuZmlsdGVyZWRJdGVtc0xlbmd0aCksdigxKSxfKCJuZ0lmIixpLnVzZVBhZ2luYXRpb24pfX0sZGVwZW5kZW5jaWVzOltnQSx5bixubixGZSxMcixzcixTcixRdSxTcCwkaSxoYSxFbixOYyxqbCxMYyxiQSx0bCwkeCxPbmUsZEEsX0FdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBuNWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJydW5zLXRhYmxlLWNvbXBvbmVudCIsMiksSSgib25TZWxlY3Rpb25Ub2dnbGUiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uUnVuSXRlbVNlbGVjdGlvblRvZ2dsZShyKSl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25EYmxDbGljayhyKSl9KSgib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblBhZ2VTZWxlY3Rpb25Ub2dnbGUocikpfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25QYWdpbmF0aW9uQ2hhbmdlKHIpKX0pKCJvblJlZ2V4RmlsdGVyQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vblJlZ2V4RmlsdGVyQ2hhbmdlKHIpKX0pKCJvblNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uU29ydENoYW5nZShyKSl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5Db2xvckNoYW5nZShyKSl9KSgib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKHIpKX0pKCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQocikpfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKHIpKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksZygpfWlmKDImbil7bGV0IGU9dygpO18oImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcykoInVzZUZsZXhpYmxlTGF5b3V0IixlLnVzZUZsZXhpYmxlTGF5b3V0KSgibnVtU2VsZWN0ZWRJdGVtcyIsVygxLDE1LGUubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsZS5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsVygyLDE3LGUuaHBhcmFtQ29sdW1ucyQpKSgibWV0cmljQ29sdW1ucyIsVygzLDE5LGUubWV0cmljQ29sdW1ucyQpKSgic2hvd0V4cGVyaW1lbnROYW1lIixlLmlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkpKCJwYWdlSXRlbXMiLFcoNCwyMSxlLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsVyg1LDIzLGUuZmlsdGVyZWRJdGVtc0xlbmd0aCQpKSgiYWxsSXRlbXNMZW5ndGgiLFcoNiwyNSxlLmFsbEl0ZW1zTGVuZ3RoJCkpKCJsb2FkaW5nIixXKDcsMjcsZS5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixXKDgsMjksZS5wYWdpbmF0aW9uT3B0aW9uJCkpKCJyZWdleEZpbHRlciIsVyg5LDMxLGUucmVnZXhGaWx0ZXIkKSkoInNvcnRPcHRpb24iLFcoMTAsMzMsZS5zb3J0T3B0aW9uJCkpKCJ1c2VQYWdpbmF0aW9uIixlLnVzZVBhZ2luYXRpb24pfX1mdW5jdGlvbiBpNWUobix0KXtpZigxJm4pe2xldCBlPWdlKCk7aCgwLCJydW5zLWRhdGEtdGFibGUiLDMpLEkoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnNvcnREYXRhQnkocikpfSkoIm9yZGVyQ29sdW1ucyIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub3JkZXJDb2x1bW5zKHIpKX0pKCJvblNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25Ub2dnbGUocikpfSkoIm9uQWxsU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5vbkFsbFNlbGVjdGlvblRvZ2dsZShyKSl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5Db2xvckNoYW5nZShyKSl9KSgib25SZWdleEZpbHRlckNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SZWdleEZpbHRlckNoYW5nZShyKSl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkub25SdW5TZWxlY3Rpb25EYmxDbGljayhyKSl9KSgidG9nZ2xlRnVsbFNjcmVlbiIsZnVuY3Rpb24oKXtyZXR1cm4gWChlKSxRKHcoKS50b2dnbGVGdWxsU2NyZWVuKCkpfSkoImFkZENvbHVtbiIsZnVuY3Rpb24ocil7cmV0dXJuIFgoZSksUSh3KCkuYWRkQ29sdW1uKHIpKX0pKCJyZW1vdmVDb2x1bW4iLGZ1bmN0aW9uKHIpe3JldHVybiBYKGUpLFEodygpLnJlbW92ZUNvbHVtbihyKSl9KSgiYWRkRmlsdGVyIixmdW5jdGlvbihyKXtyZXR1cm4gWChlKSxRKHcoKS5hZGRIcGFyYW1GaWx0ZXIocikpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxnKCl9aWYoMiZuKXtsZXQgZT13KCk7XygiaGVhZGVycyIsVygxLDksZS5ydW5zQ29sdW1ucyQpKSgiZGF0YSIsVygyLDExLGUuc29ydGVkUnVuc1RhYmxlRGF0YSQpKSgic2VsZWN0YWJsZUNvbHVtbnMiLFcoMywxMyxlLnNlbGVjdGFibGVDb2x1bW5zJCkpKCJjb2x1bW5GaWx0ZXJzIixXKDQsMTUsZS5jb2x1bW5GaWx0ZXJzJCkpKCJzb3J0aW5nSW5mbyIsVyg1LDE3LGUuc29ydGluZ0luZm8kKSkoImV4cGVyaW1lbnRJZHMiLGUuZXhwZXJpbWVudElkcykoInJlZ2V4RmlsdGVyIixXKDYsMTksZS5yZWdleEZpbHRlciQpKSgiaXNGdWxsU2NyZWVuIixXKDcsMjEsZS5ydW5zVGFibGVGdWxsU2NyZWVuJCkpKCJsb2FkaW5nIixXKDgsMjMsZS5sb2FkaW5nJCkpfX12YXIgcjVlPXEoRXYsbj0+bi5zdGF0ZT09PVRlLkxPQURJTkcpO2Z1bmN0aW9uIGpuZShuLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgSWMuRVhQRVJJTUVOVF9OQU1FOnJldHVybltuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5uYW1lLG4ucnVuLmlkXTtjYXNlIEljLlJVTl9OQU1FOnJldHVybltuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtjYXNlIEljLkhQQVJBTTpyZXR1cm5bbi5ocGFyYW1zLmdldCh0Lm5hbWUpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgSWMuTUVUUklDOnJldHVybltuLm1ldHJpY3MuZ2V0KHQudGFnKSxuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHt0fWApfX1mdW5jdGlvbiBHbmUobix0KXtyZXR1cm4gdm9pZCAwPT09dD9uLmluY2x1ZGVVbmRlZmluZWQ6bi50eXBlPT09Z24uRElTQ1JFVEU/bi5maWx0ZXJWYWx1ZXMuaW5jbHVkZXModCk6bi50eXBlPT09Z24uSU5URVJWQUwmJm4uZmlsdGVyTG93ZXJWYWx1ZTw9dCYmdDw9bi5maWx0ZXJVcHBlclZhbHVlfXZhciBXbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zb3J0ZWRSdW5zVGFibGVEYXRhJD1IdChbXSksdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuc29ydGluZ0luZm8kPXRoaXMuc3RvcmUuc2VsZWN0KFdXKSx0aGlzLmhwYXJhbUNvbHVtbnMkPUh0KFtdKSx0aGlzLm1ldHJpY0NvbHVtbnMkPUh0KFtdKSx0aGlzLnVzZUZsZXhpYmxlTGF5b3V0PSExLHRoaXMudXNlUGFnaW5hdGlvbj0hMSx0aGlzLmNvbHVtbnM9W2JzLlJVTl9OQU1FXSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz0hMSx0aGlzLmZvcmNlTGVnYWN5VGFibGU9ITEsdGhpcy5zb3J0T3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChlMiksdGhpcy5wYWdpbmF0aW9uT3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdCgkRiksdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLHRoaXMuaHBhcmFtc0VuYWJsZWQ9bmV3IEFpKCExKSx0aGlzLnJ1bnNDb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChHVyksdGhpcy5ydW5zVGFibGVGdWxsU2NyZWVuJD10aGlzLnN0b3JlLnNlbGVjdChMaCksdGhpcy5zZWxlY3RhYmxlQ29sdW1ucyQ9dGhpcy5zdG9yZS5zZWxlY3Qoa04pLnBpcGUoTGkodGhpcy5ydW5zQ29sdW1ucyQpLE4oKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoci5tYXAoKHtuYW1lOnN9KT0+cykpO3JldHVybiBpLmZpbHRlcihzPT4hby5oYXMocy5uYW1lKSl9KSksdGhpcy5jb2x1bW5GaWx0ZXJzJD10aGlzLnN0b3JlLnNlbGVjdChNUSksdGhpcy5hbGxSdW5zVGFibGVEYXRhJD10aGlzLnN0b3JlLnNlbGVjdChPTikucGlwZShOKGk9PmkubWFwKHI9Pih7Li4uT2JqZWN0LmZyb21FbnRyaWVzKHIuaHBhcmFtcy5lbnRyaWVzKCkpLGlkOnIucnVuLmlkLHJ1bjpyLnJ1bi5uYW1lLGV4cGVyaW1lbnRBbGlhczpyLmV4cGVyaW1lbnRBbGlhcyxzZWxlY3RlZDpyLnNlbGVjdGVkLGNvbG9yOnIucnVuQ29sb3J9KSkpKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IEllfWlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5zb21lKGU9PmU9PT1icy5FWFBFUklNRU5UX05BTUUpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5zZWxlY3QobWQpLnN1YnNjcmliZShzPT57dGhpcy5ocGFyYW1zRW5hYmxlZC5uZXh0KHMpfSk7bGV0IGU9dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLmdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KHMpKTt0aGlzLnNvcnRlZFJ1bnNUYWJsZURhdGEkPWRuKFt0aGlzLmFsbFJ1bnNUYWJsZURhdGEkLHRoaXMuc29ydGluZ0luZm8kXSkucGlwZShOKChbcyxhXSk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9Wy4uLm5dO3JldHVybiBlLnNvcnQoKHIsbyk9PntsZXQgcz1yW3QubmFtZV0sYT1vW3QubmFtZV07aWYoImV4cGVyaW1lbnRBbGlhcyI9PT10Lm5hbWUmJihzPXMuYWxpYXNOdW1iZXIsYT1hLmFsaWFzTnVtYmVyKSxzPT09YSlyZXR1cm4gMDtpZih2b2lkIDA9PT1zfHx2b2lkIDA9PT1hKXJldHVybiBpKHMsYSk7aWYobW5lLmhhcyh0eXBlb2YgcykmJm1uZS5oYXModHlwZW9mIGEpKXtsZXQgbD1obmUocyksYz1obmUoYSk7aWYoKHZvaWQgMD09PWx8fHZvaWQgMD09PWMpJiZsIT09YylyZXR1cm4gaShsLGMse2luc2VydFVuZGVmaW5lZDpFcC5CRUZPUkV9KTtpZih2b2lkIDAhPT1sJiZ2b2lkIDAhPT1jKXJldHVybiBsPT09Yz9pKHMudG9TdHJpbmcoKS5zbGljZShsLnRvU3RyaW5nKCkubGVuZ3RoKXx8dm9pZCAwLGEudG9TdHJpbmcoKS5zbGljZShjLnRvU3RyaW5nKCkubGVuZ3RoKXx8dm9pZCAwLHtpbnNlcnRVbmRlZmluZWQ6RXAuQkVGT1JFfSk6aShsLGMpfXJldHVybiBpKHMsYSl9KSxlO2Z1bmN0aW9uIGkocixvLHtpbnNlcnRVbmRlZmluZWQ6c309bVZlKXtyZXR1cm4gcj09PW8/MDp2b2lkIDA9PT1yP3M9PT1FcC5BRlRFUj8xOi0xOnZvaWQgMD09PW8/cz09PUVwLkFGVEVSPy0xOjE6cjxvPT0odC5vcmRlcj09PWlvLkFTQ0VORElORyk/LTE6MX19KHMsYSkpKTtsZXQgaT1kbihlKS5waXBlKE4ocz0+W10uY29uY2F0KC4uLnMpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPWkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE1zKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShOKHM9PnMubGVuZ3RoKSk7bGV0IHI9dGhpcy5nZXRGaWx0ZXJlZEl0ZW1zJCh0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxNcygxKSk7dGhpcy5maWx0ZXJlZEl0ZW1zTGVuZ3RoJD1yLnBpcGUoTihzPT5zLmxlbmd0aCkpLHRoaXMucGFnZUl0ZW1zJD10aGlzLnNvcnRlZEFuZFNsaWNlZEl0ZW1zJChyKSx0aGlzLm51bVNlbGVjdGVkSXRlbXMkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKE4ocz0+cy5yZWR1Y2UoKGEsbCk9PmErTnVtYmVyKGwuc2VsZWN0ZWQpLDApKSk7bGV0IG89dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLnN0b3JlLnNlbGVjdChyNWUse2V4cGVyaW1lbnRJZDpzfSkpO2lmKHRoaXMubG9hZGluZyQ9ZG4obykucGlwZShOKHM9PnMuc29tZShhPT5hKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtsZXQgcz10aGlzLnN0b3JlLnNlbGVjdChUdS5nZXRFeHBlcmltZW50c0hwYXJhbXNBbmRNZXRyaWNzU3BlY3Mse2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSk7dGhpcy5ocGFyYW1Db2x1bW5zJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoVHUuZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoTigoW2Ese2hwYXJhbXM6bH1dKT0+bC5tYXAoKHtuYW1lOmMsZGlzcGxheU5hbWU6ZH0pPT57bGV0IHA9YS5nZXQoYyk7aWYoIXApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBocGFyYW0gZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOmQsbmFtZTpjLGZpbHRlcjpwfX0pKSksdGhpcy5tZXRyaWNDb2x1bW5zJD1kbihbdGhpcy5zdG9yZS5zZWxlY3QoVHUuZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoTigoW2Ese21ldHJpY3M6bH1dKT0+bC5tYXAoKHt0YWc6YyxkaXNwbGF5TmFtZTpkfSk9PntsZXQgdT1hLmdldChjKTtpZighdSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIG1ldHJpYyBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6ZCx0YWc6YyxmaWx0ZXI6dX19KSkpfXRoaXMuY29sdW1ucy5pbmNsdWRlcyhicy5DSEVDS0JPWCkmJnRoaXMuc3RvcmUuc2VsZWN0KE5vKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksWW4oKGEsbCk9PkZvKGEsbCkpLEpuKCgpPT5pLnBpcGUoa2UoYT0+YS5sZW5ndGg+NTAwKSxZdCgxKSkpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEpoKHtsb2NhbGl6ZWRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIHJ1bnMgZXhjZWVkcyA1MDAuIE5ldyBydW5zIGFyZSB1bnNlbGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiJ9KSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKFZoKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQoZSl7cmV0dXJuIGRuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KHZkKV0pLnBpcGUoTigoW2kscl0pPT57aWYoIXIpcmV0dXJuIGk7bGV0IG89dGhpcy5jb2x1bW5zLmluY2x1ZGVzKGJzLkVYUEVSSU1FTlRfTkFNRSk7cmV0dXJuIGkuZmlsdGVyKHM9PlFoKHtydW5OYW1lOnMucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOnMuZXhwZXJpbWVudEFsaWFzfSxyLG8pKX0pLEpuKGk9PnRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzP2RuKHRoaXMuc3RvcmUuc2VsZWN0KFR1LmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KFR1LmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpKS5waXBlKE4oKFtyLG9dKT0+aS5maWx0ZXIoKHtocGFyYW1zOnMsbWV0cmljczphfSk9PlsuLi5yLmVudHJpZXMoKV0uZXZlcnkoKFtjLGRdKT0+R25lKGQscy5nZXQoYykpKSYmWy4uLm8uZW50cmllcygpXS5ldmVyeSgoW2MsZF0pPT5HbmUoZCxhLmdldChjKSkpKSkpOkh0KGkpKSl9c29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpe2xldCBpPWRuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KGUyKV0pLnBpcGUoTigoW28sc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPXQua2V5LGk9Wy4uLm5dO3JldHVybiBudWxsPT09ZXx8dC5kaXJlY3Rpb249PT1ZYS5VTlNFVHx8aS5zb3J0KChyLG8pPT57bGV0IHM9am5lKHIsZSksYT1qbmUobyxlKTtpZihzLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGdpdmVuIHNvcnQgc2hvdWxkIHJlc3VsdCBpbiBzYW1lIG51bWJlciBvZiBpdGVtczogJHt0fWApO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdLGQ9YVtsXTtpZihjIT09ZCl7aWYodm9pZCAwPT09Y3x8dm9pZCAwPT09ZClyZXR1cm4gdm9pZCAwPT09ZD8tMToxO2lmKHR5cGVvZiBjIT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21wYXJlIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXM6ICR7dHlwZW9mIGN9IHZzLiAke3R5cGVvZiBkfWApO3JldHVybiBjPGQ9PSh0LmRpcmVjdGlvbj09PVlhLkFTQyk/LTE6MX19cmV0dXJuIDB9KSxpfShvLHMpKSk7cmV0dXJuIGRuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KCRGKV0pLnBpcGUoTigoW28sc10pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gby5zbGljZSgpO2xldHtwYWdlU2l6ZTphLHBhZ2VJbmRleDpsfT1zO3JldHVybiBvLnNsaWNlKGwqYSwobCsxKSphKX0pLHFuKFtdKSl9c29ydERhdGFCeShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEFTKHtzb3J0aW5nSW5mbzplfSkpfWdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KGUpe3JldHVybiBkbihbdGhpcy5zdG9yZS5zZWxlY3QoRHUse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoQlMse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoSXUpLHRoaXMuc3RvcmUuc2VsZWN0KEF1KSx0aGlzLnN0b3JlLnNlbGVjdCh6YSldKS5waXBlKE4oKFtpLHIsbyxzLGFdKT0+aS5tYXAobD0+e2xldCBjPW5ldyBNYXA7KGwuaHBhcmFtc3x8W10pLmZvckVhY2godT0+e2Muc2V0KHUubmFtZSx1LnZhbHVlKX0pO2xldCBkPW5ldyBNYXA7cmV0dXJuKGwubWV0cmljc3x8W10pLmZvckVhY2godT0+e2Quc2V0KHUudGFnLHUudmFsdWUpfSkse3J1bjpsLGV4cGVyaW1lbnROYW1lOnI/Lm5hbWV8fCIiLGV4cGVyaW1lbnRBbGlhczphW2VdLHNlbGVjdGVkOkJvb2xlYW4obyYmby5nZXQobC5pZCkpLHJ1bkNvbG9yOnNbbC5pZF0saHBhcmFtczpjLG1ldHJpY3M6ZH19KSkpfW9uUnVuSXRlbVNlbGVjdGlvblRvZ2dsZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGN2KHtydW5JZDplLnJ1bi5pZH0pKX1vblJ1blNlbGVjdGlvblRvZ2dsZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGN2KHtydW5JZDplfSkpfW9uUnVuU2VsZWN0aW9uRGJsQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3Uyh7cnVuSWQ6ZX0pKX1vbkFsbFNlbGVjdGlvblRvZ2dsZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGR2KHtydW5JZHM6ZX0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUoZSl7bGV0e2l0ZW1zOml9PWUscj1pLm1hcCgoe3J1bjpvfSk9Pm8uaWQpO3RoaXMuc3RvcmUuZGlzcGF0Y2goZHYoe3J1bklkczpyfSkpfW9uUGFnaW5hdGlvbkNoYW5nZShlKXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7bGV0e3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChTUyh7cGFnZUluZGV4OmkscGFnZVNpemU6cn0pKX1vblNvcnRDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChFUyhlKSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHV2KHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goVFMoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtsZXR7aHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmhwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c30pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxtZXRyaWNUYWc6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c30pKX10b2dnbGVGdWxsU2NyZWVuKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChiUygpKX1hZGRDb2x1bW4oe2hlYWRlcjplLGluZGV4Oml9KXtlLmVuYWJsZWQ9ITAsdGhpcy5zdG9yZS5kaXNwYXRjaChEUyh7aGVhZGVyOnsuLi5lLGVuYWJsZWQ6ITB9LGluZGV4Oml9KSl9cmVtb3ZlQ29sdW1uKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goemgoe2hlYWRlcjplfSkpfW9yZGVyQ29sdW1ucyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElTKHtuZXdIZWFkZXJPcmRlcjplfSkpfXVzZURhdGFUYWJsZSgpe3JldHVybiB0aGlzLmhwYXJhbXNFbmFibGVkLnZhbHVlJiYhdGhpcy5mb3JjZUxlZ2FjeVRhYmxlfWFkZEhwYXJhbUZpbHRlcihlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVjLmRhc2hib2FyZEhwYXJhbUZpbHRlckFkZGVkKHtuYW1lOmUuaGVhZGVyLm5hbWUsZmlsdGVyOmUudmFsdWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEMoQWUpKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZudCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e3VzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIsY29sdW1uczoiY29sdW1ucyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGZvcmNlTGVnYWN5VGFibGU6ImZvcmNlTGVnYWN5VGFibGUifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwidXNlRmxleGlibGVMYXlvdXQiLCJudW1TZWxlY3RlZEl0ZW1zIiwiY29sdW1ucyIsImhwYXJhbUNvbHVtbnMiLCJtZXRyaWNDb2x1bW5zIiwic2hvd0V4cGVyaW1lbnROYW1lIiwicGFnZUl0ZW1zIiwiZmlsdGVyZWRJdGVtc0xlbmd0aCIsImFsbEl0ZW1zTGVuZ3RoIiwibG9hZGluZyIsInBhZ2luYXRpb25PcHRpb24iLCJyZWdleEZpbHRlciIsInNvcnRPcHRpb24iLCJ1c2VQYWdpbmF0aW9uIiwib25TZWxlY3Rpb25Ub2dnbGUiLCJvblNlbGVjdGlvbkRibENsaWNrIiwib25QYWdlU2VsZWN0aW9uVG9nZ2xlIiwib25QYWdpbmF0aW9uQ2hhbmdlIiwib25SZWdleEZpbHRlckNoYW5nZSIsIm9uU29ydENoYW5nZSIsIm9uUnVuQ29sb3JDaGFuZ2UiLCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIiwib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIiw0LCJuZ0lmIl0sWzMsImhlYWRlcnMiLCJkYXRhIiwic2VsZWN0YWJsZUNvbHVtbnMiLCJjb2x1bW5GaWx0ZXJzIiwic29ydGluZ0luZm8iLCJleHBlcmltZW50SWRzIiwicmVnZXhGaWx0ZXIiLCJpc0Z1bGxTY3JlZW4iLCJsb2FkaW5nIiwic29ydERhdGFCeSIsIm9yZGVyQ29sdW1ucyIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25BbGxTZWxlY3Rpb25Ub2dnbGUiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25SZWdleEZpbHRlckNoYW5nZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJ0b2dnbGVGdWxsU2NyZWVuIiwiYWRkQ29sdW1uIiwicmVtb3ZlQ29sdW1uIiwiYWRkRmlsdGVyIiw0LCJuZ0lmIl0sWzMsImV4cGVyaW1lbnRJZHMiLCJ1c2VGbGV4aWJsZUxheW91dCIsIm51bVNlbGVjdGVkSXRlbXMiLCJjb2x1bW5zIiwiaHBhcmFtQ29sdW1ucyIsIm1ldHJpY0NvbHVtbnMiLCJzaG93RXhwZXJpbWVudE5hbWUiLCJwYWdlSXRlbXMiLCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIiwiYWxsSXRlbXNMZW5ndGgiLCJsb2FkaW5nIiwicGFnaW5hdGlvbk9wdGlvbiIsInJlZ2V4RmlsdGVyIiwic29ydE9wdGlvbiIsInVzZVBhZ2luYXRpb24iLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25Tb3J0Q2hhbmdlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiXSxbMywiaGVhZGVycyIsImRhdGEiLCJzZWxlY3RhYmxlQ29sdW1ucyIsImNvbHVtbkZpbHRlcnMiLCJzb3J0aW5nSW5mbyIsImV4cGVyaW1lbnRJZHMiLCJyZWdleEZpbHRlciIsImlzRnVsbFNjcmVlbiIsImxvYWRpbmciLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIiwib25TZWxlY3Rpb25Ub2dnbGUiLCJvbkFsbFNlbGVjdGlvblRvZ2dsZSIsIm9uUnVuQ29sb3JDaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25TZWxlY3Rpb25EYmxDbGljayIsInRvZ2dsZUZ1bGxTY3JlZW4iLCJhZGRDb2x1bW4iLCJyZW1vdmVDb2x1bW4iLCJhZGRGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihTKDAsbjVlLDExLDM1LCJydW5zLXRhYmxlLWNvbXBvbmVudCIsMCksUygxLGk1ZSw5LDI1LCJydW5zLWRhdGEtdGFibGUiLDEpKSwyJmUmJihfKCJuZ0lmIiwhaS51c2VEYXRhVGFibGUoKSksdigxKSxfKCJuZ0lmIixpLnVzZURhdGFUYWJsZSgpKSl9LGRlcGVuZGVuY2llczpbRmUsU25lLFVuZSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAgPiBydW5zLXRhYmxlLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHRiLWRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixjb2x1bW5zOiJjb2x1bW5zIn0sZGVjbHM6MSx2YXJzOjQsY29uc3RzOltbMywidXNlRmxleGlibGVMYXlvdXQiLCJjb2x1bW5zIiwiZXhwZXJpbWVudElkcyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJydW5zLXRhYmxlIiwwKSwyJmUmJl8oInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLGkuY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W1duZV0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxZbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5leHBlcmltZW50SWRzJD10aGlzLnN0b3JlLnNlbGVjdChscikucGlwZShOKGk9Pmk/P1tdKSksdGhpcy5jb2x1bW5zJD10aGlzLnN0b3JlLnNlbGVjdChscikucGlwZShOKGk9Plticy5DSEVDS0JPWCxicy5SVU5fTkFNRSxpJiZpLmxlbmd0aD4xP2JzLkVYUEVSSU1FTlRfTkFNRTpudWxsLGJzLlJVTl9DT0xPUl0uZmlsdGVyKHI9Pm51bGwhPT1yKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1zZWxlY3RvciJdXSxpbnB1dHM6e3Nob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsImNvbHVtbnMiLCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpKSwyJmUmJl8oImV4cGVyaW1lbnRJZHMiLFcoMSwzLGkuZXhwZXJpbWVudElkcyQpKSgiY29sdW1ucyIsVygyLDUsaS5jb2x1bW5zJCkpKCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGkuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKX0sZGVwZW5kZW5jaWVzOltxbmUsY3RdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGM1ZShuLHQpezEmbiYmUCgwLCJtZXRyaWNzLW1haW4tdmlldyIsMil9dmFyIFhuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcyQ9dGhpcy5zdG9yZS5zZWxlY3QobWQpLHRoaXMucnVuc1RhYmxlRnVsbFNjcmVlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoTGgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShDKEFlKSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQiXV0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInNpZGViYXIiLCIiLDMsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdLFsibWFpbiIsIiIsNCwibmdJZiJdLFsibWFpbiIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGgoMCwidGItZGFzaGJvYXJkLWxheW91dCIpLFAoMSwicnVucy1zZWxlY3RvciIsMCksaigyLCJhc3luYyIpLFMoMyxjNWUsMSwwLCJtZXRyaWNzLW1haW4tdmlldyIsMSksaig0LCJhc3luYyIpLGcoKSksMiZlJiYodigxKSxfKCJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLFcoMiwyLGkuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJCkpLHYoMiksXygibmdJZiIsIVcoNCw0LGkucnVuc1RhYmxlRnVsbFNjcmVlbiQpKSl9LGRlcGVuZGVuY2llczpbRmUsYVEsZm5lLFluZSxjdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpzdHJldGNoO292ZXJmbG93OmhpZGRlbn0ubm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI0NSwxNTcsLjg1KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZlYjNiO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztmbGV4OjAgMH10Yi1kYXNoYm9hcmQtbGF5b3V0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMTtvdmVyZmxvdzpoaWRkZW59bmF2W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTt3aWR0aDozNDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBuYXZbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBuYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtib3JkZXItcmlnaHQtY29sb3I6IzU1NX1tZXRyaWNzLW1haW4tdmlld1tfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxPVj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZGksY2ldfSksbn0pKCkseEE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlXX0pLG59KSgpLENBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxkaV19KSxufSkoKSxRbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLGRpLCRhLGNpLHhnXX0pLG59KSgpLFpuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGVdfSksbn0pKCksaF89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLHF1XX0pLG59KSgpLGdfPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxsQSxkaV19KSxufSkoKSxLbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLEZjLGdfLGhfXX0pLG59KSgpLE1BPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxkaSxjaSxubCxDQSxabmUsUW5lLEtuZV19KSxufSkoKSxKbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLF9fPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxKbmVdfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltibmUsUGUsTUEsX18sZ18sRWYsY2ksRmMsaGcsJGEsZGksanUsUm5lLG5sLGtuZSxWbmUsaF8sUTFdfSksbn0pKCksZWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSwkbmVdfSksbn0pKCksYl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxkaV19KSxufSkoKSx0aWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRix0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEYsdGhpcy5heGlzRGlyZWN0aW9uPWZzLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Tyh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLEkoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksZygpKSwyJmUmJl8oImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W3BBXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3dBLFBlLFl1LGJfXX0pLG59KSgpO2liKGZBLFtubixGZSxPZixxZyx0aWVdLFtdKTt2YXIgdl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlXX0pLG59KSgpLFNBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxfX119KSxufSkoKSx5Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsZGldfSksbn0pKCksaWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxuaWUsY2ksZGksbmwsU0Esdl8seV9dfSksbn0pKCksRUE9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHJpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsRUEsY2ksZGksbmwscXUsU0Esdl8seV9dfSksbn0pKCksb2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxDbyxjaSxkaSwkYSxqdV19KSxufSkoKSxUQT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsQ28sb2llLFl1XX0pLG59KSgpLHNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsRUEseGcsY2ksaGcsJGEsSmEscVNdfSksbn0pKCksYWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxNQV19KSxufSkoKSxsaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3dBLFBlLFRBXX0pLG59KSgpLGNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUGUsc2llLF9fLGJfLFRBLGNpLGRpLGp1LG5sLFl1LGFpZSxsaWUsdl8seV9dfSksbn0pKCksZGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxyaWUsY2llLGlpZSxiX119KSxufSkoKSx1aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1BlLEphXX0pLG59KSgpLERBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSx1aWUsY2ksVlQsRmMsZGksSmEscXUsV2gsaF9dfSksbn0pKCkscGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxDQSxGYyx2RSxkaSxjaV19KSxufSkoKSxmaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RpZSxQZSx4QSxnXyxsQSxjaSxWVCxkaSwkYSxubCxEQSxwaWUsTWRdfSksbn0pKCksbWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSx4QSxPVixmaWUsZGksREEsZWllXX0pLG59KSgpLHA1ZT0iTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIiO2Z1bmN0aW9uIGY1ZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpIZyxhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZTpwNWV9fX1dfWZ1bmN0aW9uIG01ZSgpe3JldHVybiBxKGJkLG49Pih7c2NhbGFyU21vb3RoaW5nOm59KSl9ZnVuY3Rpb24gaDVlKCl7cmV0dXJuIHEoZ2Ysbj0+KHtpZ25vcmVPdXRsaWVyczpufSkpfWZ1bmN0aW9uIGc1ZSgpe3JldHVybiBxKGhmLG49Pih7dG9vbHRpcFNvcnQ6U3RyaW5nKG4pfSkpfWZ1bmN0aW9uIF81ZSgpe3JldHVybiBxKGExLG49Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDpufSkpfWZ1bmN0aW9uIGI1ZSgpe3JldHVybiBxKFhoLG49Pih7dGltZVNlcmllc0NhcmRNaW5XaWR0aDpufSkpfWZ1bmN0aW9uIHY1ZSgpe3JldHVybiBxKHh2LG49Pih7c3RlcFNlbGVjdG9yRW5hYmxlZDpufSkpfWZ1bmN0aW9uIHk1ZSgpe3JldHVybiBxKFN1LG49Pih7cmFuZ2VTZWxlY3Rpb25FbmFibGVkOm59KSl9ZnVuY3Rpb24geDVlKCl7cmV0dXJuIHEod3Usbj0+KHtsaW5rZWRUaW1lRW5hYmxlZDpufSkpfWZ1bmN0aW9uIEM1ZSgpe3JldHVybiBxKEN2LG49Pih7c2luZ2xlU2VsZWN0aW9uSGVhZGVyczpufSkpfWZ1bmN0aW9uIE01ZSgpe3JldHVybiBxKE12LG49Pih7cmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm59KSl9dmFyIGhpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpETix1c2VGYWN0b3J5OnJRLGRlcHM6W0lOXX0se3Byb3ZpZGU6SU4sdXNlVmFsdWU6WFN9XSxpbXBvcnRzOltQZSxJaCxHYSxCYy5mb3JQbHVnaW4oZ3YsWG5lKSxxUyxtaWUsVHIuZm9yRmVhdHVyZShZUyx0USxETiksdG8uZm9yRmVhdHVyZShbaVFdKSxTYy5yZWdpc3RlckFsZXJ0QWN0aW9ucyhmNWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcobTVlKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKGg1ZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyhnNWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcoXzVlKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKGI1ZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyh2NWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcoeTVlKSxLaS5kZWZpbmVHbG9iYWxTZXR0aW5nKHg1ZSksS2kuZGVmaW5lR2xvYmFsU2V0dGluZyhDNWUpLEtpLmRlZmluZUdsb2JhbFNldHRpbmcoTTVlKV19KSxufSkoKSxnaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1lYLGhpZV19KSxufSkoKSxYZD0oKCk9PihmdW5jdGlvbihuKXtuLkNVU1RPTV9FTEVNRU5UPSJDVVNUT01fRUxFTUVOVCIsbi5JRlJBTUU9IklGUkFNRSIsbi5OR19DT01QT05FTlQ9Ik5HX0NPTVBPTkVOVCIsbi5OT05FPSJOT05FIn0oWGR8fChYZD17fSkpLFhkKSkoKSx3NWU9WyJwbHVnaW5Db250YWluZXIiXSxTNWU9WyJuZ1BsdWdpbkNvbnRhaW5lciJdO2Z1bmN0aW9uIEU1ZShuLHQpezEmbiYmbGkoMCl9ZnVuY3Rpb24gVDVlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLEU1ZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksa3QoKSksMiZuKXtsZXQgZT13KDIpLGk9aXQoNik7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOmkpfX1mdW5jdGlvbiBENWUobix0KXsxJm4mJmxpKDApfWZ1bmN0aW9uIEk1ZShuLHQpe2lmKDEmbiYmKE90KDApLFMoMSxENWUsMSwwLCJuZy1jb250YWluZXIiLDkpLGt0KCkpLDImbil7bGV0IGU9dygyKSxpPWl0KDYpO3YoMSksXygibmdUZW1wbGF0ZU91dGxldCIsZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIEE1ZShuLHQpezEmbiYmbGkoMCl9ZnVuY3Rpb24gUjVlKG4sdCl7aWYoMSZuJiYoT3QoMCksUygxLEE1ZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksa3QoKSksMiZuKXtsZXQgZT13KDIpLGk9aXQoNik7digxKSxfKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTppKX19ZnVuY3Rpb24gUDVlKG4sdCl7aWYoMSZuJiYoT3QoMCksaCgxLCJoMyIsMTApLFQoMiwiIFRoZXJlXHUyMDE5cyBubyBkYXNoYm9hcmQgYnkgdGhlIG5hbWUgb2YgXHUyMDFjIiksaCgzLCJjb2RlIiksVCg0KSxnKCksVCg1LCJcdTIwMWQuICIpLGcoKSxoKDYsInAiKSxUKDcsIllvdSBjYW4gc2VsZWN0IGEgZGFzaGJvYXJkIGZyb20gdGhlIGxpc3QgYWJvdmUuIiksZygpLGgoOCwicCIpLGxpKDksMTEpLGcoKSxrdCgpKSwyJm4pe2xldCBlPXcoMiksaT1pdCg4KTt2KDQpLGJ0KGUuYWN0aXZlUGx1Z2luSWQpLHYoNSksXygibmdUZW1wbGF0ZU91dGxldCIsaSl9fWZ1bmN0aW9uIE81ZShuLHQpe2lmKDEmbiYmKE90KDApLGgoMSwiaDMiLDEyKSxUKDIsIiBObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LiAiKSxnKCksaCgzLCJwIiksVCg0LCJQcm9iYWJsZSBjYXVzZXM6IiksZygpLGgoNSwidWwiKSg2LCJsaSIpLFQoNywiWW91IGhhdmVuXHUyMDE5dCB3cml0dGVuIGFueSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuIiksZygpLGgoOCwibGkiKSxUKDksIlRlbnNvckJvYXJkIGNhblx1MjAxOXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLiIpLGcoKSgpLFQoMTAsIiBJZiB5b3VcdTIwMTlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksaCgxMSwiYSIsMTMpLFQoMTIsIlJFQURNRSIpLGcoKSxUKDEzLCIgYW5kIHBlcmhhcHMgdGhlICIpLGgoMTQsImEiLDE0KSxUKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLGcoKSxUKDE2LCIuICIpLGgoMTcsInAiKSxUKDE4LCIgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUgIiksaCgxOSwiYSIsMTUpLFQoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSxnKCksVCgyMSwiIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLiAiKSxnKCksaCgyMiwicCIpLGxpKDIzLDExKSxnKCksa3QoKSksMiZuKXt3KDIpO2xldCBlPWl0KDgpO3YoMjMpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBrNWUobix0KXtpZigxJm4mJihoKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxTKDIsVDVlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDMsSTVlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDQsUjVlLDIsMSwibmctY29udGFpbmVyIiw4KSxTKDUsUDVlLDEwLDIsIm5nLWNvbnRhaW5lciIsOCksUyg2LE81ZSwyNCwxLCJuZy1jb250YWluZXIiLDgpLGcoKSgpKSwyJm4pe2xldCBlPXcoKTtfKCJuZ1N3aXRjaCIsZS5wbHVnaW5Mb2FkU3RhdGUpLHYoMiksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQpLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV04pLHYoMSksXygibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5VTktOT1dOX1BMVUdJTl9JRCksdigxKSxfKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIEY1ZShuLHQpe2lmKDEmbiYmKGgoMCwiaDMiLDE2KSxUKDEsIkRhdGEgY291bGQgbm90IGJlIGxvYWRlZC4iKSxnKCksaCgyLCJwIiksVCgzLCJUaGUgVGVuc29yQm9hcmQgc2VydmVyIG1heSBiZSBkb3duIG9yIGluYWNjZXNzaWJsZS4iKSxnKCksaCg0LCJwIiksbGkoNSwxMSksZygpKSwyJm4pe3coKTtsZXQgZT1pdCg4KTt2KDUpLF8oIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBONWUobix0KXtpZigxJm4mJihoKDAsInAiLDE5KSgxLCJpIiksVCgyLCJMb2cgZGlyZWN0b3J5OiAiKSxoKDMsInNwYW4iKSxUKDQpLGcoKSgpKCkpLDImbil7bGV0IGU9dygyKTt2KDQpLGJ0KGUuZGF0YUxvY2F0aW9uKX19ZnVuY3Rpb24gTDVlKG4sdCl7aWYoMSZuJiYoaCgwLCJzcGFuIiwxNyksVCgxKSxqKDIsImRhdGUiKSxnKCksUygzLE41ZSw1LDEsInAiLDE4KSksMiZuKXtsZXQgZT13KCk7digxKSxIZSgiTGFzdCByZWxvYWQ6ICIscXAoMiwyLGUubGFzdFVwZGF0ZWQsIm1lZGl1bSIpLCIiKSx2KDIpLF8oIm5nSWYiLGUuZGF0YUxvY2F0aW9uKX19dmFyIEI1ZT1mdW5jdGlvbihuKXtyZXR1cm57cGx1Z2luczohMCwiaXMtZmlyc3QtcGFydHktcGx1Z2luIjpufX0sY2w9KCgpPT4oZnVuY3Rpb24obil7bltuLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ9MV09IkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQiLG5bbi5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV049Ml09IkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiIsbltuLk5PX0VOQUJMRURfUExVR0lOUz0zXT0iTk9fRU5BQkxFRF9QTFVHSU5TIixuW24uVU5LTk9XTl9QTFVHSU5fSUQ9NF09IlVOS05PV05fUExVR0lOX0lEIixuW24uTE9BREVEPTVdPSJMT0FERUQiLG5bbi5MT0FESU5HPTZdPSJMT0FESU5HIn0oY2x8fChjbD17fSkpLGNsKSkoKSxfaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLnBsdWdpblJlZ2lzdHJ5PWksdGhpcy5wbHVnaW5BcGlIb3N0PXIsdGhpcy5QbHVnaW5Mb2FkU3RhdGU9Y2wsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1YZCx0aGlzLnBsdWdpbkluc3RhbmNlcz1uZXcgTWFwfW5nT25DaGFuZ2VzKGUpe2lmKCF0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkfHwhdGhpcy5hY3RpdmVLbm93blBsdWdpbnx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PVRlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1UZS5MT0FESU5HKXJldHVybjtsZXQgaT1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKGUuYWN0aXZlS25vd25QbHVnaW58fGUuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fGUuc2V0dGluZ3NMb2FkU3RhdGUpe2xldCByPWUuYWN0aXZlS25vd25QbHVnaW4/LnByZXZpb3VzVmFsdWU7aWYociYmci5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihyKSxpKXtsZXQgbz10aGlzLmNyZWF0ZVBsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKTtvJiZ0aGlzLnBsdWdpbkluc3RhbmNlcy5zZXQodGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCxvKX1lbHNlIHRoaXMuc2hvd1BsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKX0oaXx8ZS5sYXN0VXBkYXRlZCkmJnRoaXMucmVsb2FkKHRoaXMuYWN0aXZlS25vd25QbHVnaW4saSl9aGlkZVBsdWdpbihlKXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKGUuaWQpKXJldHVybjtsZXQgaT10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQoZS5pZCk7T2JqZWN0LmFzc2lnbihpLnN0eWxlLHttYXhIZWlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIix2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KX1zaG93UGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4oZSl7bGV0IGk9bnVsbDtzd2l0Y2goZS5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIFhkLkNVU1RPTV9FTEVNRU5UOmk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlLmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZSksaS5yZWxvYWRPblJlYWR5PSExLGkuZmVhdHVyZUZsYWdzPXRoaXMuZmVhdHVyZUZsYWdzLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgWGQuSUZSQU1FOmlmKCF0aGlzLnBsdWdpbkFwaUhvc3QpdGhyb3cgRXJyb3IoYElGUkFNRS1iYXNlZCBwbHVnaW5zIG5vdCBzdXBwb3J0ZWQ6ICR7ZS5pZH1gKTtpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGkuc2V0QXR0cmlidXRlKCJzcmMiLGBkYXRhL3BsdWdpbl9lbnRyeS5odG1sP25hbWU9JHtlLmlkfWApLHRoaXMucGx1Z2luQXBpSG9zdC5yZWdpc3RlclBsdWdpbklmcmFtZShpLGUuaWQpLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgWGQuTkdfQ09NUE9ORU5UOmxldCByPXRoaXMucGx1Z2luUmVnaXN0cnkuZ2V0Q29tcG9uZW50KGUuaWQpO2lmKHIpe2xldCBvPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHIpO2k9dGhpcy5uZ1BsdWdpbkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQobykubG9jYXRpb24ubmF0aXZlRWxlbWVudH1lbHNlIGNvbnNvbGUuZXJyb3IoYE5vIHJlZ2lzdGVyZWQgQW5ndWxhciBjb21wb25lbnQgZm9yIHBsdWdpbjogJHtlLmlkfWApO2JyZWFrO2Nhc2UgWGQuTk9ORTpicmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgcGx1Z2luIil9cmV0dXJuIGl9cmVsb2FkKGUsaSl7aWYoIWkmJmUuZGlzYWJsZV9yZWxvYWQpcmV0dXJuO2xldCByPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtyJiZyLnJlbG9hZCYmci5yZWxvYWQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhmbyksQyhCYyksQyhJMSw4KSl9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoR2UodzVlLDcsTWUpLEdlKFM1ZSw3LHNpKSksMiZlKXtsZXQgcjtTZShyPUVlKCkpJiYoaS5wbHVnaW5zQ29udGFpbmVyPXIuZmlyc3QpLFNlKHI9RWUoKSkmJihpLm5nUGx1Z2luQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQiLGFjdGl2ZUtub3duUGx1Z2luOiJhY3RpdmVLbm93blBsdWdpbiIscGx1Z2luTG9hZFN0YXRlOiJwbHVnaW5Mb2FkU3RhdGUiLGRhdGFMb2NhdGlvbjoiZGF0YUxvY2F0aW9uIixpc0ZlYXR1cmVGbGFnc0xvYWRlZDoiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLHNldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSIsZmVhdHVyZUZsYWdzOiJmZWF0dXJlRmxhZ3MiLGxhc3RVcGRhdGVkOiJsYXN0VXBkYXRlZCIsZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZmVhdHVyZXM6W0d0XSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJwbHVnaW5Db250YWluZXIiLCIiXSxbIm5nUGx1Z2luQ29udGFpbmVyIiwiIl0sWyJjbGFzcyIsIndhcm5pbmciLDMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJlbnZpcm9ubWVudEZhaWx1cmVEZWZhdWx0VGVtcGxhdGUiLCIiXSxbImRhdGVBbmREYXRhTG9jYXRpb24iLCIiXSxbMSwid2FybmluZyIsMywibmdTd2l0Y2giXSxbMSwid2FybmluZy1tZXNzYWdlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInVua25vd24tcGx1Z2luIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwibm8tYWN0aXZlLXBsdWdpbiJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIl0sWzEsImVudmlyb25tZW50LW5vdC1sb2FkZWQiXSxbMSwibGFzdC1yZWxvYWQtdGltZSJdLFsiY2xhc3MiLCJkYXRhLWxvY2F0aW9uIiw0LCJuZ0lmIl0sWzEsImRhdGEtbG9jYXRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihoKDAsImRpdiIsMCwxKSxsaSgyLG51bGwsMiksZygpLFMoNCxrNWUsNyw2LCJkaXYiLDMpLFMoNSxGNWUsNiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LFd0KSxTKDcsTDVlLDQsNSwibmctdGVtcGxhdGUiLG51bGwsNSxXdCkpLDImZSYmKF8oIm5nQ2xhc3MiLEluKDIsQjVlLChudWxsPT1pLmFjdGl2ZUtub3duUGx1Z2luP251bGw6aS5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PWkuTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksdig0KSxfKCJuZ0lmIixpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURFRCYmaS5wbHVnaW5Mb2FkU3RhdGUhPT1pLlBsdWdpbkxvYWRTdGF0ZS5MT0FESU5HKSl9LGRlcGVuZGVuY2llczpbeW4sRmUsTHIsc3IsU3IsZ2hdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGx1Z2lucy5pcy1maXJzdC1wYXJ0eS1wbHVnaW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmZmO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMwMzAzMH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFY1ZT1xKE5oLFdvLChuLHQpPT50JiZuW3RdP09iamVjdC5hc3NpZ24oe2lkOnR9LG5bdF0pOm51bGwpLElBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlS25vd25QbHVnaW4kPXRoaXMuc3RvcmUuc2VsZWN0KFY1ZSksdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5zZWxlY3QoV28pLHRoaXMucGx1Z2luTG9hZFN0YXRlJD1kbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luJCx0aGlzLmFjdGl2ZVBsdWdpbklkJCx0aGlzLnN0b3JlLnNlbGVjdCh5UykpLnBpcGUoTigoW2kscixvXSk9Pm51bGwhPT1vLmZhaWx1cmVDb2RlP28uZmFpbHVyZUNvZGU9PT1qYS5OT1RfRk9VTkQ/Y2wuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ6by5mYWlsdXJlQ29kZT09PWphLlBFUk1JU1NJT05fREVOSUVEP2NsLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ6Y2wuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOOm51bGwhPT1pP2NsLkxPQURFRDpudWxsPT09by5sYXN0TG9hZGVkVGltZUluTXMmJm8uc3RhdGU9PT1UZS5MT0FESU5HP2NsLkxPQURJTkc6cj9jbC5VTktOT1dOX1BMVUdJTl9JRDpjbC5OT19FTkFCTEVEX1BMVUdJTlMpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoRmgpLHRoaXMuZGF0YUxvY2F0aW9uJD10aGlzLnN0b3JlLnNlbGVjdCh4UykucGlwZShOKGk9PmkuZGF0YV9sb2NhdGlvbikpLHRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHZ1KSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3Qoa3MpLHRoaXMuc2V0dGluZ3NMb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KEJzLmdldFNldHRpbmdzTG9hZFN0YXRlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInBsdWdpbnMiXV0saW5wdXRzOntlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjcsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihQKDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpKSwyJmUmJl8oImFjdGl2ZUtub3duUGx1Z2luIixXKDEsMTEsaS5hY3RpdmVLbm93blBsdWdpbiQpKSgiYWN0aXZlUGx1Z2luSWQiLFcoMiwxMyxpLmFjdGl2ZVBsdWdpbklkJCkpKCJkYXRhTG9jYXRpb24iLFcoMywxNSxpLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFcoNCwxNyxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpKSgicGx1Z2luTG9hZFN0YXRlIixXKDUsMTksaS5wbHVnaW5Mb2FkU3RhdGUkKSkoImlzRmVhdHVyZUZsYWdzTG9hZGVkIixXKDYsMjEsaS5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFcoNywyMyxpLnNldHRpbmdzTG9hZFN0YXRlJCkpKCJmZWF0dXJlRmxhZ3MiLFcoOCwyNSxpLmZlYXR1cmVGbGFncyQpKSgiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSkoImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUpfSxzdHlsZXM6WyJwbHVnaW5zLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0geyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEFBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltHYSxQZSxCY119KSxufSkoKTtpYihJQSxbX2llXSxbY3RdKTt2YXIgYmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kb2N1bWVudD1pLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKHVuKEJzLmdldFJlbG9hZEVuYWJsZWQpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkPXRoaXMuc3RvcmUucGlwZSh1bihCcy5nZXRSZWxvYWRQZXJpb2RJbk1zKSksdGhpcy5yZWxvYWRUaW1lcklkPW51bGwsdGhpcy5taXNzZWRBdXRvUmVsb2FkPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgSWV9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSxkbih0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUoWW4oKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKFluKCkpKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5jYW5jZWxMb2FkKCksZSYmdGhpcy5sb2FkKGkpfSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChjcygpKSl9bG9hZChlKXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKT0+eyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMuc3RvcmUuZGlzcGF0Y2goY3MoKSk6dGhpcy5taXNzZWRBdXRvUmVsb2FkPSEwLHRoaXMubG9hZChlKX0sZSl9Y2FuY2VsTG9hZCgpe251bGwhPT10aGlzLnJlbG9hZFRpbWVySWQmJmNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVySWQpLHRoaXMucmVsb2FkVGltZXJJZD1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5jYW5jZWxMb2FkKCksdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSksdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoQyhBZSksQyhMdCkpfSxuLlx1MDI3NWNtcD1PKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlbG9hZGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx2aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPU8oe3R5cGU6bixzZWxlY3RvcnM6W1sidGVuc29yYm9hcmQtd3JhcHBlci1jb21wb25lbnQiXV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGx1Z2lucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmUCgwLCJwbHVnaW5zIiwwKSgxLCJyZWxvYWRlciIpfSxkZXBlbmRlbmNpZXM6W0lBLGJpZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseWllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9dWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGtWPSJzbW9vdGhpbmciLEZWPSJydW5Db2xvckdyb3VwIixOVj0idGFnRmlsdGVyIixMVj0icnVuRmlsdGVyIixCVj0icmVnZXg6IixSQT1jbGFzcyBleHRlbmRzIHlpZXtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIGRuKFt0LnNlbGVjdCh5diksdC5zZWxlY3QoeFcpXSkucGlwZShOKChbZSxpXSk9PntpZighZS5sZW5ndGgmJiFpLmxlbmd0aClyZXR1cm5bXTtsZXQgbz1bLi4uZS5tYXAoKHtwbHVnaW46cyx0YWc6YSxzYW1wbGU6bCxydW5JZDpjfSk9PntsZXQgZD17cGx1Z2luOnMsdGFnOmF9O3JldHVybiBwYShzKSYmKGQucnVuSWQ9YyksdWEocykmJihkLnNhbXBsZT1sKSxkfSksLi4uaV07cmV0dXJuW3trZXk6InBpbm5lZENhcmRzIix2YWx1ZTpKU09OLnN0cmluZ2lmeShvKX1dfSkpfXNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0KXtyZXR1cm4gZG4oW3RoaXMuZ2V0TWV0cmljc1Bpbm5lZENhcmRzKHQpLHQuc2VsZWN0KGtsKS5waXBlKE4oZT0+ZT9be2tleTpOVix2YWx1ZTplfV06W10pKSxkbihbdC5zZWxlY3QoaXYpLHQuc2VsZWN0KGNmKV0pLnBpcGUoTigoW2UsaV0pPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5tYXAoKFtlLGldKT0+e2lmKHZvaWQgMD09PWkpcmV0dXJue307bGV0IHI9dFtlXTtyZXR1cm4gciYmci5xdWVyeVBhcmFtT3ZlcnJpZGU/e2tleTpyLnF1ZXJ5UGFyYW1PdmVycmlkZSx2YWx1ZTppPy50b1N0cmluZygpfTp7fX0pLmZpbHRlcigoe2tleTplLHZhbHVlOml9KT0+ZSYmdm9pZCAwIT09aSl9KGUsaSkpKSx0LnNlbGVjdChNVykucGlwZShOKGU9Pk51bWJlci5pc0Zpbml0ZShlLnNjYWxhclNtb290aGluZyk/W3trZXk6a1YsdmFsdWU6U3RyaW5nKGUuc2NhbGFyU21vb3RoaW5nKX1dOltdKSksdC5zZWxlY3QoSkYpLnBpcGUoTihlPT57aWYoIWUpcmV0dXJuW107bGV0IGk7c3dpdGNoKGUua2V5KXtjYXNlIFlpLkVYUEVSSU1FTlQ6aT0iZXhwZXJpbWVudCI7YnJlYWs7Y2FzZSBZaS5SVU46aT0icnVuIjticmVhaztjYXNlIFlpLlJFR0VYOmk9YCR7QlZ9JHtlLnJlZ2V4U3RyaW5nfWA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2VyaWFsaXphdGlvbiBub3QgaW1wbGVtZW50ZWQiKX1yZXR1cm5be2tleTpGVix2YWx1ZTppfV19KSksdC5zZWxlY3QodmQpLnBpcGUoTihlPT5lP1t7a2V5OkxWLHZhbHVlOmV9XTpbXSkpXSkucGlwZShOKGU9PmUuZmxhdCgpKSl9ZGVzZXJpYWxpemVRdWVyeVBhcmFtcyh0KXtsZXQgZT1udWxsLGk9bnVsbCxyPW51bGwsbz1udWxsLHM9bnVsbDtmb3IobGV0e2tleTphLHZhbHVlOmx9b2YgdClzd2l0Y2goYSl7Y2FzZSJwaW5uZWRDYXJkcyI6ZT1VNWUobCk7YnJlYWs7Y2FzZSBrVjppPU51bWJlcihsKTticmVhaztjYXNlIEZWOnN3aXRjaChsKXtjYXNlImV4cGVyaW1lbnQiOm89e2tleTpZaS5FWFBFUklNRU5UfTticmVhaztjYXNlInJ1biI6bz17a2V5OllpLlJVTn19aWYobC5zdGFydHNXaXRoKEJWKSl7bGV0IGM9bC5zbGljZShCVi5sZW5ndGgpO289e2tleTpZaS5SRUdFWCxyZWdleFN0cmluZzpjfX1icmVhaztjYXNlIE5WOnI9bDticmVhaztjYXNlIExWOnM9bH1yZXR1cm57bWV0cmljczp7cGlubmVkQ2FyZHM6ZXx8W10sc21vb3RoaW5nOmksdGFnRmlsdGVyOnJ9LHJ1bnM6e2dyb3VwQnk6byxyZWdleEZpbHRlcjpzfX19fTtmdW5jdGlvbiBVNWUobil7bGV0IHQ7dHJ5e3Q9SlNPTi5wYXJzZShuKX1jYXRjaHtyZXR1cm4gbnVsbH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbnVsbDtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdCl7bGV0IG89InN0cmluZyI9PXR5cGVvZiBpLnJ1bklkLHM9Im51bWJlciI9PXR5cGVvZiBpLnNhbXBsZTtpZighKCJzdHJpbmciPT10eXBlb2YgaS5wbHVnaW4mJiJzdHJpbmciPT10eXBlb2YgaS50YWcmJihvfHx0eXBlb2YgaS5ydW5JZD4idSIpJiYoc3x8dHlwZW9mIGkuc2FtcGxlPiJ1IikmJlo2KGkucGx1Z2luKSYmaS50YWcpKWNvbnRpbnVlO2lmKHBhKGkucGx1Z2luKSl7aWYoIWkucnVuSWQpY29udGludWV9ZWxzZSBpZihpLnJ1bklkKWNvbnRpbnVlO2lmKHMmJighdWEoaS5wbHVnaW4pfHwhTnVtYmVyLmlzSW50ZWdlcihpLnNhbXBsZSl8fGkuc2FtcGxlPDApKWNvbnRpbnVlO2xldCBkPXtwbHVnaW46aS5wbHVnaW4sdGFnOmkudGFnfTtvJiYoZC5ydW5JZD1pLnJ1bklkKSxzJiYoZC5zYW1wbGU9aS5zYW1wbGUpLGUucHVzaChkKX1yZXR1cm4gZX1mdW5jdGlvbiBDaWUoKXtyZXR1cm5be3JvdXRlS2luZDp3bi5FWFBFUklNRU5ULHBhdGg6Ii8iLG5nQ29tcG9uZW50OnZpZSxkZWZhdWx0Um91dGU6ITAsZGVlcExpbmtQcm92aWRlcjpuZXcgUkF9XX1mdW5jdGlvbiBNaWUoKXtyZXR1cm4gbj0+KHQsZSk9Pm4odCxlKX1SQT1SNChbRXooKV0sUkEpO3ZhciB3aWU9bmV3IGllKCJSb290IHJlZHVjZXJzIHRva2VuIix7ZmFjdG9yeTooKT0+KHt9KX0pLFNpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTp5aCx1c2VGYWN0b3J5Ok1pZSxtdWx0aTohMH1dLGltcG9ydHM6W1RyLmZvclJvb3Qod2llLHtydW50aW1lQ2hlY2tzOntzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExfX0pLHRvLmZvclJvb3QoW10pXX0pLG59KSgpLEVpZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9Ryh7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksVGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1HKHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltQZSxBQSxFaWVdfSksbn0pKCksVlY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUcoe3R5cGU6bixib290c3RyYXA6W2JZXX0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1doLERZLE13LFVHLEloLHZZLERsLnJlZ2lzdGVyUm91dGVzKENpZSksUTEsWDEseVksVGllLEdhLEVZLENZLEFZLEZTLFJZLE1ZLG1GLEkxLEFBLHcxLHlFLFNpZSxnaWVdfSksbn0pKCk7ImxvYWRpbmciIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9haygpLmJvb3RzdHJhcE1vZHVsZShWVik6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCgpPT57YWsoKS5ib290c3RyYXBNb2R1bGUoVlYpfSl9KSgpOwovKiogdmltOiBldDp0cz00OnN3PTQ6c3RzPTQKICogQGxpY2Vuc2UgUmVxdWlyZUpTIDIuMy42IENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSwgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvYmxvYi9tYXN0ZXIvTElDRU5TRQogKi8KLy9Ob3QgdXNpbmcgc3RyaWN0OiB1bmV2ZW4gc3RyaWN0IHN1cHBvcnQgaW4gYnJvd3NlcnMsICMzOTIsIGFuZCBjYXVzZXMKLy9wcm9ibGVtcyB3aXRoIHJlcXVpcmVqcy5leGVjKCkvdHJhbnNwaWxlciBwbHVnaW5zIHRoYXQgbWF5IG5vdCBiZSBzdHJpY3QuCi8qanNsaW50IHJlZ2V4cDogdHJ1ZSwgbm9tZW46IHRydWUsIHNsb3BweTogdHJ1ZSAqLwovKmdsb2JhbCB3aW5kb3csIG5hdmlnYXRvciwgZG9jdW1lbnQsIGltcG9ydFNjcmlwdHMsIHNldFRpbWVvdXQsIG9wZXJhICovCgp2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZpbmU7CihmdW5jdGlvbiAoZ2xvYmFsLCBzZXRUaW1lb3V0KSB7CiAgICB2YXIgcmVxLCBzLCBoZWFkLCBiYXNlRWxlbWVudCwgZGF0YU1haW4sIHNyYywKICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCwgY3VycmVudGx5QWRkaW5nU2NyaXB0LCBtYWluU2NyaXB0LCBzdWJQYXRoLAogICAgICAgIHZlcnNpb24gPSAnMi4zLjYnLAogICAgICAgIGNvbW1lbnRSZWdFeHAgPSAvXC9cKltcc1xTXSo/XCpcL3woW146Iic9XXxeKVwvXC8uKiQvbWcsCiAgICAgICAgY2pzUmVxdWlyZVJlZ0V4cCA9IC9bXi5dXHMqcmVxdWlyZVxzKlwoXHMqWyInXShbXiciXHNdKylbIiddXHMqXCkvZywKICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCiAgICAgICAgY3VyckRpclJlZ0V4cCA9IC9eXC5cLy8sCiAgICAgICAgb3AgPSBPYmplY3QucHJvdG90eXBlLAogICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmluZywKICAgICAgICBoYXNPd24gPSBvcC5oYXNPd25Qcm9wZXJ0eSwKICAgICAgICBpc0Jyb3dzZXIgPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQpLAogICAgICAgIGlzV2ViV29ya2VyID0gIWlzQnJvd3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgLy9QUzMgaW5kaWNhdGVzIGxvYWRlZCBhbmQgY29tcGxldGUsIGJ1dCBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRlCiAgICAgICAgLy9zcGVjaWZpY2FsbHkuIFNlcXVlbmNlIGlzICdsb2FkaW5nJywgJ2xvYWRlZCcsIGV4ZWN1dGlvbiwKICAgICAgICAvLyB0aGVuICdjb21wbGV0ZScuIFRoZSBVQSBjaGVjayBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCBzdXJlIGhvdwogICAgICAgIC8vdG8gZmVhdHVyZSB0ZXN0IHcvbyBjYXVzaW5nIHBlcmYgaXNzdWVzLgogICAgICAgIHJlYWR5UmVnRXhwID0gaXNCcm93c2VyICYmIG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ1BMQVlTVEFUSU9OIDMnID8KICAgICAgICAgICAgICAgICAgICAgIC9eY29tcGxldGUkLyA6IC9eKGNvbXBsZXRlfGxvYWRlZCkkLywKICAgICAgICBkZWZDb250ZXh0TmFtZSA9ICdfJywKICAgICAgICAvL09oIHRoZSB0cmFnZWR5LCBkZXRlY3Rpbmcgb3BlcmEuIFNlZSB0aGUgdXNhZ2Ugb2YgaXNPcGVyYSBmb3IgcmVhc29uLgogICAgICAgIGlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgIT09ICd1bmRlZmluZWQnICYmIG9wZXJhLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9wZXJhXScsCiAgICAgICAgY29udGV4dHMgPSB7fSwKICAgICAgICBjZmcgPSB7fSwKICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAogICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CgogICAgLy9Db3VsZCBtYXRjaCBzb21ldGhpbmcgbGlrZSAnKS8vY29tbWVudCcsIGRvIG5vdCBsb3NlIHRoZSBwcmVmaXggdG8gY29tbWVudC4KICAgIGZ1bmN0aW9uIGNvbW1lbnRSZXBsYWNlKG1hdGNoLCBzaW5nbGVQcmVmaXgpIHsKICAgICAgICByZXR1cm4gc2luZ2xlUHJlZml4IHx8ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0FycmF5KGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEFycmF5XSc7CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5LiBJZiB0aGUgZnVuYyByZXR1cm5zCiAgICAgKiBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkgYmFja3dhcmRzLiBJZiB0aGUgZnVuYwogICAgICogcmV0dXJucyBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUmV2ZXJzZShhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSBhcnkubGVuZ3RoIC0gMTsgaSA+IC0xOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNPd24uY2FsbChvYmosIHByb3ApOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE93bihvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzUHJvcChvYmosIHByb3ApICYmIG9ialtwcm9wXTsKICAgIH0KCiAgICAvKioKICAgICAqIEN5Y2xlcyBvdmVyIHByb3BlcnRpZXMgaW4gYW4gb2JqZWN0IGFuZCBjYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoCiAgICAgKiBwcm9wZXJ0eSB2YWx1ZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB0cnV0aHkgdmFsdWUsIHRoZW4gdGhlCiAgICAgKiBpdGVyYXRpb24gaXMgc3RvcHBlZC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFByb3Aob2JqLCBmdW5jKSB7CiAgICAgICAgdmFyIHByb3A7CiAgICAgICAgZm9yIChwcm9wIGluIG9iaikgewogICAgICAgICAgICBpZiAoaGFzUHJvcChvYmosIHByb3ApKSB7CiAgICAgICAgICAgICAgICBpZiAoZnVuYyhvYmpbcHJvcF0sIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTaW1wbGUgZnVuY3Rpb24gdG8gbWl4IGluIHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgaW50byB0YXJnZXQsCiAgICAgKiBidXQgb25seSBpZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS4KICAgICAqLwogICAgZnVuY3Rpb24gbWl4aW4odGFyZ2V0LCBzb3VyY2UsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pIHsKICAgICAgICBpZiAoc291cmNlKSB7CiAgICAgICAgICAgIGVhY2hQcm9wKHNvdXJjZSwgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2UgfHwgIWhhc1Byb3AodGFyZ2V0LCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChkZWVwU3RyaW5nTWl4aW4gJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhaXNBcnJheSh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldFtwcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4odGFyZ2V0W3Byb3BdLCB2YWx1ZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICAvL1NpbWlsYXIgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGJ1dCB0aGUgJ3RoaXMnIG9iamVjdCBpcyBzcGVjaWZpZWQKICAgIC8vZmlyc3QsIHNpbmNlIGl0IGlzIGVhc2llciB0byByZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhpcycgd2lsbCBiZS4KICAgIGZ1bmN0aW9uIGJpbmQob2JqLCBmbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShvYmosIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JpcHRzKCkgewogICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVmYXVsdE9uRXJyb3IoZXJyKSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgfQoKICAgIC8vQWxsb3cgZ2V0dGluZyBhIGdsb2JhbCB0aGF0IGlzIGV4cHJlc3NlZCBpbgogICAgLy9kb3Qgbm90YXRpb24sIGxpa2UgJ2EuYi5jJy4KICAgIGZ1bmN0aW9uIGdldEdsb2JhbCh2YWx1ZSkgewogICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KICAgICAgICB2YXIgZyA9IGdsb2JhbDsKICAgICAgICBlYWNoKHZhbHVlLnNwbGl0KCcuJyksIGZ1bmN0aW9uIChwYXJ0KSB7CiAgICAgICAgICAgIGcgPSBnW3BhcnRdOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBnOwogICAgfQoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0byBhbiBVUkwgd2l0aCBtb3JlIGluZm9ybWF0aW9uLgogICAgICogQHBhcmFtIHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3ZWIgcGFnZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIGh1bWFuIHJlYWRhYmxlIGVycm9yLgogICAgICogQHBhcmFtIHtFcnJvcn0gW2Vycl0gdGhlIG9yaWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgKgogICAgICogQHJldHVybnMge0Vycm9yfQogICAgICovCiAgICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgewogICAgICAgIHZhciBlID0gbmV3IEVycm9yKG1zZyArICdcbmh0dHBzOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sIycgKyBpZCk7CiAgICAgICAgZS5yZXF1aXJlVHlwZSA9IGlkOwogICAgICAgIGUucmVxdWlyZU1vZHVsZXMgPSByZXF1aXJlTW9kdWxlczsKICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIGUub3JpZ2luYWxFcnJvciA9IGVycjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGU7CiAgICB9CgogICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgLy9JZiBhIGRlZmluZSBpcyBhbHJlYWR5IGluIHBsYXkgdmlhIGFub3RoZXIgQU1EIGxvYWRlciwKICAgICAgICAvL2RvIG5vdCBvdmVyd3JpdGUuCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlcXVpcmVqcykpIHsKICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHJlcXVpcmVqcyBpbnN0YW5jZS4KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjZmcgPSByZXF1aXJlanM7CiAgICAgICAgcmVxdWlyZWpzID0gdW5kZWZpbmVkOwogICAgfQoKICAgIC8vQWxsb3cgZm9yIGEgcmVxdWlyZSBjb25maWcgb2JqZWN0CiAgICBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7CiAgICAgICAgLy9hc3N1bWUgaXQgaXMgYSBjb25maWcgb2JqZWN0LgogICAgICAgIGNmZyA9IHJlcXVpcmU7CiAgICAgICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICBmdW5jdGlvbiBuZXdDb250ZXh0KGNvbnRleHROYW1lKSB7CiAgICAgICAgdmFyIGluQ2hlY2tMb2FkZWQsIE1vZHVsZSwgY29udGV4dCwgaGFuZGxlcnMsCiAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkLAogICAgICAgICAgICBjb25maWcgPSB7CiAgICAgICAgICAgICAgICAvL0RlZmF1bHRzLiBEbyBub3Qgc2V0IGEgZGVmYXVsdCBmb3IgbWFwCiAgICAgICAgICAgICAgICAvL2NvbmZpZyB0byBzcGVlZCB1cCBub3JtYWxpemUoKSwgd2hpY2gKICAgICAgICAgICAgICAgIC8vd2lsbCBydW4gZmFzdGVyIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCiAgICAgICAgICAgICAgICB3YWl0U2Vjb25kczogNywKICAgICAgICAgICAgICAgIGJhc2VVcmw6ICcuLycsCiAgICAgICAgICAgICAgICBwYXRoczoge30sCiAgICAgICAgICAgICAgICBidW5kbGVzOiB7fSwKICAgICAgICAgICAgICAgIHBrZ3M6IHt9LAogICAgICAgICAgICAgICAgc2hpbToge30sCiAgICAgICAgICAgICAgICBjb25maWc6IHt9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30sCiAgICAgICAgICAgIC8vcmVnaXN0cnkgb2YganVzdCBlbmFibGVkIG1vZHVsZXMsIHRvIHNwZWVkCiAgICAgICAgICAgIC8vY3ljbGUgYnJlYWtpbmcgY29kZSB3aGVuIGxvdHMgb2YgbW9kdWxlcwogICAgICAgICAgICAvL2FyZSByZWdpc3RlcmVkLCBidXQgbm90IGFjdGl2YXRlZC4KICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5ID0ge30sCiAgICAgICAgICAgIHVuZGVmRXZlbnRzID0ge30sCiAgICAgICAgICAgIGRlZlF1ZXVlID0gW10sCiAgICAgICAgICAgIGRlZmluZWQgPSB7fSwKICAgICAgICAgICAgdXJsRmV0Y2hlZCA9IHt9LAogICAgICAgICAgICBidW5kbGVzTWFwID0ge30sCiAgICAgICAgICAgIHJlcXVpcmVDb3VudGVyID0gMSwKICAgICAgICAgICAgdW5ub3JtYWxpemVkQ291bnRlciA9IDE7CgogICAgICAgIC8qKgogICAgICAgICAqIFRyaW1zIHRoZSAuIGFuZCAuLiBmcm9tIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICogSXQgd2lsbCBrZWVwIGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJlY29tZQogICAgICAgICAqIHRoZSBmaXJzdCBwYXRoIHNlZ21lbnQsIHRvIGhlbHAgd2l0aCBtb2R1bGUgbmFtZSBsb29rdXBzLAogICAgICAgICAqIHdoaWNoIGFjdCBsaWtlIHBhdGhzLCBidXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCByZXN1bHQsCiAgICAgICAgICogYWxsIHBhdGhzIHRoYXQgdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KICAgICAgICAgKiBOT1RFOiB0aGlzIG1ldGhvZCBNT0RJRklFUyB0aGUgaW5wdXQgYXJyYXkuCiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRyaW1Eb3RzKGFyeSkgewogICAgICAgICAgICB2YXIgaSwgcGFydDsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGFydCA9IGFyeVtpXTsKICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAnLicpIHsKICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgIGkgLT0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGF0IHRoZSBzdGFydCwgb3IgcHJldmlvdXMgdmFsdWUgaXMgc3RpbGwgLi4sCiAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCB0aGVtIHNvIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoIGl0IG1heQogICAgICAgICAgICAgICAgICAgIC8vIHN0aWxsIHdvcmsgd2hlbiBjb252ZXJ0ZWQgdG8gYSBwYXRoLCBldmVuIHRob3VnaAogICAgICAgICAgICAgICAgICAgIC8vIGFzIGFuIElEIGl0IGlzIGxlc3MgdGhhbiBpZGVhbC4gSW4gbGFyZ2VyIHBvaW50CiAgICAgICAgICAgICAgICAgICAgLy8gcmVsZWFzZXMsIG1heSBiZSBiZXR0ZXIgdG8ganVzdCBraWNrIG91dCBhbiBlcnJvci4KICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCB8fCAoaSA9PT0gMSAmJiBhcnlbMl0gPT09ICcuLicpIHx8IGFyeVtpIC0gMV0gPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaSAtPSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSwgbGlrZSAuL3NvbWV0aGluZywgbm9ybWFsaXplIGl0IHRvCiAgICAgICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgcmVsYXRpdmUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlTmFtZSBhIHJlYWwgbmFtZSB0aGF0IHRoZSBuYW1lIGFyZyBpcyByZWxhdGl2ZQogICAgICAgICAqIHRvLgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXAgYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIHZhbHVlLiBTaG91bGQKICAgICAgICAgKiBvbmx5IGJlIGRvbmUgaWYgdGhpcyBub3JtYWxpemF0aW9uIGlzIGZvciBhIGRlcGVuZGVuY3kgSUQuCiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1lCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIGJhc2VOYW1lLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgcGtnTWFpbiwgbWFwVmFsdWUsIG5hbWVQYXJ0cywgaSwgaiwgbmFtZVNlZ21lbnQsIGxhc3RJbmRleCwKICAgICAgICAgICAgICAgIGZvdW5kTWFwLCBmb3VuZEksIGZvdW5kU3Rhck1hcCwgc3RhckksIG5vcm1hbGl6ZWRCYXNlUGFydHMsCiAgICAgICAgICAgICAgICBiYXNlUGFydHMgPSAoYmFzZU5hbWUgJiYgYmFzZU5hbWUuc3BsaXQoJy8nKSksCiAgICAgICAgICAgICAgICBtYXAgPSBjb25maWcubWFwLAogICAgICAgICAgICAgICAgc3Rhck1hcCA9IG1hcCAmJiBtYXBbJyonXTsKCiAgICAgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBuYW1lLmxlbmd0aCAtIDE7CgogICAgICAgICAgICAgICAgLy8gSWYgd2FudGluZyBub2RlIElEIGNvbXBhdGliaWxpdHksIHN0cmlwIC5qcyBmcm9tIGVuZAogICAgICAgICAgICAgICAgLy8gb2YgSURzLiBIYXZlIHRvIGRvIHRoaXMgaGVyZSwgYW5kIG5vdCBpbiBuYW1lVG9VcmwKICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugbm9kZSBhbGxvd3MgZWl0aGVyIC5qcyBvciBub24gLmpzIHRvIG1hcAogICAgICAgICAgICAgICAgLy8gdG8gc2FtZSBmaWxlLgogICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ub2RlSWRDb21wYXQgJiYganNTdWZmaXhSZWdFeHAudGVzdChuYW1lW2xhc3RJbmRleF0pKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVtsYXN0SW5kZXhdID0gbmFtZVtsYXN0SW5kZXhdLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdGFydHMgd2l0aCBhICcuJyBzbyBuZWVkIHRoZSBiYXNlTmFtZQogICAgICAgICAgICAgICAgaWYgKG5hbWVbMF0uY2hhckF0KDApID09PSAnLicgJiYgYmFzZVBhcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9wIG9mZiB0aGUgbGFzdCBwYXJ0LAogICAgICAgICAgICAgICAgICAgIC8vc28gdGhhdCAuIG1hdGNoZXMgdGhhdCAnZGlyZWN0b3J5JyBhbmQgbm90IG5hbWUgb2YgdGhlIGJhc2VOYW1lJ3MKICAgICAgICAgICAgICAgICAgICAvL21vZHVsZS4gRm9yIGluc3RhbmNlLCBiYXNlTmFtZSBvZiAnb25lL3R3by90aHJlZScsIG1hcHMgdG8KICAgICAgICAgICAgICAgICAgICAvLydvbmUvdHdvL3RocmVlLmpzJywgYnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdGhpcyBub3JtYWxpemF0aW9uLgogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMuc2xpY2UoMCwgYmFzZVBhcnRzLmxlbmd0aCAtIDEpOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLmpvaW4oJy8nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BcHBseSBtYXAgY29uZmlnIGlmIGF2YWlsYWJsZS4KICAgICAgICAgICAgaWYgKGFwcGx5TWFwICYmIG1hcCAmJiAoYmFzZVBhcnRzIHx8IHN0YXJNYXApKSB7CiAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CgogICAgICAgICAgICAgICAgb3V0ZXJMb29wOiBmb3IgKGkgPSBuYW1lUGFydHMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU28sIGRvIGpvaW5zIG9uIHRoZSBiaWdnZXN0IHRvIHNtYWxsZXN0IGxlbmd0aHMgb2YgYmFzZVBhcnRzLgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSBiYXNlUGFydHMubGVuZ3RoOyBqID4gMDsgaiAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5qb2luKCcvJykpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFzZU5hbWUgc2VnbWVudCBoYXMgY29uZmlnLCBmaW5kIGlmIGl0IGhhcyBvbmUgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcFZhbHVlLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWF0Y2gsIHVwZGF0ZSBuYW1lIHRvIHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gbWFwVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG91dGVyTG9vcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgZm9yIGEgc3RhciBtYXAgbWF0Y2gsIGJ1dCBqdXN0IGhvbGQgb24gdG8gaXQsCiAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSBpcyBhIHNob3J0ZXIgc2VnbWVudCBtYXRjaCBsYXRlciBpbiBhIG1hdGNoaW5nCiAgICAgICAgICAgICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgogICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTdGFyTWFwICYmIHN0YXJNYXAgJiYgZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFN0YXJNYXAgPSBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFySSA9IGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghZm91bmRNYXAgJiYgZm91bmRTdGFyTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBmb3VuZFN0YXJNYXA7CiAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gc3Rhckk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGZvdW5kTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzLnNwbGljZSgwLCBmb3VuZEksIGZvdW5kTWFwKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSWYgdGhlIG5hbWUgcG9pbnRzIHRvIGEgcGFja2FnZSdzIG5hbWUsIHVzZQogICAgICAgICAgICAvLyB0aGUgcGFja2FnZSBtYWluIGluc3RlYWQuCiAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG5hbWUpOwoKICAgICAgICAgICAgcmV0dXJuIHBrZ01haW4gPyBwa2dNYWluIDogbmFtZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZVNjcmlwdChuYW1lKSB7CiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgICAgIGVhY2goc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykgPT09IG5hbWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JykgPT09IGNvbnRleHQuY29udGV4dE5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdE5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFzUGF0aEZhbGxiYWNrKGlkKSB7CiAgICAgICAgICAgIHZhciBwYXRoQ29uZmlnID0gZ2V0T3duKGNvbmZpZy5wYXRocywgaWQpOwogICAgICAgICAgICBpZiAocGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgLy9Qb3Agb2ZmIHRoZSBmaXJzdCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVkLCBhbmQKICAgICAgICAgICAgICAgIC8vcmV0cnkKICAgICAgICAgICAgICAgIHBhdGhDb25maWcuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7CgogICAgICAgICAgICAgICAgLy9DdXN0b20gcmVxdWlyZSB0aGF0IGRvZXMgbm90IGRvIG1hcCB0cmFuc2xhdGlvbiwgc2luY2UKICAgICAgICAgICAgICAgIC8vSUQgaXMgImFic29sdXRlIiwgYWxyZWFkeSBtYXBwZWQvcmVzb2x2ZWQuCiAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKG51bGwsIHsKICAgICAgICAgICAgICAgICAgICBza2lwTWFwOiB0cnVlCiAgICAgICAgICAgICAgICB9KShbaWRdKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9UdXJucyBhIHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2luLCByZXNvdXJjZV0KICAgICAgICAvL3dpdGggdGhlIHBsdWdpbiBiZWluZyB1bmRlZmluZWQgaWYgdGhlIG5hbWUKICAgICAgICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCiAgICAgICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkgewogICAgICAgICAgICB2YXIgcHJlZml4LAogICAgICAgICAgICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRleCArIDEsIG5hbWUubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW3ByZWZpeCwgbmFtZV07CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIGEgbW9kdWxlIG1hcHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUKICAgICAgICAgKiBuYW1lLCBhbmQgcGF0aC4gSWYgcGFyZW50TW9kdWxlTWFwIGlzIHByb3ZpZGVkIGl0IHdpbGwKICAgICAgICAgKiBhbHNvIG5vcm1hbGl6ZSB0aGUgbmFtZSB2aWEgcmVxdWlyZS5ub3JtYWxpemUoKQogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IFtwYXJlbnRNb2R1bGVNYXBdIHBhcmVudCBtb2R1bGUgbWFwCiAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwgdXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIG5hbWVzLgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBpcyB0aGUgSUQgYWxyZWFkeSBub3JtYWxpemVkLgogICAgICAgICAqIFRoaXMgaXMgdHJ1ZSBpZiB0aGlzIGNhbGwgaXMgZG9uZSBmb3IgYSBkZWZpbmUoKSBtb2R1bGUgSUQuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1hcCBjb25maWcgdG8gdGhlIElELgogICAgICAgICAqIFNob3VsZCBvbmx5IGJlIHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVwZW5kZW5jeS4KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gbWFrZU1vZHVsZU1hcChuYW1lLCBwYXJlbnRNb2R1bGVNYXAsIGlzTm9ybWFsaXplZCwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHVybCwgcGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGwsCiAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50TW9kdWxlTWFwID8gcGFyZW50TW9kdWxlTWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lID0gbmFtZSwKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gdHJ1ZSwKICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gJyc7CgogICAgICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQgbWVhbnMgaXQgaXMgYSByZXF1aXJlIGNhbGwsIGdlbmVyYXRlIGFuCiAgICAgICAgICAgIC8vaW50ZXJuYWwgbmFtZS4KICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgbmFtZSA9ICdfQHInICsgKHJlcXVpcmVDb3VudGVyICs9IDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChuYW1lKTsKICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzWzFdOwoKICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgcGx1Z2luTW9kdWxlID0gZ2V0T3duKGRlZmluZWQsIHByZWZpeCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgcmVsYXRpdmUgcGF0aHMgaWYgdGhlcmUgaXMgYSBiYXNlIG5hbWUuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1BsdWdpbiBpcyBsb2FkZWQsIHVzZSBpdHMgbm9ybWFsaXplIG1ldGhvZC4KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgbmVzdGVkIHBsdWdpbiByZWZlcmVuY2VzLCB0aGVuIGRvIG5vdCB0cnkgdG8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsaXplLCBhcyBpdCB3aWxsIG5vdCBub3JtYWxpemUgY29ycmVjdGx5LiBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBsYWNlcyBhIHJlc3RyaWN0aW9uIG9uIHJlc291cmNlSWRzLCBhbmQgdGhlIGxvbmdlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXJtIHNvbHV0aW9uIGlzIG5vdCB0byBub3JtYWxpemUgdW50aWwgcGx1Z2lucyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGVkIGFuZCBhbGwgbm9ybWFsaXphdGlvbnMgdG8gYWxsb3cgZm9yIGFzeW5jCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRpbmcgb2YgYSBsb2FkZXIgcGx1Z2luLiBCdXQgZm9yIG5vdywgZml4ZXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbW1vbiB1c2VzLiBEZXRhaWxzIGluICMxMTMxCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZS5pbmRleE9mKCchJykgPT09IC0xID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVkIG5hbWUgbWF5IGJlIGEgcGx1Z2luIElEIGR1ZSB0byBtYXAgY29uZmlnCiAgICAgICAgICAgICAgICAgICAgLy9hcHBsaWNhdGlvbiBpbiBub3JtYWxpemUuIFRoZSBtYXAgY29uZmlnIHZhbHVlcyBtdXN0CiAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIHNvIGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lUGFydHNbMV07CiAgICAgICAgICAgICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIHRoZSBpZCBpcyBhIHBsdWdpbiBpZCB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0IG5lZWRzCiAgICAgICAgICAgIC8vbm9ybWFsaXphdGlvbiwgc3RhbXAgaXQgd2l0aCBhIHVuaXF1ZSBJRCBzbyB0d28gbWF0Y2hpbmcgcmVsYXRpdmUKICAgICAgICAgICAgLy9pZHMgdGhhdCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgogICAgICAgICAgICBzdWZmaXggPSBwcmVmaXggJiYgIXBsdWdpbk1vZHVsZSAmJiAhaXNOb3JtYWxpemVkID8KICAgICAgICAgICAgICAgICAgICAgJ191bm5vcm1hbGl6ZWQnICsgKHVubm9ybWFsaXplZENvdW50ZXIgKz0gMSkgOgogICAgICAgICAgICAgICAgICAgICAnJzsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCwKICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAogICAgICAgICAgICAgICAgcGFyZW50TWFwOiBwYXJlbnRNb2R1bGVNYXAsCiAgICAgICAgICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAogICAgICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWU6IG9yaWdpbmFsTmFtZSwKICAgICAgICAgICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKICAgICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ICsgJyEnICsgbm9ybWFsaXplZE5hbWUgOgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkgKyBzdWZmaXgKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoIW1vZCkgewogICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRleHQuTW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKGhhc1Byb3AoZGVmaW5lZCwgaWQpICYmCiAgICAgICAgICAgICAgICAgICAgKCFtb2QgfHwgbW9kLmRlZmluZUVtaXRDb21wbGV0ZSkpIHsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICBmbihkZWZpbmVkW2lkXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtb2QgPSBnZXRNb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgICAgIGlmIChtb2QuZXJyb3IgJiYgbmFtZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIGZuKG1vZC5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG1vZC5vbihuYW1lLCBmbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyLCBlcnJiYWNrKSB7CiAgICAgICAgICAgIHZhciBpZHMgPSBlcnIucmVxdWlyZU1vZHVsZXMsCiAgICAgICAgICAgICAgICBub3RpZmllZCA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVhY2goaWRzLCBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBlcnJvciBvbiBtb2R1bGUsIHNvIGl0IHNraXBzIHRpbWVvdXQgY2hlY2tzLgogICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJyb3IgPSBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFub3RpZmllZCkgewogICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yKGVycik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFuc2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncwogICAgICAgICAqIGRlZlF1ZXVlLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsKICAgICAgICAgICAgLy9QdXNoIGFsbCB0aGUgZ2xvYmFsRGVmUXVldWUgaXRlbXMgaW50byB0aGUgY29udGV4dCdzIGRlZlF1ZXVlCiAgICAgICAgICAgIGlmIChnbG9iYWxEZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGVhY2goZ2xvYmFsRGVmUXVldWUsIGZ1bmN0aW9uKHF1ZXVlSXRlbSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IHF1ZXVlSXRlbVswXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnB1c2gocXVldWVJdGVtKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaGFuZGxlcnMgPSB7CiAgICAgICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgaWYgKG1vZC5yZXF1aXJlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5yZXF1aXJlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtb2QubWFwKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdleHBvcnRzJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgbW9kLnVzaW5nRXhwb3J0cyA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRlZmluZWRbbW9kLm1hcC5pZF0gPSBtb2QuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QuZXhwb3J0cyA9IGRlZmluZWRbbW9kLm1hcC5pZF0gPSB7fSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnbW9kdWxlJzogZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgaWYgKG1vZC5tb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLm1vZHVsZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxlID0gewogICAgICAgICAgICAgICAgICAgICAgICBpZDogbW9kLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBtb2QubWFwLnVybCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0T3duKGNvbmZpZy5jb25maWcsIG1vZC5tYXAuaWQpIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzOiBtb2QuZXhwb3J0cyB8fCAobW9kLmV4cG9ydHMgPSB7fSkKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNsZWFuUmVnaXN0cnkoaWQpIHsKICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5lcnkgdXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgogICAgICAgICAgICBkZWxldGUgcmVnaXN0cnlbaWRdOwogICAgICAgICAgICBkZWxldGUgZW5hYmxlZFJlZ2lzdHJ5W2lkXTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGJyZWFrQ3ljbGUobW9kLCB0cmFjZWQsIHByb2Nlc3NlZCkgewogICAgICAgICAgICB2YXIgaWQgPSBtb2QubWFwLmlkOwoKICAgICAgICAgICAgaWYgKG1vZC5lcnJvcikgewogICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgbW9kLmVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRyYWNlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgZWFjaChtb2QuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkZXBJZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBJZCk7CgogICAgICAgICAgICAgICAgICAgIC8vT25seSBmb3JjZSB0aGluZ3MgdGhhdCBoYXZlIG5vdCBjb21wbGV0ZWQKICAgICAgICAgICAgICAgICAgICAvL2JlaW5nIGRlZmluZWQsIHNvIHN0aWxsIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAvL2FuZCBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBtYXRjaGVkIHVwCiAgICAgICAgICAgICAgICAgICAgLy9pbiB0aGUgbW9kdWxlIGFscmVhZHkuCiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcCAmJiAhbW9kLmRlcE1hdGNoZWRbaV0gJiYgIXByb2Nlc3NlZFtkZXBJZF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldE93bih0cmFjZWQsIGRlcElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmRlZmluZURlcChpLCBkZWZpbmVkW2RlcElkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuY2hlY2soKTsgLy9wYXNzIGZhbHNlPwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShkZXAsIHRyYWNlZCwgcHJvY2Vzc2VkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcHJvY2Vzc2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZGVkKCkgewogICAgICAgICAgICB2YXIgZXJyLCB1c2luZ1BhdGhGYWxsYmFjaywKICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNvbmZpZy53YWl0U2Vjb25kcyAqIDEwMDAsCiAgICAgICAgICAgICAgICAvL0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIHdhaXQgaW50ZXJ2YWwgYnkgdXNpbmcgd2FpdFNlY29uZHMgb2YgMC4KICAgICAgICAgICAgICAgIGV4cGlyZWQgPSB3YWl0SW50ZXJ2YWwgJiYgKGNvbnRleHQuc3RhcnRUaW1lICsgd2FpdEludGVydmFsKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpLAogICAgICAgICAgICAgICAgbm9Mb2FkcyA9IFtdLAogICAgICAgICAgICAgICAgcmVxQ2FsbHMgPSBbXSwKICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IGZhbHNlLAogICAgICAgICAgICAgICAgbmVlZEN5Y2xlQ2hlY2sgPSB0cnVlOwoKICAgICAgICAgICAgLy9EbyBub3QgYm90aGVyIGlmIHRoaXMgY2FsbCB3YXMgYSByZXN1bHQgb2YgYSBjeWNsZSBicmVhay4KICAgICAgICAgICAgaWYgKGluQ2hlY2tMb2FkZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IHRydWU7CgogICAgICAgICAgICAvL0ZpZ3VyZSBvdXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgbW9kdWxlcy4KICAgICAgICAgICAgZWFjaFByb3AoZW5hYmxlZFJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFwID0gbW9kLm1hcCwKICAgICAgICAgICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKCiAgICAgICAgICAgICAgICAvL1NraXAgdGhpbmdzIHRoYXQgYXJlIG5vdCBlbmFibGVkIG9yIGluIGVycm9yIHN0YXRlLgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIW1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgIHJlcUNhbGxzLnB1c2gobW9kKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CiAgICAgICAgICAgICAgICAgICAgLy9iZWVuIGluaXRlZCBhbmQgdGltZSBpcyB1cCwgcmVtZW1iZXIgaXQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmIGV4cGlyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nUGF0aEZhbGxiYWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0xvYWRzLnB1c2gobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vZC5pbml0ZWQgJiYgbW9kLmZldGNoZWQgJiYgbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ObyByZWFzb24gdG8ga2VlcCBsb29raW5nIGZvciB1bmZpbmlzaGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvYWRpbmcuIElmIHRoZSBvbmx5IHN0aWxsTG9hZGluZyBpcyBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtlZXAgZ29pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JlY2F1c2UgaXQgbWF5IGJlIHRoYXQgYSBwbHVnaW4gcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaXMgd2FpdGluZyBvbiBhIG5vbi1wbHVnaW4gY3ljbGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAvL0lmIHdhaXQgdGltZSBleHBpcmVkLCB0aHJvdyBlcnJvciBvZiB1bmxvYWRlZCBtb2R1bGVzLgogICAgICAgICAgICAgICAgZXJyID0gbWFrZUVycm9yKCd0aW1lb3V0JywgJ0xvYWQgdGltZW91dCBmb3IgbW9kdWxlczogJyArIG5vTG9hZHMsIG51bGwsIG5vTG9hZHMpOwogICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKGVycik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vTm90IGV4cGlyZWQsIGNoZWNrIGZvciBhIGN5Y2xlLgogICAgICAgICAgICBpZiAobmVlZEN5Y2xlQ2hlY2spIHsKICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMsIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKG1vZCwge30sIHt9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIHN0aWxsIHdhaXRpbmcgb24gbG9hZHMsIGFuZCB0aGUgd2FpdGluZyBsb2FkIGlzIHNvbWV0aGluZwogICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRoZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZwogICAgICAgICAgICAvL3NjcmlwdHMsIHRoZW4ganVzdCB0cnkgYmFjayBsYXRlci4KICAgICAgICAgICAgaWYgKCghZXhwaXJlZCB8fCB1c2luZ1BhdGhGYWxsYmFjaykgJiYgc3RpbGxMb2FkaW5nKSB7CiAgICAgICAgICAgICAgICAvL1NvbWV0aGluZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQogICAgICAgICAgICAgICAgLy9pZiBhIHRpbWVvdXQgaXMgbm90IGFscmVhZHkgaW4gZWZmZWN0LgogICAgICAgICAgICAgICAgaWYgKChpc0Jyb3dzZXIgfHwgaXNXZWJXb3JrZXIpICYmICFjaGVja0xvYWRlZFRpbWVvdXRJZCkgewogICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIE1vZHVsZSA9IGZ1bmN0aW9uIChtYXApIHsKICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBnZXRPd24odW5kZWZFdmVudHMsIG1hcC5pZCkgfHwge307CiAgICAgICAgICAgIHRoaXMubWFwID0gbWFwOwogICAgICAgICAgICB0aGlzLnNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1hcC5pZCk7CiAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0cyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkID0gW107CiAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwcyA9IHt9OwogICAgICAgICAgICB0aGlzLmRlcENvdW50ID0gMDsKCiAgICAgICAgICAgIC8qIHRoaXMuZXhwb3J0cyB0aGlzLmZhY3RvcnkKICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCiAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCwgdGhpcy5mZXRjaGVkCiAgICAgICAgICAgICovCiAgICAgICAgfTsKCiAgICAgICAgTW9kdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMsIGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMgaWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCiAgICAgICAgICAgICAgICAvL2FyZSBtdWx0aXBsZSBkZWZpbmUgY2FsbHMgZm9yIHRoZSBzYW1lIG1vZHVsZS4gVGhhdCBpcyBub3QKICAgICAgICAgICAgICAgIC8vYSBub3JtYWwsIGNvbW1vbiBjYXNlLCBidXQgaXQgaXMgYWxzbyBub3QgdW5leHBlY3RlZC4KICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWdpc3RlciBmb3IgZXJyb3JzIG9uIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgIHRoaXMub24oJ2Vycm9yJywgZXJyYmFjayk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiBubyBlcnJiYWNrIGFscmVhZHksIGJ1dCB0aGVyZSBhcmUgZXJyb3IgbGlzdGVuZXJzCiAgICAgICAgICAgICAgICAgICAgLy9vbiB0aGlzIG1vZHVsZSwgc2V0IHVwIGFuIGVycmJhY2sgdG8gcGFzcyB0byB0aGUgZGVwcy4KICAgICAgICAgICAgICAgICAgICBlcnJiYWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vRG8gYSBjb3B5IG9mIHRoZSBkZXBlbmRlbmN5IGFycmF5LCBzbyB0aGF0CiAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJlIG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKICAgICAgICAgICAgICAgIC8vInNoaW0iIGRlcHMgYXJlIHBhc3NlZCBpbiBoZXJlIGRpcmVjdGx5LCBhbmQKICAgICAgICAgICAgICAgIC8vZG9pbmcgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZXBNYXBzIGFycmF5CiAgICAgICAgICAgICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IGRlcE1hcHMgJiYgZGVwTWFwcy5zbGljZSgwKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVycmJhY2sgPSBlcnJiYWNrOwoKICAgICAgICAgICAgICAgIC8vSW5kaWNhdGUgdGhpcyBtb2R1bGUgaGFzIGJlIGluaXRpYWxpemVkCiAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgdGhpcy5pZ25vcmUgPSBvcHRpb25zLmlnbm9yZTsKCiAgICAgICAgICAgICAgICAvL0NvdWxkIGhhdmUgb3B0aW9uIHRvIGluaXQgdGhpcyBtb2R1bGUgaW4gZW5hYmxlZCBtb2RlLAogICAgICAgICAgICAgICAgLy9vciBjb3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBtYXJrZWQgYXMgZW5hYmxlZC4gSG93ZXZlciwKICAgICAgICAgICAgICAgIC8vdGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwogICAgICAgICAgICAgICAgLy9pZiBlbmFibGVkIHByZXZpb3VzbHksIG5vdyB0cmlnZ2VyIGRlcGVuZGVuY2llcyBhcyBlbmFibGVkLgogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1vZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgIC8vV2lsbCBjYWxsIHRoaXMuY2hlY2soKQogICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGRlZmluZURlcDogZnVuY3Rpb24gKGksIGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBjeWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KICAgICAgICAgICAgICAgIC8vZXhwb3J0IGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGVwTWF0Y2hlZFtpXSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZFtpXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCAtPSAxOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGRlcEV4cG9ydHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBmZXRjaDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZmV0Y2hlZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwoKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcDsKCiAgICAgICAgICAgICAgICAvL0lmIHRoZSBtYW5hZ2VyIGlzIGZvciBhIHBsdWdpbiBtYW5hZ2VkIHJlc291cmNlLAogICAgICAgICAgICAgICAgLy9hc2sgdGhlIHBsdWdpbiB0byBsb2FkIGl0IG5vdy4KICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ha2VSZXF1aXJlKHRoaXMubWFwLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICB9KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhpcy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLm1hcC51cmw7CgogICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICBpZiAoIXVybEZldGNoZWRbdXJsXSkgewogICAgICAgICAgICAgICAgICAgIHVybEZldGNoZWRbdXJsXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRoaXMubWFwLmlkLCB1cmwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENoZWNrcyBpZiB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGRlZmluZSBpdHNlbGYsIGFuZCBpZiBzbywKICAgICAgICAgICAgICogZGVmaW5lIGl0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY2hlY2s6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGVyciwgY2pzTW9kdWxlLAogICAgICAgICAgICAgICAgICAgIGlkID0gdGhpcy5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgZmV0Y2ggaWYgbm90IGFscmVhZHkgaW4gdGhlIGRlZlF1ZXVlLgogICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChjb250ZXh0LmRlZlF1ZXVlTWFwLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCB0aGlzLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVmaW5pbmcpIHsKICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNvdWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKICAgICAgICAgICAgICAgICAgICAvL3RoYXQgd291bGQgcmVzdWx0IGluIGNoZWNraW5nIHRoaXMgbW9kdWxlIHRvCiAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUgaXRzZWxmIGFnYWluLiBJZiBhbHJlYWR5IGluIHRoZSBwcm9jZXNzCiAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZmFjdG9yeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgaXMgYW4gZXJyb3IgbGlzdGVuZXIsIGZhdm9yIHBhc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRocm93aW5nIGFuIGVycm9yLiBIb3dldmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmx5IGRvIGl0IGZvciBkZWZpbmUoKSdkICBtb2R1bGVzLiByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VycmJhY2tzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZvciBmYWlsdXJlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGVpciBjYWxsYmFja3MgKCM2OTkpLiBIb3dldmVyIGlmIGEgZ2xvYmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29uRXJyb3IgaXMgc2V0LCB1c2UgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5ldmVudHMuZXJyb3IgJiYgdGhpcy5tYXAuaXNEZWZpbmUpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IgIT09IGRlZmF1bHRPbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhdm9yIHJldHVybiB2YWx1ZSBvdmVyIGV4cG9ydHMuIElmIG5vZGUvY2pzIGluIHBsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHdpbGwgbm90IGhhdmUgYSByZXR1cm4gdmFsdWUgYW55d2F5LiBGYXZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kdWxlLmV4cG9ydHMgYXNzaWdubWVudCBvdmVyIGV4cG9ydHMgb2JqZWN0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmIGV4cG9ydHMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZSA9IHRoaXMubW9kdWxlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjanNNb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNqc01vZHVsZS5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51c2luZ0V4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9leHBvcnRzIGFscmVhZHkgc2V0IHRoZSBkZWZpbmVkIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNYXAgPSB0aGlzLm1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSB0aGlzLm1hcC5pc0RlZmluZSA/IFt0aGlzLm1hcC5pZF0gOiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlVHlwZSA9IHRoaXMubWFwLmlzRGVmaW5lID8gJ2RlZmluZScgOiAncmVxdWlyZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoKHRoaXMuZXJyb3IgPSBlcnIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBsaXRlcmFsIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gZmFjdG9yeTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBvcnRzID0gZXhwb3J0czsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiAhdGhpcy5pZ25vcmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWRbaWRdID0gZXhwb3J0czsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLm9uUmVzb3VyY2VMb2FkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0xvYWRNYXBzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzTG9hZE1hcHMucHVzaChkZXBNYXAubm9ybWFsaXplZE1hcCB8fCBkZXBNYXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1hcCwgcmVzTG9hZE1hcHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHVwCiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQgdGhlIGRlZmluZSBzdGFnZS4gQWxsb3cgY2FsbGluZyBjaGVjayBhZ2FpbgogICAgICAgICAgICAgICAgICAgIC8vdG8gYWxsb3cgZGVmaW5lIG5vdGlmaWNhdGlvbnMgYmVsb3cgaW4gdGhlIGNhc2Ugb2YgYQogICAgICAgICAgICAgICAgICAgIC8vY3ljbGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWZpbmVkICYmICF0aGlzLmRlZmluZUVtaXR0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWZpbmVkJywgdGhpcy5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0Q29tcGxldGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjYWxsUGx1Z2luOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXAsCiAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgLy9NYXAgYWxyZWFkeSBub3JtYWxpemVkIHRoZSBwcmVmaXguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4KTsKCiAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChwbHVnaW5NYXApOwoKICAgICAgICAgICAgICAgIG9uKHBsdWdpbk1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW4pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZCwgbm9ybWFsaXplZE1hcCwgbm9ybWFsaXplZE1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgdGhpcy5tYXAuaWQpLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5tYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHRoaXMubWFwLnBhcmVudE1hcCA/IHRoaXMubWFwLnBhcmVudE1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtYXAucGFyZW50TWFwLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3JtYWxpemVkLCB3YWl0IGZvciB0aGF0CiAgICAgICAgICAgICAgICAgICAgLy9ub3JtYWxpemVkIG5hbWUgdG8gbG9hZCBpbnN0ZWFkIG9mIGNvbnRpbnVpbmcuCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4ubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmVmaXggYW5kIG5hbWUgc2hvdWxkIGFscmVhZHkgYmUgbm9ybWFsaXplZCwgbm8gbmVlZAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29uZmlnIGFnYWluIGVpdGhlci4KICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCArICchJyArIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnBhcmVudE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uKG5vcm1hbGl6ZWRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAubm9ybWFsaXplZE1hcCA9IG5vcm1hbGl6ZWRNYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QgPSBnZXRPd24ocmVnaXN0cnksIG5vcm1hbGl6ZWRNYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZE1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobm9ybWFsaXplZE1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5vbignZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9JZiBhIHBhdGhzIGNvbmZpZywgdGhlbiBqdXN0IGxvYWQgdGhhdCBmaWxlIGluc3RlYWQgdG8KICAgICAgICAgICAgICAgICAgICAvL3Jlc29sdmUgdGhlIHBsdWdpbiwgYXMgaXQgaXMgYnVpbHQgaW50byB0aGF0IHBhdGhzIGxheWVyLgogICAgICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC51cmwgPSBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBsb2FkID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgbG9hZC5lcnJvciA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZvciB0aGlzIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IHdpbGwgbmV2ZXIgYmUgcmVzb2x2ZWQgb3RoZXJ3aXNlIG5vdy4KICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShtb2QubWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vQWxsb3cgcGx1Z2lucyB0byBsb2FkIG90aGVyIGNvZGUgd2l0aG91dCBoYXZpbmcgdG8ga25vdyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCiAgICAgICAgICAgICAgICAgICAgbG9hZC5mcm9tVGV4dCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHRleHQsIHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTWFwID0gbWFrZU1vZHVsZU1hcChtb2R1bGVOYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ludGVyYWN0aXZlID0gdXNlSW50ZXJhY3RpdmU7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0FzIG9mIDIuMS4wLCBzdXBwb3J0IGp1c3QgcGFzc2luZyB0aGUgdGV4dCwgdG8gcmVpbmZvcmNlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZnJvbVRleHQgb25seSBiZWluZyBjYWxsZWQgb25jZSBwZXIgcmVzb3VyY2UuIFN0aWxsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUgb2YgcGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBtb2R1bGVOYW1lIGluIGZhdm9yIG9mIHRoZSBpbnRlcm5hbCByZWYuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dEFsdDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcgZm9yIElFIGZvciBhbnkgZGVmaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbHMgaW4gdGhlIHRleHQsIHRoZW4gdHVybiBpdCBiYWNrIG9uIGF0IHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5nIGEgbW9kdWxlIGluc3RhbmNlIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAvL2l0LgogICAgICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHJhbnNmZXIgYW55IGNvbmZpZyB0byB0aGlzIG90aGVyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3AoY29uZmlnLmNvbmZpZywgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVdID0gY29uZmlnLmNvbmZpZ1tpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuZXhlYyh0ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdmcm9tdGV4dGV2YWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbVRleHQgZXZhbCBmb3IgJyArIGlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJyArIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhlIHBsdWdpbgogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVsZSB0byB0aGUgdmFsdWUgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZSBJRC4KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlKFttb2R1bGVOYW1lXSwgbG9hZCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vVXNlIHBhcmVudE5hbWUgaGVyZSBzaW5jZSB0aGUgcGx1Z2luJ3MgbmFtZSBpcyBub3QgcmVsaWFibGUsCiAgICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3aXRoIG5vIHBhdGggdGhhdCBhY3R1YWxseSB3YW50cyB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVmZXJlbmNlIHRoZSBwYXJlbnROYW1lJ3MgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW4ubG9hZChtYXAubmFtZSwgbG9jYWxSZXF1aXJlLCBsb2FkLCBjb25maWcpOwogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9IHBsdWdpbk1hcDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgZW5hYmxlZFJlZ2lzdHJ5W3RoaXMubWFwLmlkXSA9IHRoaXM7CiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vU2V0IGZsYWcgbWVudGlvbmluZyB0aGF0IHRoZSBtb2R1bGUgaXMgZW5hYmxpbmcsCiAgICAgICAgICAgICAgICAvL3NvIHRoYXQgaW1tZWRpYXRlIGNhbGxzIHRvIHRoZSBkZWZpbmVkIGNhbGxiYWNrcwogICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0cmlnZ2VyIGluYWR2ZXJ0ZW50IGxvYWQKICAgICAgICAgICAgICAgIC8vd2l0aCB0aGUgZGVwQ291bnQgc3RpbGwgYmVpbmcgemVyby4KICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcE1hcCwgaSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOwoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcE1hcCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRlcE1hcAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCB3aXJlZCB1cCB0byB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgICAgZGVwTWFwID0gbWFrZU1vZHVsZU1hcChkZXBNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWFwLmlzRGVmaW5lID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLnNraXBNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZ2V0T3duKGhhbmRsZXJzLCBkZXBNYXAuaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGhhbmRsZXIodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51bmRlZmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmVEZXAoaSwgZGVwRXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCB0aGlzLmVycmJhY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGlyZWN0IGVycmJhY2sgb24gdGhpcyBtb2R1bGUsIGJ1dCBzb21ldGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgaXMgbGlzdGVuaW5nIGZvciBlcnJvcnMsIHNvIGJlIHN1cmUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3IgY29ycmVjdGx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1hcC5pZDsKICAgICAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF07CgogICAgICAgICAgICAgICAgICAgIC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZScKICAgICAgICAgICAgICAgICAgICAvL0Fsc28sIGRvbid0IGNhbGwgZW5hYmxlIGlmIGl0IGlzIGFscmVhZHkgZW5hYmxlZCwKICAgICAgICAgICAgICAgICAgICAvL2ltcG9ydGFudCBpbiBjaXJjdWxhciBkZXBlbmRlbmN5IGNhc2VzLgogICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUoZGVwTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBwbHVnaW4gdGhhdCBpcyB1c2VkIGluCiAgICAgICAgICAgICAgICAvL2EgZGVwZW5kZW5jeQogICAgICAgICAgICAgICAgZWFjaFByb3AodGhpcy5wbHVnaW5NYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChwbHVnaW5NYXApIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBwbHVnaW5NYXAuaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxpbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBvbjogZnVuY3Rpb24gKG5hbWUsIGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgY2JzID0gdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICBpZiAoIWNicykgewogICAgICAgICAgICAgICAgICAgIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdID0gW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZXZlbnRzW25hbWVdLCBmdW5jdGlvbiAoY2IpIHsKICAgICAgICAgICAgICAgICAgICBjYihldnQpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgICAgIC8vTm93IHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgd2FzIHRyaWdnZXJlZCwgcmVtb3ZlCiAgICAgICAgICAgICAgICAgICAgLy90aGUgbGlzdGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKICAgICAgICAgICAgICAgICAgICAvL2NhbiBzdGF5IGFyb3VuZCBmb3IgYSB3aGlsZSBpbiB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2FsbEdldE1vZHVsZShhcmdzKSB7CiAgICAgICAgICAgIC8vU2tpcCBtb2R1bGVzIGFscmVhZHkgZGVmaW5lZC4KICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3NbMF0pKSB7CiAgICAgICAgICAgICAgICBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChhcmdzWzBdLCBudWxsLCB0cnVlKSkuaW5pdChhcmdzWzFdLCBhcmdzWzJdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobm9kZSwgZnVuYywgbmFtZSwgaWVOYW1lKSB7CiAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJRTkKICAgICAgICAgICAgLy9pc3N1ZSwgc2VlIGF0dGFjaEV2ZW50L2FkZEV2ZW50TGlzdGVuZXIgY29tbWVudCBlbHNld2hlcmUKICAgICAgICAgICAgLy9pbiB0aGlzIGZpbGUuCiAgICAgICAgICAgIGlmIChub2RlLmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7CiAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJZiBub3QgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciwgd2hpY2ggd2lsbCBiZQogICAgICAgICAgICAgICAgLy91c2VmdWwgdG8ga25vdy4KICAgICAgICAgICAgICAgIGlmIChpZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBub2RlLmRldGFjaEV2ZW50KGllTmFtZSwgZnVuYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgZnVuYywgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhbiBldmVudCBmcm9tIGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBpdCwKICAgICAgICAgKiBhbmQgdGhlbiByZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMgb24gdGhlIG5vZGUuCiAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0CiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRTY3JpcHREYXRhKGV2dCkgewogICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CiAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICB2YXIgbm9kZSA9IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OwoKICAgICAgICAgICAgLy9SZW1vdmUgdGhlIGxpc3RlbmVycyBvbmNlIGhlcmUuCiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5c3RhdGVjaGFuZ2UnKTsKICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdEVycm9yLCAnZXJyb3InKTsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBub2RlOiBub2RlLAogICAgICAgICAgICAgICAgaWQ6IG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgewogICAgICAgICAgICB2YXIgYXJnczsKCiAgICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLCBpbnRha2UgdGhlbSBub3cuCiAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBnZXQgcHJvcGVybHkgcHJvY2Vzc2VkLgogICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdtaXNtYXRjaCcsICdNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1bGU6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFjdG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUoKSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSB7CiAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZTogY29udGV4dE5hbWUsCiAgICAgICAgICAgIHJlZ2lzdHJ5OiByZWdpc3RyeSwKICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKICAgICAgICAgICAgdXJsRmV0Y2hlZDogdXJsRmV0Y2hlZCwKICAgICAgICAgICAgZGVmUXVldWU6IGRlZlF1ZXVlLAogICAgICAgICAgICBkZWZRdWV1ZU1hcDoge30sCiAgICAgICAgICAgIE1vZHVsZTogTW9kdWxlLAogICAgICAgICAgICBtYWtlTW9kdWxlTWFwOiBtYWtlTW9kdWxlTWFwLAogICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAogICAgICAgICAgICBvbkVycm9yOiBvbkVycm9yLAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIGNvbmZpZyBvYmplY3QgdG8gaW50ZWdyYXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAoY2ZnKSB7CiAgICAgICAgICAgICAgICAvL01ha2Ugc3VyZSB0aGUgYmFzZVVybCBlbmRzIGluIGEgc2xhc2guCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VVcmwuY2hhckF0KGNmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgKz0gJy8nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IG9sZCBzdHlsZSB1cmxBcmdzIHN0cmluZyB0byBhIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjZmcudXJsQXJncyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdXJsQXJncyA9IGNmZy51cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIGNmZy51cmxBcmdzID0gZnVuY3Rpb24oaWQsIHVybCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBzaW5jZSB0aGV5IHJlcXVpcmUgc3BlY2lhbCBwcm9jZXNzaW5nLAogICAgICAgICAgICAgICAgLy90aGV5IGFyZSBhZGRpdGl2ZS4KICAgICAgICAgICAgICAgIHZhciBzaGltID0gY29uZmlnLnNoaW0sCiAgICAgICAgICAgICAgICAgICAgb2JqcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbWFwOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgIGlmIChvYmpzW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbihjb25maWdbcHJvcF0sIHZhbHVlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL1JldmVyc2UgbWFwIHRoZSBidW5kbGVzCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmJ1bmRsZXMpIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuYnVuZGxlcywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUsIGZ1bmN0aW9uICh2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXNNYXBbdl0gPSBwcm9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL01lcmdlIHNoaW0KICAgICAgICAgICAgICAgIGlmIChjZmcuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzOiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbHVlLmV4cG9ydHMgfHwgdmFsdWUuaW5pdCkgJiYgIXZhbHVlLmV4cG9ydHNGbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwb3J0c0ZuID0gY29udGV4dC5tYWtlU2hpbUV4cG9ydHModmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHNoaW1baWRdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoaW0gPSBzaGltOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2VzIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgICAgIGlmIChjZmcucGFja2FnZXMpIHsKICAgICAgICAgICAgICAgICAgICBlYWNoKGNmZy5wYWNrYWdlcywgZnVuY3Rpb24gKHBrZ09iaikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24sIG5hbWU7CgogICAgICAgICAgICAgICAgICAgICAgICBwa2dPYmogPSB0eXBlb2YgcGtnT2JqID09PSAnc3RyaW5nJyA/IHtuYW1lOiBwa2dPYmp9IDogcGtnT2JqOwoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBrZ09iai5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGF0aHNbbmFtZV0gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2F2ZSBwb2ludGVyIHRvIG1haW4gbW9kdWxlIElEIGZvciBwa2cgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgbGVhZGluZyBkb3QgaW4gbWFpbiwgc28gbWFpbiBwYXRocyBhcmUgbm9ybWFsaXplZCwKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGluZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZW52cyBoYXZlIGRpZmZlcmVudCBjb252ZW50aW9uczogc29tZSB1c2UgYSBtb2R1bGUgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zb21lIHVzZSBhIGZpbGUgbmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBrZ3NbbmFtZV0gPSBwa2dPYmoubmFtZSArICcvJyArIChwa2dPYmoubWFpbiB8fCAnbWFpbicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVnRXhwLCAnJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgLy91cGRhdGUgdGhlIG1hcHMgZm9yIHRoZW0sIHNpbmNlIHRoZWlyIGluZm8sIGxpa2UgVVJMcyB0byBsb2FkLAogICAgICAgICAgICAgICAgLy9tYXkgaGF2ZSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgYWxyZWFkeSBoYXMgaW5pdCBjYWxsZWQsIHNpbmNlIGl0IGlzIHRvbwogICAgICAgICAgICAgICAgICAgIC8vbGF0ZSB0byBtb2RpZnkgdGhlbSwgYW5kIGlnbm9yZSB1bm5vcm1hbGl6ZWQgb25lcwogICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiAhbW9kLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbW9kLm1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIG51bGwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhlbiBjYWxsCiAgICAgICAgICAgICAgICAvL3JlcXVpcmUgd2l0aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJlcXVpcmUgaXMgZGVmaW5lZCBhcyBhCiAgICAgICAgICAgICAgICAvL2NvbmZpZyBvYmplY3QgYmVmb3JlIHJlcXVpcmUuanMgaXMgbG9hZGVkLgogICAgICAgICAgICAgICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcuZGVwcyB8fCBbXSwgY2ZnLmNhbGxiYWNrKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VTaGltRXhwb3J0czogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pbml0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xvYmFsLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0IHx8ICh2YWx1ZS5leHBvcnRzICYmIGdldEdsb2JhbCh2YWx1ZS5leHBvcnRzKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gZm47CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlUmVxdWlyZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9jYWxSZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtYXAsIHJlcXVpcmVNb2Q7CgogICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suX19yZXF1aXJlSnNCdWlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcHMgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnZhbGlkIGNhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcigncmVxdWlyZWFyZ3MnLCAnSW52YWxpZCByZXF1aXJlIGNhbGwnKSwgZXJyYmFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgcmVxdWlyZXxleHBvcnRzfG1vZHVsZSBhcmUgcmVxdWVzdGVkLCBnZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9yIHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0OgogICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgb25seSB3b3JrcyB3aGlsZSBtb2R1bGUgaXMgYmVpbmcgZGVmaW5lZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbE1hcCAmJiBoYXNQcm9wKGhhbmRsZXJzLCBkZXBzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2RlcHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxlLiBJZiByZXF1aXJlLmdldCBpcwogICAgICAgICAgICAgICAgICAgICAgICAvL2F2YWlsYWJsZSAoYXMgaW4gdGhlIE5vZGUgYWRhcHRlciksIHByZWZlciB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFwLCBsb2NhbFJlcXVpcmUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAuLgogICAgICAgICAgICAgICAgICAgICAgICBtYXAgPSBtYWtlTW9kdWxlTWFwKGRlcHMsIHJlbE1hcCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm90bG9hZGVkJywgJ01vZHVsZSBuYW1lICInICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtdKScpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZWRbaWRdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9HcmFiIGRlZmluZXMgd2FpdGluZyBpbiB0aGUgZ2xvYmFsIHF1ZXVlLgogICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgLy9NYXJrIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFzIG5lZWRpbmcgdG8gYmUgbG9hZGVkLgogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL1NvbWUgZGVmaW5lcyBjb3VsZCBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVxdWlyZSBjYWxsLCBjb2xsZWN0IHRoZW0uCiAgICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QgPSBnZXRNb2R1bGUobWFrZU1vZHVsZU1hcChudWxsLCByZWxNYXApKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3RvcmUgaWYgbWFwIGNvbmZpZyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxsIGZvciBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QuaW5pdChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbWl4aW4obG9jYWxSZXF1aXJlLCB7CiAgICAgICAgICAgICAgICAgICAgaXNCcm93c2VyOiBpc0Jyb3dzZXIsCgogICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgKyAuZXh0ZW5zaW9uIGludG8gYW4gVVJMIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICogKlJlcXVpcmVzKiB0aGUgdXNlIG9mIGEgbW9kdWxlIG5hbWUuIEl0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcKICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2UgbmFtZVRvVXJsLgogICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIHRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZVBsdXNFeHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gbW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zcGxpdCgnLycpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50ID09PSAnLi4nOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9IYXZlIGEgZmlsZSBleHRlbnNpb24gYWxpYXMsIGFuZCBpdCBpcyBub3QgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZG90cyBmcm9tIGEgcmVsYXRpdmUgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiAoIWlzUmVsYXRpdmUgfHwgaW5kZXggPiAxKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKGluZGV4LCBtb2R1bGVOYW1lUGx1c0V4dC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZVBsdXNFeHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9Vcmwobm9ybWFsaXplKG1vZHVsZU5hbWVQbHVzRXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxNYXAgJiYgcmVsTWFwLmlkLCB0cnVlKSwgZXh0LCAgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBpZCkgfHwgaGFzUHJvcChyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vT25seSBhbGxvdyB1bmRlZiBvbiB0b3AgbGV2ZWwgcmVxdWlyZSBjYWxscwogICAgICAgICAgICAgICAgaWYgKCFyZWxNYXApIHsKICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUudW5kZWYgPSBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIGFueSB3YWl0aW5nIGRlZmluZSgpIGNhbGxzIHRvIHRoaXMgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgLy9maXggZm9yICM0MDgKICAgICAgICAgICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbW9kLnVuZGVmZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQoaWQpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlZmluZWRbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdXJsRmV0Y2hlZFttYXAudXJsXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVuZGVmRXZlbnRzW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gcXVldWVkIGRlZmluZXMgdG9vLiBHbyBiYWNrd2FyZHMKICAgICAgICAgICAgICAgICAgICAgICAgLy9pbiBhcnJheSBzbyB0aGF0IHRoZSBzcGxpY2VzIGRvIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAvL21lc3MgdXAgdGhlIGl0ZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgZWFjaFJldmVyc2UoZGVmUXVldWUsIGZ1bmN0aW9uKGFyZ3MsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZlF1ZXVlLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb250ZXh0LmRlZlF1ZXVlTWFwW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSG9sZCBvbiB0byBsaXN0ZW5lcnMgaW4gY2FzZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0ZW1wdGVkIHRvIGJlIHJlbG9hZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VzaW5nIGEgZGlmZmVyZW50IGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QuZXZlbnRzLmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZkV2ZW50c1tpZF0gPSBtb2QuZXZlbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENhbGxlZCB0byBlbmFibGUgYSBtb2R1bGUgaWYgaXQgaXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5CiAgICAgICAgICAgICAqIGF3YWl0aW5nIGVuYWJsZW1lbnQuIEEgc2Vjb25kIGFyZywgcGFyZW50LCB0aGUgcGFyZW50IG1vZHVsZSwKICAgICAgICAgICAgICogaXMgcGFzc2VkIGluIGZvciBjb250ZXh0LCB3aGVuIHRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gYnkKICAgICAgICAgICAgICogdGhlIG9wdGltaXplci4gTm90IHNob3duIGhlcmUgdG8ga2VlcCBjb2RlIGNvbXBhY3QuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIChkZXBNYXApIHsKICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGRlcE1hcC5pZCk7CiAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52aXJvbm1lbnQgYWRhcHRlcnMgdG8gY29tcGxldGUgYSBsb2FkIGV2ZW50LgogICAgICAgICAgICAgKiBBIGxvYWQgZXZlbnQgY291bGQgYmUgYSBzY3JpcHQgbG9hZCBvciBqdXN0IGEgbG9hZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91cwogICAgICAgICAgICAgKiBsb2FkIGNhbGwuCiAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gcG90ZW50aWFsbHkgY29tcGxldGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb21wbGV0ZUxvYWQ6IGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICB2YXIgZm91bmQsIGFyZ3MsIG1vZCwKICAgICAgICAgICAgICAgICAgICBzaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtb2R1bGVOYW1lKSB8fCB7fSwKICAgICAgICAgICAgICAgICAgICBzaEV4cG9ydHMgPSBzaGltLmV4cG9ydHM7CgogICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBtb2R1bGVOYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFscmVhZHkgZm91bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBhbmQgYm91bmQgaXQKICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGlzIG5hbWUsIHRoZW4gdGhpcyBpcyBzb21lIG90aGVyIGFub24gbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdGluZyBmb3IgaXRzIGNvbXBsZXRlTG9hZCB0byBmaXJlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbMF0gPT09IG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3VuZCBtYXRjaGluZyBkZWZpbmUgY2FsbCBmb3IgdGhpcyBzY3JpcHQhCiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CgogICAgICAgICAgICAgICAgLy9EbyB0aGlzIGFmdGVyIHRoZSBjeWNsZSBvZiBjYWxsR2V0TW9kdWxlIGluIGNhc2UgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgLy9vZiB0aG9zZSBjYWxscy9pbml0IGNhbGxzIGNoYW5nZXMgdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kICYmICFoYXNQcm9wKGRlZmluZWQsIG1vZHVsZU5hbWUpICYmIG1vZCAmJiAhbW9kLmluaXRlZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhwb3J0cyB8fCAhZ2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kdWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm9kZWZpbmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gZGVmaW5lIGNhbGwgZm9yICcgKyBtb2R1bGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5vdCBjYWxsIGRlZmluZSgpLCBzbyBqdXN0IHNpbXVsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIGNhbGwgZm9yIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hpbS5leHBvcnRzRm5dKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lIHRvIGEgZmlsZSBwYXRoLiBTdXBwb3J0cyBjYXNlcyB3aGVyZQogICAgICAgICAgICAgKiBtb2R1bGVOYW1lIG1heSBhY3R1YWxseSBiZSBqdXN0IGFuIFVSTC4KICAgICAgICAgICAgICogTm90ZSB0aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxsIG5vcm1hbGl6ZSBvbiB0aGUgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICogaXQgaXMgYXNzdW1lZCB0byBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBUaGlzIGlzIGFuCiAgICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4gVXNlIHRvVXJsIGZvciB0aGUgcHVibGljIEFQSS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG5hbWVUb1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWUsIGV4dCwgc2tpcEV4dCkgewogICAgICAgICAgICAgICAgdmFyIHBhdGhzLCBzeW1zLCBpLCBwYXJlbnRNb2R1bGUsIHVybCwKICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoLCBidW5kbGVJZCwKICAgICAgICAgICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAocGtnTWFpbikgewogICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBwa2dNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChidW5kbGVJZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChidW5kbGVJZCwgZXh0LCBza2lwRXh0KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIGEgY29sb24gaXMgaW4gdGhlIFVSTCwgaXQgaW5kaWNhdGVzIGEgcHJvdG9jb2wgaXMgdXNlZCBhbmQgaXQgaXMganVzdAogICAgICAgICAgICAgICAgLy9hbiBVUkwgdG8gYSBmaWxlLCBvciBpZiBpdCBzdGFydHMgd2l0aCBhIHNsYXNoLCBjb250YWlucyBhIHF1ZXJ5IGFyZyAoaS5lLiA/KQogICAgICAgICAgICAgICAgLy9vciBlbmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNlciBtZWFudCB0byB1c2UgYW4gdXJsIGFuZCBub3QgYSBtb2R1bGUgaWQuCiAgICAgICAgICAgICAgICAvL1RoZSBzbGFzaCBpcyBpbXBvcnRhbnQgZm9yIHByb3RvY29sLWxlc3MgVVJMcyBhcyB3ZWxsIGFzIGZ1bGwgcGF0aHMuCiAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobW9kdWxlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRoLCBub3QgbW9kdWxlIG5hbWUgbG9va3VwLCBzbyBqdXN0IHJldHVybiBpdC4KICAgICAgICAgICAgICAgICAgICAvL0FkZCBleHRlbnNpb24gaWYgaXQgaXMgaW5jbHVkZWQuIFRoaXMgaXMgYSBiaXQgd29ua3ksIG9ubHkgbm9uLS5qcyB0aGluZ3MgcGFzcwogICAgICAgICAgICAgICAgICAgIC8vYW4gZXh0ZW5zaW9uLCB0aGlzIG1ldGhvZCBwcm9iYWJseSBuZWVkcyB0byBiZSByZXdvcmtlZC4KICAgICAgICAgICAgICAgICAgICB1cmwgPSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBhdGhzID0gY29uZmlnLnBhdGhzOwoKICAgICAgICAgICAgICAgICAgICBzeW1zID0gbW9kdWxlTmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIC8vRm9yIGVhY2ggbW9kdWxlIG5hbWUgc2VnbWVudCwgc2VlIGlmIHRoZXJlIGlzIGEgcGF0aAogICAgICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3IgaXQuIFN0YXJ0IHdpdGggbW9zdCBzcGVjaWZpYyBuYW1lCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0LgogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHN5bXMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZHVsZSA9IHN5bXMuc2xpY2UoMCwgaSkuam9pbignLycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IGdldE93bihwYXRocywgcGFyZW50TW9kdWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXksIGl0IG1lYW5zIHRoZXJlIGFyZSBhIGZldyBjaG9pY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9DaG9vc2UgdGhlIG9uZSB0aGF0IGlzIGRlc2lyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IHBhcmVudFBhdGhbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1zLnNwbGljZSgwLCBpLCBwYXJlbnRQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMgdG9nZXRoZXIsIHRoZW4gZmlndXJlIG91dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KICAgICAgICAgICAgICAgICAgICB1cmwgPSBzeW1zLmpvaW4oJy8nKTsKICAgICAgICAgICAgICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL15kYXRhXDp8XmJsb2JcOnxcPy8udGVzdCh1cmwpIHx8IHNraXBFeHQgPyAnJyA6ICcuanMnKSk7CiAgICAgICAgICAgICAgICAgICAgdXJsID0gKHVybC5jaGFyQXQoMCkgPT09ICcvJyB8fCB1cmwubWF0Y2goL15bXHdcK1wuXC1dKzovKSA/ICcnIDogY29uZmlnLmJhc2VVcmwpICsgdXJsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsQXJncyAmJiAhL15ibG9iXDovLnRlc3QodXJsKSA/CiAgICAgICAgICAgICAgICAgICAgICAgdXJsICsgY29uZmlnLnVybEFyZ3MobW9kdWxlTmFtZSwgdXJsKSA6IHVybDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8vRGVsZWdhdGVzIHRvIHJlcS5sb2FkLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8KICAgICAgICAgICAgLy9hbGxvdyBvdmVycmlkaW5nIGluIHRoZSBvcHRpbWl6ZXIuCiAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICByZXEubG9hZChjb250ZXh0LCBpZCwgdXJsKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBFeGVjdXRlcyBhIG1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbi4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uCiAgICAgICAgICAgICAqIHNvbGVseSB0byBhbGxvdyB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlcXVlbmNlIHRoZSBmaWxlcyBpbiB0aGUgYnVpbHQKICAgICAgICAgICAgICogbGF5ZXIgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcHJpdmF0ZQogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZXhlY0NiOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGFyZ3MsIGV4cG9ydHMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShleHBvcnRzLCBhcmdzKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBjYWxsYmFjayBmb3Igc2NyaXB0IGxvYWRzLCB1c2VkIHRvIGNoZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgogICAgICAgICAgICAgKgogICAgICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQgdGhlIGV2ZW50IGZyb20gdGhlIGJyb3dzZXIgZm9yIHRoZSBzY3JpcHQKICAgICAgICAgICAgICogdGhhdCB3YXMgbG9hZGVkLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb25TY3JpcHRMb2FkOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CiAgICAgICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdsb2FkJyB8fAogICAgICAgICAgICAgICAgICAgICAgICAocmVhZHlSZWdFeHAudGVzdCgoZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQpLnJlYWR5U3RhdGUpKSkgewogICAgICAgICAgICAgICAgICAgIC8vUmVzZXQgaW50ZXJhY3RpdmUgc2NyaXB0IHNvIGEgc2NyaXB0IG5vZGUgaXMgbm90IGhlbGQgb250byBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RvIGxvbmcuCiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb3V0IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYW5kIHRoZSBjb250ZXh0LgogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKGRhdGEuaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENhbGxiYWNrIGZvciBzY3JpcHQgZXJyb3JzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgb25TY3JpcHRFcnJvcjogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICBpZiAoIWhhc1BhdGhGYWxsYmFjayhkYXRhLmlkKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRzID0gW107CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdfQHInKSAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZS5kZXBNYXBzLCBmdW5jdGlvbihkZXBNYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwTWFwLmlkID09PSBkYXRhLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudHMucHVzaChrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignc2NyaXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yIGZvciAiJyArIGRhdGEuaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyZW50cy5sZW5ndGggPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiwgbmVlZGVkIGJ5OiAnICsgcGFyZW50cy5qb2luKCcsICcpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyInKSwgZXZ0LCBbZGF0YS5pZF0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUoKTsKICAgICAgICByZXR1cm4gY29udGV4dDsKICAgIH0KCiAgICAvKioKICAgICAqIE1haW4gZW50cnkgcG9pbnQuCiAgICAgKgogICAgICogSWYgdGhlIG9ubHkgYXJndW1lbnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywgdGhlbiB0aGUgbW9kdWxlIHRoYXQKICAgICAqIGlzIHJlcHJlc2VudGVkIGJ5IHRoYXQgc3RyaW5nIGlzIGZldGNoZWQgZm9yIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0LgogICAgICoKICAgICAqIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXJyYXkKICAgICAqIG9mIGRlcGVuZGVuY3kgc3RyaW5nIG5hbWVzIHRvIGZldGNoLiBBbiBvcHRpb25hbCBmdW5jdGlvbiBjYWxsYmFjayBjYW4KICAgICAqIGJlIHNwZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlLgogICAgICoKICAgICAqIE1ha2UgYSBsb2NhbCByZXEgdmFyaWFibGUgdG8gaGVscCBDYWphIGNvbXBsaWFuY2UgKGl0IGFzc3VtZXMgdGhpbmdzCiAgICAgKiBvbiBhIHJlcXVpcmUgdGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0byBnaXZlIGEgc2hvcnQKICAgICAqIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi9sb2NhbCBzY29wZSB1c2UuCiAgICAgKi8KICAgIHJlcSA9IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgb3B0aW9uYWwpIHsKCiAgICAgICAgLy9GaW5kIHRoZSByaWdodCBjb250ZXh0LCB1c2UgZGVmYXVsdAogICAgICAgIHZhciBjb250ZXh0LCBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5hbWU7CgogICAgICAgIC8vIERldGVybWluZSBpZiBoYXZlIGNvbmZpZyBvYmplY3QgaW4gdGhlIGNhbGwuCiAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvLyBkZXBzIGlzIGEgY29uZmlnIG9iamVjdAogICAgICAgICAgICBjb25maWcgPSBkZXBzOwogICAgICAgICAgICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgIC8vIEFkanVzdCBhcmdzIGlmIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMKICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyYmFjazsKICAgICAgICAgICAgICAgIGVycmJhY2sgPSBvcHRpb25hbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRlcHMgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGNvbmZpZy5jb250ZXh0OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IGdldE93bihjb250ZXh0cywgY29udGV4dE5hbWUpOwogICAgICAgIGlmICghY29udGV4dCkgewogICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbY29udGV4dE5hbWVdID0gcmVxLnMubmV3Q29udGV4dChjb250ZXh0TmFtZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnKSB7CiAgICAgICAgICAgIGNvbnRleHQuY29uZmlndXJlKGNvbmZpZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY29udGV4dC5yZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBTdXBwb3J0IHJlcXVpcmUuY29uZmlnKCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIKICAgICAqIEFNRCBsb2FkZXJzIG9uIGdsb2JhbGx5IGFncmVlZCBuYW1lcy4KICAgICAqLwogICAgcmVxLmNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHsKICAgICAgICByZXR1cm4gcmVxKGNvbmZpZyk7CiAgICB9OwoKICAgIC8qKgogICAgICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0ZXIgdGhlIGN1cnJlbnQgdGljawogICAgICogb2YgdGhlIGV2ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhlciBlbnZzCiAgICAgKiB0aGF0IGhhdmUgYSBiZXR0ZXIgc29sdXRpb24gdGhhbiBzZXRUaW1lb3V0LgogICAgICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgbGF0ZXIuCiAgICAgKi8KICAgIHJlcS5uZXh0VGljayA9IHR5cGVvZiBzZXRUaW1lb3V0ICE9PSAndW5kZWZpbmVkJyA/IGZ1bmN0aW9uIChmbikgewogICAgICAgIHNldFRpbWVvdXQoZm4sIDQpOwogICAgfSA6IGZ1bmN0aW9uIChmbikgeyBmbigpOyB9OwoKICAgIC8qKgogICAgICogRXhwb3J0IHJlcXVpcmUgYXMgYSBnbG9iYWwsIGJ1dCBvbmx5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgICAgKi8KICAgIGlmICghcmVxdWlyZSkgewogICAgICAgIHJlcXVpcmUgPSByZXE7CiAgICB9CgogICAgcmVxLnZlcnNpb24gPSB2ZXJzaW9uOwoKICAgIC8vVXNlZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHBhdGhzLgogICAgcmVxLmpzRXh0UmVnRXhwID0gL15cL3w6fFw/fFwuanMkLzsKICAgIHJlcS5pc0Jyb3dzZXIgPSBpc0Jyb3dzZXI7CiAgICBzID0gcmVxLnMgPSB7CiAgICAgICAgY29udGV4dHM6IGNvbnRleHRzLAogICAgICAgIG5ld0NvbnRleHQ6IG5ld0NvbnRleHQKICAgIH07CgogICAgLy9DcmVhdGUgZGVmYXVsdCBjb250ZXh0LgogICAgcmVxKHt9KTsKCiAgICAvL0V4cG9ydHMgc29tZSBjb250ZXh0LXNlbnNpdGl2ZSBtZXRob2RzIG9uIGdsb2JhbCByZXF1aXJlLgogICAgZWFjaChbCiAgICAgICAgJ3RvVXJsJywKICAgICAgICAndW5kZWYnLAogICAgICAgICdkZWZpbmVkJywKICAgICAgICAnc3BlY2lmaWVkJwogICAgXSwgZnVuY3Rpb24gKHByb3ApIHsKICAgICAgICAvL1JlZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2YgZWFybHkgYmluZGluZyB0byBkZWZhdWx0IGNvbnRleHQsCiAgICAgICAgLy9zbyB0aGF0IGR1cmluZyBidWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1bHQgY29udGV4dAogICAgICAgIC8vd2l0aCBpdHMgY29uZmlnIGdldHMgdXNlZC4KICAgICAgICByZXFbcHJvcF0gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0c1tkZWZDb250ZXh0TmFtZV07CiAgICAgICAgICAgIHJldHVybiBjdHgucmVxdWlyZVtwcm9wXS5hcHBseShjdHgsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgIH0pOwoKICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKICAgICAgICAvL0lmIEJBU0UgdGFnIGlzIGluIHBsYXksIHVzaW5nIGFwcGVuZENoaWxkIGlzIGEgcHJvYmxlbSBmb3IgSUU2LgogICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGllcywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4gRGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6CiAgICAgICAgLy9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0LzI3MDkKICAgICAgICBiYXNlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYXNlJylbMF07CiAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CiAgICAgICAgICAgIGhlYWQgPSBzLmhlYWQgPSBiYXNlRWxlbWVudC5wYXJlbnROb2RlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFueSBlcnJvcnMgdGhhdCByZXF1aXJlIGV4cGxpY2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMKICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNlcHQvb3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nLgogICAgICogQHBhcmFtIHtFcnJvcn0gZXJyIHRoZSBlcnJvciBvYmplY3QuCiAgICAgKi8KICAgIHJlcS5vbkVycm9yID0gZGVmYXVsdE9uRXJyb3I7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIHRoZSBub2RlIGZvciB0aGUgbG9hZCBjb21tYW5kLiBPbmx5IHVzZWQgaW4gYnJvd3NlciBlbnZzLgogICAgICovCiAgICByZXEuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChjb25maWcsIG1vZHVsZU5hbWUsIHVybCkgewogICAgICAgIHZhciBub2RlID0gY29uZmlnLnhodG1sID8KICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdodG1sOnNjcmlwdCcpIDoKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIG5vZGUudHlwZSA9IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIG5vZGUuY2hhcnNldCA9ICd1dGYtOCc7CiAgICAgICAgbm9kZS5hc3luYyA9IHRydWU7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9OwoKICAgIC8qKgogICAgICogRG9lcyB0aGUgcmVxdWVzdCB0byBsb2FkIGEgbW9kdWxlIGZvciB0aGUgYnJvd3NlciBjYXNlLgogICAgICogTWFrZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCiAgICAgKiB0byBvdmVycmlkZSBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgcmVxdWlyZSBjb250ZXh0IHRvIGZpbmQgc3RhdGUuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLgogICAgICogQHBhcmFtIHtPYmplY3R9IHVybCB0aGUgVVJMIHRvIHRoZSBtb2R1bGUuCiAgICAgKi8KICAgIHJlcS5sb2FkID0gZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUsIHVybCkgewogICAgICAgIHZhciBjb25maWcgPSAoY29udGV4dCAmJiBjb250ZXh0LmNvbmZpZykgfHwge30sCiAgICAgICAgICAgIG5vZGU7CiAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAvL0luIHRoZSBicm93c2VyIHNvIHVzZSBhIHNjcmlwdCB0YWcKICAgICAgICAgICAgbm9kZSA9IHJlcS5jcmVhdGVOb2RlKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKCiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JywgY29udGV4dC5jb250ZXh0TmFtZSk7CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgIC8vU2V0IHVwIGxvYWQgbGlzdGVuZXIuIFRlc3QgYXR0YWNoRXZlbnQgZmlyc3QgYmVjYXVzZSBJRTkgaGFzCiAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUgaW4gaXRzIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncwogICAgICAgICAgICAvL3RoYXQgZG8gbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBhbGwgb3RoZXIgYnJvd3NlcnMgd2l0aAogICAgICAgICAgICAvL2FkZEV2ZW50TGlzdGVuZXIgc3VwcG9ydCwgd2hpY2ggZmlyZSB0aGUgb25sb2FkIGV2ZW50IGZvciBhCiAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFmdGVyIHRoZSBzY3JpcHQgZXhlY3V0aW9uLiBTZWU6CiAgICAgICAgICAgIC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy82NDgwNTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmlyZWQtaW1tZWRpYXRlbHktYWZ0ZXItc2NyaXB0LWV4ZWN1dGlvbgogICAgICAgICAgICAvL1VORk9SVFVOQVRFTFkgT3BlcmEgaW1wbGVtZW50cyBhdHRhY2hFdmVudCBidXQgZG9lcyBub3QgZm9sbG93IHRoZSBzY3JpcHQKICAgICAgICAgICAgLy9zY3JpcHQgZXhlY3V0aW9uIG1vZGUuCiAgICAgICAgICAgIGlmIChub2RlLmF0dGFjaEV2ZW50ICYmCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBpZiBub2RlLmF0dGFjaEV2ZW50IGlzIGFydGlmaWNpYWxseSBhZGRlZCBieSBjdXN0b20gc2NyaXB0IG9yCiAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVseSBzdXBwb3J0ZWQgYnkgYnJvd3NlcgogICAgICAgICAgICAgICAgICAgIC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMTg3CiAgICAgICAgICAgICAgICAgICAgLy9pZiB3ZSBjYW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9UIG5hdGl2ZWx5IHN1cHBvcnRlZC4KICAgICAgICAgICAgICAgICAgICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5vdCBoYXZlIHRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAvL05vdGUgdGhlIHRlc3QgZm9yICJbbmF0aXZlIGNvZGUiIHdpdGggbm8gY2xvc2luZyBicmFjZSwgc2VlOgogICAgICAgICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzI3MwogICAgICAgICAgICAgICAgICAgICEobm9kZS5hdHRhY2hFdmVudC50b1N0cmluZyAmJiBub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nKCkuaW5kZXhPZignW25hdGl2ZSBjb2RlJykgPCAwKSAmJgogICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7CiAgICAgICAgICAgICAgICAvL1Byb2JhYmx5IElFLiBJRSAoYXQgbGVhc3QgNi04KSBkbyBub3QgZmlyZQogICAgICAgICAgICAgICAgLy9zY3JpcHQgb25sb2FkIHJpZ2h0IGFmdGVyIGV4ZWN1dGluZyB0aGUgc2NyaXB0LCBzbwogICAgICAgICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1vdXMgZGVmaW5lIGNhbGwgdG8gYSBuYW1lLgogICAgICAgICAgICAgICAgLy9Ib3dldmVyLCBJRSByZXBvcnRzIHRoZSBzY3JpcHQgYXMgYmVpbmcgaW4gJ2ludGVyYWN0aXZlJwogICAgICAgICAgICAgICAgLy9yZWFkeVN0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBkZWZpbmUgY2FsbC4KICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBub2RlLmF0dGFjaEV2ZW50KCdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCk7CiAgICAgICAgICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIGhlcmUgdG8gY2F0Y2gKICAgICAgICAgICAgICAgIC8vNDA0cyBpbiBJRTkrLiBIb3dldmVyLCBvbnJlYWR5c3RhdGVjaGFuZ2Ugd2lsbCBmaXJlIGJlZm9yZQogICAgICAgICAgICAgICAgLy90aGUgZXJyb3IgaGFuZGxlciwgc28gdGhhdCBkb2VzIG5vdCBoZWxwLiBJZiBhZGRFdmVudExpc3RlbmVyCiAgICAgICAgICAgICAgICAvL2lzIHVzZWQsIHRoZW4gSUUgd2lsbCBmaXJlIGVycm9yIGJlZm9yZSBsb2FkLCBidXQgd2UgY2Fubm90CiAgICAgICAgICAgICAgICAvL3VzZSB0aGF0IHBhdGh3YXkgZ2l2ZW4gdGhlIGNvbm5lY3QubWljcm9zb2Z0LmNvbSBpc3N1ZQogICAgICAgICAgICAgICAgLy9tZW50aW9uZWQgYWJvdmUgYWJvdXQgbm90IGRvaW5nIHRoZSAnc2NyaXB0IGV4ZWN1dGUsCiAgICAgICAgICAgICAgICAvL3RoZW4gZmlyZSB0aGUgc2NyaXB0IGxvYWQgZXZlbnQgbGlzdGVuZXIgYmVmb3JlIGV4ZWN1dGUKICAgICAgICAgICAgICAgIC8vbmV4dCBzY3JpcHQnIHRoYXQgb3RoZXIgYnJvd3NlcnMgZG8uCiAgICAgICAgICAgICAgICAvL0Jlc3QgaG9wZTogSUUxMCBmaXhlcyB0aGUgaXNzdWVzLAogICAgICAgICAgICAgICAgLy9hbmQgdGhlbiBkZXN0cm95cyBhbGwgaW5zdGFsbHMgb2YgSUUgNi05LgogICAgICAgICAgICAgICAgLy9ub2RlLmF0dGFjaEV2ZW50KCdvbmVycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbnRleHQub25TY3JpcHRMb2FkLCBmYWxzZSk7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbm9kZS5zcmMgPSB1cmw7CgogICAgICAgICAgICAvL0NhbGxpbmcgb25Ob2RlQ3JlYXRlZCBhZnRlciBhbGwgcHJvcGVydGllcyBvbiB0aGUgbm9kZSBoYXZlIGJlZW4KICAgICAgICAgICAgLy9zZXQsIGJ1dCBiZWZvcmUgaXQgaXMgcGxhY2VkIGluIHRoZSBET00uCiAgICAgICAgICAgIGlmIChjb25maWcub25Ob2RlQ3JlYXRlZCkgewogICAgICAgICAgICAgICAgY29uZmlnLm9uTm9kZUNyZWF0ZWQobm9kZSwgY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwgdGhlIHNjcmlwdCBleGVjdXRlcyBiZWZvcmUgdGhlIGVuZAogICAgICAgICAgICAvL29mIHRoZSBhcHBlbmRDaGlsZCBleGVjdXRpb24sIHNvIHRvIHRpZSBhbiBhbm9ueW1vdXMgZGVmaW5lCiAgICAgICAgICAgIC8vY2FsbCB0byB0aGUgbW9kdWxlIG5hbWUgKHdoaWNoIGlzIHN0b3JlZCBvbiB0aGUgbm9kZSksIGhvbGQgb24KICAgICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUsIGJ1dCBjbGVhciBhZnRlciB0aGUgRE9NIGluc2VydGlvbi4KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbm9kZTsKICAgICAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG51bGw7CgogICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9IGVsc2UgaWYgKGlzV2ViV29ya2VyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAvL0luIGEgd2ViIHdvcmtlciwgdXNlIGltcG9ydFNjcmlwdHMuIFRoaXMgaXMgbm90IGEgdmVyeQogICAgICAgICAgICAgICAgLy9lZmZpY2llbnQgdXNlIG9mIGltcG9ydFNjcmlwdHMsIGltcG9ydFNjcmlwdHMgd2lsbCBibG9jayB1bnRpbAogICAgICAgICAgICAgICAgLy9pdHMgc2NyaXB0IGlzIGRvd25sb2FkZWQgYW5kIGV2YWx1YXRlZC4gSG93ZXZlciwgaWYgd2ViIHdvcmtlcnMKICAgICAgICAgICAgICAgIC8vYXJlIGluIHBsYXksIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGEgYnVpbGQgaGFzIGJlZW4gZG9uZSBzbwogICAgICAgICAgICAgICAgLy90aGF0IG9ubHkgb25lIHNjcmlwdCBuZWVkcyB0byBiZSBsb2FkZWQgYW55d2F5LiBUaGlzIG1heSBuZWVkCiAgICAgICAgICAgICAgICAvL3RvIGJlIHJlZXZhbHVhdGVkIGlmIG90aGVyIHVzZSBjYXNlcyBiZWNvbWUgY29tbW9uLgoKICAgICAgICAgICAgICAgIC8vIFBvc3QgYSB0YXNrIHRvIHRoZSBldmVudCBsb29wIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIFdlYktpdAogICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHdvcmtlciBnZXRzIGdhcmJhZ2UtY29sbGVjdGVkIGFmdGVyIGNhbGxpbmcKICAgICAgICAgICAgICAgIC8vIGltcG9ydFNjcmlwdHMoKTogaHR0cHM6Ly93ZWJraXQub3JnL2IvMTUzMzE3CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge30sIDApOwogICAgICAgICAgICAgICAgaW1wb3J0U2NyaXB0cyh1cmwpOwoKICAgICAgICAgICAgICAgIC8vQWNjb3VudCBmb3IgYW5vbnltb3VzIG1vZHVsZXMKICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjb250ZXh0Lm9uRXJyb3IobWFrZUVycm9yKCdpbXBvcnRzY3JpcHRzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0U2NyaXB0cyBmYWlsZWQgZm9yICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lICsgJyBhdCAnICsgdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldEludGVyYWN0aXZlU2NyaXB0KCkgewogICAgICAgIGlmIChpbnRlcmFjdGl2ZVNjcmlwdCAmJiBpbnRlcmFjdGl2ZVNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgICAgICB9CgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJhY3RpdmVTY3JpcHQgPSBzY3JpcHQpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgfQoKICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gc2NyaXB0IGF0dHJpYnV0ZSwgd2hpY2ggY291bGQgYWxzbyBhZGp1c3QgdGhlIGJhc2VVcmwuCiAgICBpZiAoaXNCcm93c2VyICYmICFjZmcuc2tpcERhdGFNYWluKSB7CiAgICAgICAgLy9GaWd1cmUgb3V0IGJhc2VVcmwuIEdldCBpdCBmcm9tIHRoZSBzY3JpcHQgdGFnIHdpdGggcmVxdWlyZS5qcyBpbiBpdC4KICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgLy9TZXQgdGhlICdoZWFkJyB3aGVyZSB3ZSBjYW4gYXBwZW5kIGNoaWxkcmVuIGJ5CiAgICAgICAgICAgIC8vdXNpbmcgdGhlIHNjcmlwdCdzIHBhcmVudC4KICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICBoZWFkID0gc2NyaXB0LnBhcmVudE5vZGU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vTG9vayBmb3IgYSBkYXRhLW1haW4gYXR0cmlidXRlIHRvIHNldCBtYWluIHNjcmlwdCBmb3IgdGhlIHBhZ2UKICAgICAgICAgICAgLy90byBsb2FkLiBJZiBpdCBpcyB0aGVyZSwgdGhlIHBhdGggdG8gZGF0YSBtYWluIGJlY29tZXMgdGhlCiAgICAgICAgICAgIC8vYmFzZVVybCwgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LgogICAgICAgICAgICBkYXRhTWFpbiA9IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbWFpbicpOwogICAgICAgICAgICBpZiAoZGF0YU1haW4pIHsKICAgICAgICAgICAgICAgIC8vUHJlc2VydmUgZGF0YU1haW4gaW4gY2FzZSBpdCBpcyBhIHBhdGggKGkuZS4gY29udGFpbnMgJz8nKQogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwoKICAgICAgICAgICAgICAgIC8vU2V0IGZpbmFsIGJhc2VVcmwgaWYgdGhlcmUgaXMgbm90IGFscmVhZHkgYW4gZXhwbGljaXQgb25lLAogICAgICAgICAgICAgICAgLy9idXQgb25seSBkbyBzbyBpZiB0aGUgZGF0YS1tYWluIHZhbHVlIGlzIG5vdCBhIGxvYWRlciBwbHVnaW4KICAgICAgICAgICAgICAgIC8vbW9kdWxlIElELgogICAgICAgICAgICAgICAgaWYgKCFjZmcuYmFzZVVybCAmJiBtYWluU2NyaXB0LmluZGV4T2YoJyEnKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvL1B1bGwgb2ZmIHRoZSBkaXJlY3Rvcnkgb2YgZGF0YS1tYWluIGZvciB1c2UgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9iYXNlVXJsLgogICAgICAgICAgICAgICAgICAgIHNyYyA9IG1haW5TY3JpcHQuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gc3JjLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBzcmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycgOiAnLi8nOwoKICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCA9IHN1YlBhdGg7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TdHJpcCBvZmYgYW55IHRyYWlsaW5nIC5qcyBzaW5jZSBtYWluU2NyaXB0IGlzIG5vdwogICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gbWFpblNjcmlwdC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CgogICAgICAgICAgICAgICAgLy9JZiBtYWluU2NyaXB0IGlzIHN0aWxsIGEgcGF0aCwgZmFsbCBiYWNrIHRvIGRhdGFNYWluCiAgICAgICAgICAgICAgICBpZiAocmVxLmpzRXh0UmVnRXhwLnRlc3QobWFpblNjcmlwdCkpIHsKICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9QdXQgdGhlIGRhdGEtbWFpbiBzY3JpcHQgaW4gdGhlIGZpbGVzIHRvIGxvYWQuCiAgICAgICAgICAgICAgICBjZmcuZGVwcyA9IGNmZy5kZXBzID8gY2ZnLmRlcHMuY29uY2F0KG1haW5TY3JpcHQpIDogW21haW5TY3JpcHRdOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGRlZmluaXRpb25zIG9mIG1vZHVsZXMuIERpZmZlcnMgZnJvbQogICAgICogcmVxdWlyZSgpIGluIHRoYXQgYSBzdHJpbmcgZm9yIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBhcmd1bWVudCwKICAgICAqIGFuZCB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQKICAgICAqIHJldHVybiBhIHZhbHVlIHRvIGRlZmluZSB0aGUgbW9kdWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGFyZ3VtZW50J3MKICAgICAqIG5hbWUuCiAgICAgKi8KICAgIGRlZmluZSA9IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykgewogICAgICAgIHZhciBub2RlLCBjb250ZXh0OwoKICAgICAgICAvL0FsbG93IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy9BZGp1c3QgYXJncyBhcHByb3ByaWF0ZWx5CiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKICAgICAgICAgICAgZGVwcyA9IG5hbWU7CiAgICAgICAgICAgIG5hbWUgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCiAgICAgICAgaWYgKCFpc0FycmF5KGRlcHMpKSB7CiAgICAgICAgICAgIGNhbGxiYWNrID0gZGVwczsKICAgICAgICAgICAgZGVwcyA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL0lmIG5vIG5hbWUsIGFuZCBjYWxsYmFjayBpcyBhIGZ1bmN0aW9uLCB0aGVuIGZpZ3VyZSBvdXQgaWYgaXQgYQogICAgICAgIC8vQ29tbW9uSlMgdGhpbmcgd2l0aCBkZXBlbmRlbmNpZXMuCiAgICAgICAgaWYgKCFkZXBzICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgIGRlcHMgPSBbXTsKICAgICAgICAgICAgLy9SZW1vdmUgY29tbWVudHMgZnJvbSB0aGUgY2FsbGJhY2sgc3RyaW5nLAogICAgICAgICAgICAvL2xvb2sgZm9yIHJlcXVpcmUgY2FsbHMsIGFuZCBwdWxsIHRoZW0gaW50byB0aGUgZGVwZW5kZW5jaWVzLAogICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJlIGFyZSBmdW5jdGlvbiBhcmdzLgogICAgICAgICAgICBpZiAoY2FsbGJhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY29tbWVudFJlZ0V4cCwgY29tbWVudFJlcGxhY2UpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY2pzUmVxdWlyZVJlZ0V4cCwgZnVuY3Rpb24gKG1hdGNoLCBkZXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0aGluZyBldmVuIHdpdGhvdXQgcmVxdWlyZSBjYWxscywgYnV0IHN0aWxsCiAgICAgICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQgbW9kdWxlLiBBdm9pZCBkb2luZyBleHBvcnRzIGFuZCBtb2R1bGUKICAgICAgICAgICAgICAgIC8vd29yayB0aG91Z2ggaWYgaXQganVzdCBuZWVkcyByZXF1aXJlLgogICAgICAgICAgICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhwZWN0IHRoZSBDb21tb25KUyB2YXJpYWJsZXMgaW4gdGhlCiAgICAgICAgICAgICAgICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KICAgICAgICAgICAgICAgIGRlcHMgPSAoY2FsbGJhY2subGVuZ3RoID09PSAxID8gWydyZXF1aXJlJ10gOiBbJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnXSkuY29uY2F0KGRlcHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL0lmIGluIElFIDYtOCBhbmQgaGl0IGFuIGFub255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJhY3RpdmUKICAgICAgICAvL3dvcmsuCiAgICAgICAgaWYgKHVzZUludGVyYWN0aXZlKSB7CiAgICAgICAgICAgIG5vZGUgPSBjdXJyZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKTsKICAgICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dHNbbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vQWx3YXlzIHNhdmUgb2ZmIGV2YWx1YXRpbmcgdGhlIGRlZiBjYWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIuCiAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0aXBsZSBtb2R1bGVzIHRvIGJlIGluIGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5CiAgICAgICAgLy90cmFjaW5nIGRlcGVuZGVuY2llcywgYW5kIGFsbG93cyBmb3IgYW5vbnltb3VzIG1vZHVsZSBzdXBwb3J0LAogICAgICAgIC8vd2hlcmUgdGhlIG1vZHVsZSBuYW1lIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAogICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250ZXh0LCB1c2UgdGhlIGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKICAgICAgICAvL2luIHRoZSBvbnNjcmlwdCBsb2FkIGNhbGxiYWNrLgogICAgICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtuYW1lXSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2xvYmFsRGVmUXVldWUucHVzaChbbmFtZSwgZGVwcywgY2FsbGJhY2tdKTsKICAgICAgICB9CiAgICB9OwoKICAgIGRlZmluZS5hbWQgPSB7CiAgICAgICAgalF1ZXJ5OiB0cnVlCiAgICB9OwoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgdGhlIHRleHQuIE5vcm1hbGx5IGp1c3QgdXNlcyBldmFsLCBidXQgY2FuIGJlIG1vZGlmaWVkCiAgICAgKiB0byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNlZCBmb3IgdHJhbnNwaWxpbmcKICAgICAqIGxvYWRlciBwbHVnaW5zLCBub3QgZm9yIHBsYWluIEpTIG1vZHVsZXMuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCB0aGUgdGV4dCB0byBleGVjdXRlL2V2YWx1YXRlLgogICAgICovCiAgICByZXEuZXhlYyA9IGZ1bmN0aW9uICh0ZXh0KSB7CiAgICAgICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLwogICAgICAgIHJldHVybiBldmFsKHRleHQpOwogICAgfTsKCiAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgogICAgcmVxKGNmZyk7Cn0odGhpcywgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IHNldFRpbWVvdXQpKSk7Cgo=", + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + } + } + }, + "id": "FkOXnPYA0R3Z", + "outputId": "56d347bb-72ba-490b-8bb3-c3cd79727231" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%load_ext tensorboard\n", + "%tensorboard --logdir /content/drive/MyDrive/experiment_score_based_model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "68jZbwWpYWub" + }, + "source": [ + "# Score based model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ph1Akl0zzUeG" + }, + "source": [ + "Вспомогательные функции" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "IX0QaWv1_U0e" + }, + "outputs": [], + "source": [ + "def create_hankel_matrix(time_series, window_size):\n", + " hankel_matrix = hankel(time_series[:-window_size+1], time_series[-window_size:])\n", + " return hankel_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "E1A5wfDRCnlh" + }, + "outputs": [], + "source": [ + "def calculate_distance_matrix(matrices):\n", + " # Check if the matrices have the same number of vectors\n", + " # matrices shape (num_series, num_times, window_sz)\n", + " distances_matrix = np.zeros((matrices.shape[1], matrices.shape[0], matrices.shape[0]))\n", + "\n", + " # Iterate through the vectors in the matrices\n", + " for i in range(distances_matrix.shape[0]):\n", + " mu = np.mean(matrices[:,i,:], axis=-1)\n", + " T = matrices.shape[2]\n", + " for t in range(T):\n", + " x = (matrices[:,i,t] - mu).reshape(-1, 1)\n", + " distances_matrix[i] += x @ x.T\n", + " distances_matrix[i] *= 1/T\n", + " return distances_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "p5GdBVjQzNJG" + }, + "outputs": [], + "source": [ + "def get_distance_matrix(time_series, window_size=6):\n", + " matrices = np.stack([create_hankel_matrix(time_series.iloc[:, i], window_size) for i in range(time_series.shape[1])])\n", + " print(matrices.shape)\n", + " distances = calculate_distance_matrix(matrices)\n", + " print(distances.shape)\n", + " return distances" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9mHhNkQDzbYy" + }, + "source": [ + "Модель" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "oZVxdBbZy3hJ" + }, + "outputs": [], + "source": [ + "#@title Defining a callback for Tensorboard (double click to expand or collapse)\n", + "\n", + "device = 'cuda' #@param ['cuda', 'cpu'] {'type':'string'}\n", + "\n", + "class callback_score_based_model():\n", + " def __init__(self, writer, dataset, marginal_prob_std_fn, loss_function, batch_size, delimeter=100):\n", + " self.step = 0\n", + " self.writer = writer\n", + " self.delimeter = delimeter\n", + " self.loss_function = loss_function\n", + " self.batch_size = batch_size\n", + " self.marginal_prob_std_fn = marginal_prob_std_fn\n", + "\n", + " self.dataset = dataset\n", + "\n", + " def forward(self, model, loss):\n", + " self.step += 1\n", + " self.writer.add_scalar('LOSS/train', loss, self.step)\n", + "\n", + " if self.step % self.delimeter == 0:\n", + "\n", + "\n", + " batch_generator = torch.utils.data.DataLoader(dataset=self.dataset,\n", + " batch_size=self.batch_size)\n", + "\n", + " pred = []\n", + " real = []\n", + " test_loss = 0\n", + " for it, (x_batch, y_batch) in enumerate(batch_generator):\n", + " x_batch = x_batch.to(device)\n", + " y_batch = y_batch.to(device)\n", + "\n", + " test_loss += self.loss_function(model, x_batch, y_batch, self.marginal_prob_std_fn).cpu().item()*len(x_batch)\n", + "\n", + " test_loss /= len(self.dataset)\n", + "\n", + " self.writer.add_scalar('LOSS/test', test_loss, self.step)\n", + "\n", + " def __call__(self, model, loss):\n", + " return self.forward(model, loss)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "tOQx_8-W0i36" + }, + "outputs": [], + "source": [ + "error_tolerance = 1e-5 #@param {'type': 'number'}\n", + "\n", + "class GaussianFourierProjection(nn.Module):\n", + " \"\"\"Gaussian random features for encoding time steps.\"\"\"\n", + " def __init__(self, embed_dim, scale=30.):\n", + " super().__init__()\n", + " # Randomly sample weights during initialization. These weights are fixed\n", + " # during optimization and are not trainable.\n", + " self.W = nn.Parameter(torch.randn(embed_dim // 2) * scale, requires_grad=False)\n", + " def forward(self, x):\n", + " x_proj = x[:, None] * self.W[None, :] * 2 * np.pi\n", + " return torch.cat([torch.sin(x_proj), torch.cos(x_proj)], dim=-1)\n", + "\n", + "\n", + "class Dense(nn.Module):\n", + " \"\"\"A fully connected layer that reshapes outputs to feature maps.\"\"\"\n", + " def __init__(self, input_dim, output_dim):\n", + " super().__init__()\n", + " self.dense = nn.Linear(input_dim, output_dim)\n", + " def forward(self, x):\n", + " return self.dense(x)[..., None, None]\n", + "\n", + "\n", + "class ScoreNet(nn.Module):\n", + " \"\"\"A time-dependent score-based model built upon U-Net architecture.\"\"\"\n", + " def __init__(self, marginal_prob_std, channels=[32, 64, 128, 256], embed_dim=256):\n", + " \"\"\"Initialize a time-dependent score-based network.\n", + "\n", + " Args:\n", + " marginal_prob_std: A function that takes time t and gives the standard\n", + " deviation of the perturbation kernel p_{0t}(x(t) | x(0)).\n", + " channels: The number of channels for feature maps of each resolution.\n", + " embed_dim: The dimensionality of Gaussian random feature embeddings.\n", + " \"\"\"\n", + " super().__init__()\n", + " # Gaussian random feature embedding layer for time\n", + " self.embed = nn.Sequential(GaussianFourierProjection(embed_dim=embed_dim),\n", + " nn.Linear(embed_dim, embed_dim))\n", + " # Encoding layers where the resolution decreases\n", + " self.conv1 = nn.Conv2d(2, channels[0], 2, stride=1, bias=False)\n", + " self.dense1 = Dense(embed_dim, channels[0])\n", + " self.gnorm1 = nn.GroupNorm(4, num_channels=channels[0])\n", + " self.conv2 = nn.Conv2d(channels[0], channels[1], 2, stride=1, bias=False)\n", + " self.dense2 = Dense(embed_dim, channels[1])\n", + " self.gnorm2 = nn.GroupNorm(32, num_channels=channels[1])\n", + "\n", + " self.tconv2 = nn.ConvTranspose2d(channels[1], channels[0], 2, stride=1, bias=False)\n", + " self.dense7 = Dense(embed_dim, channels[0])\n", + " self.tgnorm2 = nn.GroupNorm(32, num_channels=channels[0])\n", + " self.tconv1 = nn.ConvTranspose2d(channels[0] + channels[0], 1, 2, stride=1)\n", + "\n", + " # The swish activation function\n", + " self.act = lambda x: x * torch.sigmoid(x)\n", + " self.marginal_prob_std = marginal_prob_std\n", + "\n", + " def forward(self, x, t):\n", + " # Obtain the Gaussian random feature embedding for t\n", + "\n", + " embed = self.act(self.embed(t))\n", + " # Encoding path\n", + " h1 = self.conv1(x)\n", + " ## Incorporate information from t\n", + " h1 += self.dense1(embed)\n", + " ## Group normalization\n", + " h1 = self.gnorm1(h1)\n", + " h1 = self.act(h1)\n", + " h2 = self.conv2(h1)\n", + " h2 += self.dense2(embed)\n", + " h2 = self.gnorm2(h2)\n", + " h2 = self.act(h2)\n", + "\n", + " # # Decoding path\n", + " # ## Skip connection from the encoding path\n", + " h = self.tconv2(h2)\n", + " h += self.dense7(embed)\n", + " h = self.tgnorm2(h)\n", + " h = self.act(h)\n", + " h = self.tconv1(torch.cat([h, h1], dim=1))\n", + "\n", + " # Symmetric output\n", + " h = (h + h.permute(0, 1, 3, 2)) / 2\n", + "\n", + " # Normalize output\n", + " h = h / self.marginal_prob_std(t)[:, None, None, None]\n", + " return h\n", + "\n", + "\n", + "def loss_fn(model, x, y, marginal_prob_std, eps=1e-5):\n", + " \"\"\"The loss function for training score-based generative models.\n", + "\n", + " Args:\n", + " model: A PyTorch model instance that represents a\n", + " time-dependent score-based model.\n", + " x: A mini-batch of Sigma_T.\n", + " y: A mini-batch of Sigma_{T+1}\n", + " marginal_prob_std: A function that gives the standard deviation of\n", + " the perturbation kernel.\n", + " eps: A tolerance value for numerical stability.\n", + " \"\"\"\n", + " input = torch.cat((x, y), axis=1)\n", + " random_t = torch.rand(input.shape[0], device=input.device) * (1. - eps) + eps\n", + " z = torch.randn_like(input[:, 1:]) # noise only for y, not x\n", + " std = marginal_prob_std(random_t)\n", + " perturbed_x = input\n", + " score = model(perturbed_x, random_t)\n", + " loss = torch.mean(torch.sum((score * std[:, None, None, None] + z)**2, dim=(1,2,3)))\n", + " return loss\n", + "\n", + "class ScoreBasedModel:\n", + " def __init__(self, time_series_data, N=0.8, window_size=6):\n", + " # time_series_data - набор временных рядов\n", + " # N - размер train выборки (0..1)\n", + " self.num_series = time_series_data.shape[1]\n", + " X = get_distance_matrix(time_series_data, window_size)\n", + " X = X.reshape(X.shape[0], 1, X.shape[1], X.shape[2])\n", + " print(X.shape)\n", + " N = int(N * len(X))\n", + " self.X_train, self.Y_train, self.X_test, self.Y_test = X[:N], X[1:N+1], X[N:-1], X[N+1:]\n", + " print(self.X_train.shape, self.X_test.shape)\n", + "\n", + " self.device = device\n", + " self.sigma = 100#@param {'type':'number'}\n", + "\n", + " def marginal_prob_std(self, t, sigma):\n", + " \"\"\"Compute the mean and standard deviation of $p_{0t}(x(t) | x(0))$.\n", + "\n", + " Args:\n", + " t: A vector of time steps.\n", + " sigma: The $\\sigma$ in our SDE.\n", + "\n", + " Returns:\n", + " The standard deviation.\n", + " \"\"\"\n", + " t = torch.tensor(t, device=self.device)\n", + " return torch.sqrt((sigma**(2 * t) - 1.) / 2. / np.log(sigma))\n", + "\n", + " def diffusion_coeff(self, t, sigma):\n", + " \"\"\"Compute the diffusion coefficient of our SDE.\n", + "\n", + " Args:\n", + " t: A vector of time steps.\n", + " sigma: The $\\sigma$ in our SDE.\n", + "\n", + " Returns:\n", + " The vector of diffusion coefficients.\n", + " \"\"\"\n", + " return torch.tensor(sigma**t, device=self.device)\n", + "\n", + " def project_to_psd_cone(self, A):\n", + " # Perform eigenvalue decomposition\n", + " eigvals, eigvecs = np.linalg.eigh(A)\n", + "\n", + " # Ensure non-negative eigenvalues\n", + " eigvals[eigvals < 0] = 0\n", + "\n", + " # Reconstruct the matrix with the non-negative eigenvalues\n", + " A_psd = np.dot(eigvecs, np.dot(np.diag(eigvals), eigvecs.T))\n", + "\n", + " return A_psd\n", + "\n", + " def train(self):\n", + " marginal_prob_std_fn = functools.partial(self.marginal_prob_std, sigma=self.sigma)\n", + " diffusion_coeff_fn = functools.partial(self.diffusion_coeff, sigma=self.sigma)\n", + "\n", + " score_model = torch.nn.DataParallel(ScoreNet(marginal_prob_std=marginal_prob_std_fn))\n", + " score_model = score_model.to(self.device)\n", + "\n", + " n_epochs = 1000#@param {'type':'integer'}\n", + " ## size of a mini-batch\n", + " batch_size = 128 #@param {'type':'integer'}\n", + " ## learning rate\n", + " lr=1e-4 #@param {'type':'number'}\n", + "\n", + " dataset_train = TensorDataset(torch.from_numpy(self.X_train).float(), torch.from_numpy(self.Y_train).float())\n", + " dataset_test = TensorDataset(torch.from_numpy(self.X_test).float(), torch.from_numpy(self.Y_test).float())\n", + " data_loader = DataLoader(dataset_train, batch_size=batch_size, shuffle=True, num_workers=4)\n", + "\n", + " optimizer = Adam(score_model.parameters(), lr=lr)\n", + " tqdm_epoch = tqdm.notebook.trange(n_epochs)\n", + "\n", + " # callback = None\n", + " writer = SummaryWriter(log_dir=f'./n_epochs:{n_epochs},sigma:{self.sigma},batch_sz:{batch_size},lr:{lr}')\n", + " callback = callback_score_based_model(writer, dataset_test, marginal_prob_std_fn, loss_fn, batch_size=batch_size, delimeter=100)\n", + "\n", + " for epoch in tqdm_epoch:\n", + " avg_loss = 0.\n", + " num_items = 0\n", + " for x, y in data_loader:\n", + " x = x.to(self.device)\n", + " y = y.to(self.device)\n", + " loss = loss_fn(score_model, x, y, marginal_prob_std_fn)\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " # Loss output\n", + " if callback is not None:\n", + " callback(score_model, loss.item())\n", + "\n", + " avg_loss += loss.item() * x.shape[0]\n", + " num_items += x.shape[0]\n", + " # Print the averaged training loss so far.\n", + " tqdm_epoch.set_description('Average Loss: {:5f}'.format(avg_loss / num_items))\n", + " # Update the checkpoint after each epoch of training.\n", + " torch.save(score_model.state_dict(), f'ckpt_s{self.sigma}.pth')\n", + "\n", + " def ode_sampler(self,\n", + " score_model,\n", + " init_x,\n", + " init_y,\n", + " marginal_prob_std,\n", + " diffusion_coeff,\n", + " batch_size=64,\n", + " atol=error_tolerance,\n", + " rtol=error_tolerance,\n", + " device='cuda',\n", + " z=None,\n", + " eps=1e-3):\n", + " \"\"\"Generate samples from score-based models with black-box ODE solvers.\n", + "\n", + " Args:\n", + " score_model: A PyTorch model that represents the time-dependent score-based model.\n", + " marginal_prob_std: A function that returns the standard deviation\n", + " of the perturbation kernel.\n", + " diffusion_coeff: A function that returns the diffusion coefficient of the SDE.\n", + " batch_size: The number of samplers to generate by calling this function once.\n", + " atol: Tolerance of absolute errors.\n", + " rtol: Tolerance of relative errors.\n", + " device: 'cuda' for running on GPUs, and 'cpu' for running on CPUs.\n", + " z: The latent code that governs the final sample. If None, we start from p_1;\n", + " otherwise, we start from the given z.\n", + " eps: The smallest time step for numerical stability.\n", + " \"\"\"\n", + " t = torch.ones(batch_size, device=device)\n", + " std = marginal_prob_std(t)\n", + " # Create the latent code\n", + " if z is None:\n", + " init_x = init_x # no std multiplication, since training input for x was without mul\n", + " init_y = (init_y + init_y.permute(0, 1, 3, 2)) / 2\n", + " init_y = init_y * std[:, None, None, None]\n", + " for i in range(init_y.shape[0]):\n", + " init_y[i, 0] = torch.tensor(self.project_to_psd_cone(init_y[i, 0].detach().clone().cpu()))\n", + " else:\n", + " init_x = z\n", + "\n", + " shape = init_x.shape\n", + "\n", + " def score_eval_wrapper(sample, time_steps):\n", + " \"\"\"A wrapper of the score-based model for use by the ODE solver.\"\"\"\n", + " sample = torch.tensor(sample, device=device, dtype=torch.float32).reshape(shape)\n", + " time_steps = torch.tensor(time_steps, device=device, dtype=torch.float32).reshape((sample.shape[0], ))\n", + " with torch.no_grad():\n", + " nonlocal init_x\n", + " sample = torch.cat((init_x, sample), axis=1)\n", + " score = score_model(sample, time_steps)\n", + " return score.cpu().numpy().reshape((-1,)).astype(np.float64)\n", + "\n", + " def ode_func(t, x):\n", + " \"\"\"The ODE function for use by the ODE solver.\"\"\"\n", + " time_steps = np.ones((shape[0],)) * t\n", + " g = diffusion_coeff(torch.tensor(t)).cpu().numpy()\n", + " return -0.5 * (g**2) * score_eval_wrapper(x, time_steps)\n", + "\n", + " # Run the black-box ODE solver.\n", + " res = integrate.solve_ivp(ode_func, (1., eps), init_y.reshape(-1).cpu().numpy(), rtol=rtol, atol=atol, method='RK45')\n", + " print(f\"Number of function evaluations: {res.nfev}\")\n", + " x = torch.tensor(res.y[:, -1], device=device).reshape(shape)\n", + "\n", + " return x\n", + "\n", + " def get_psd(self, A):\n", + " # A.shape = (batch_size, 1, num_series, num_series)\n", + " B = A.detach().clone().cpu()\n", + " for i in range(A.shape[0]):\n", + " B[i, 0] = torch.tensor(self.project_to_psd_cone(A[i, 0]))\n", + " return B.cpu()\n", + "\n", + " def sample(self, x_batch, y_batch):\n", + " ## Load the pre-trained checkpoint from disk.\n", + " marginal_prob_std_fn = functools.partial(self.marginal_prob_std, sigma=self.sigma)\n", + " diffusion_coeff_fn = functools.partial(self.diffusion_coeff, sigma=self.sigma)\n", + " # Load trained model\n", + " ckpt = torch.load(f'ckpt_s{self.sigma}.pth', map_location=self.device)\n", + " score_model = torch.nn.DataParallel(ScoreNet(marginal_prob_std=marginal_prob_std_fn))\n", + " score_model = score_model.to(self.device)\n", + " score_model.load_state_dict(ckpt)\n", + "\n", + " sample_batch_size = len(x_batch)\n", + " sampler = self.ode_sampler\n", + "\n", + " # Init input\n", + " init_x = torch.tensor(x_batch.copy(), device=self.device).float()\n", + " init_y = torch.randn(sample_batch_size, 1, self.num_series, self.num_series, device=self.device)\n", + "\n", + " ## Generate samples using the specified sampler.\n", + " samples = sampler(score_model,\n", + " init_x, init_y,\n", + " marginal_prob_std_fn,\n", + " diffusion_coeff_fn,\n", + " sample_batch_size,\n", + " device=self.device)\n", + " test_sampled = samples.detach().clone().cpu()\n", + "\n", + " ## Sample visualization.\n", + " %matplotlib inline\n", + " sample_grid = make_grid(test_sampled, nrow=int(np.sqrt(sample_batch_size)))\n", + " ## Answers visualization.\n", + " test_answers = torch.tensor(y_batch.copy(), device=self.device).float()\n", + " %matplotlib inline\n", + " tests_grid = make_grid(test_answers, nrow=int(np.sqrt(sample_batch_size)))\n", + " return self.get_psd(test_sampled)\n", + "\n", + " def predict(self):\n", + " sample_batch_size = 64 #@param {'type':'integer'}\n", + " results = []\n", + " self.device = 'cuda'\n", + " for i in tqdm.tqdm(range(0, len(self.X_test), sample_batch_size)):\n", + " results.append(self.sample(self.X_test[i:i+sample_batch_size], self.Y_test[i:i+sample_batch_size]))\n", + " return np.vstack(results)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hdkjncS1FCEU" + }, + "source": [ + "# Пример" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "id": "l6xRCJRhFDYa", + "outputId": "d42eda06-2650-46d5-a536-abb774f3890e" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Sine_1Sine_2Sine_3
02.9836131.8084042.835185
14.6792724.5120375.100860
27.4931606.2480905.908951
39.9663098.5536979.022863
49.27641210.7077448.020482
............
9995-7.142177-8.055452-9.020567
9996-8.843816-5.468104-5.400867
9997-5.522853-4.439183-5.318904
9998-1.991133-0.773369-4.379256
99990.644388-1.619920-0.228884
\n", + "

10000 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " Sine_1 Sine_2 Sine_3\n", + "0 2.983613 1.808404 2.835185\n", + "1 4.679272 4.512037 5.100860\n", + "2 7.493160 6.248090 5.908951\n", + "3 9.966309 8.553697 9.022863\n", + "4 9.276412 10.707744 8.020482\n", + "... ... ... ...\n", + "9995 -7.142177 -8.055452 -9.020567\n", + "9996 -8.843816 -5.468104 -5.400867\n", + "9997 -5.522853 -4.439183 -5.318904\n", + "9998 -1.991133 -0.773369 -4.379256\n", + "9999 0.644388 -1.619920 -0.228884\n", + "\n", + "[10000 rows x 3 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def make_sine_ts(n_points, start_time=0, dimension=1, n_periods=4, ampl=10):\n", + " sigma = ampl / 10\n", + " time = np.arange(1, n_points + 1)\n", + " series_sine = ampl * np.sin(np.tile(time * (2 * np.pi * n_periods) / n_points + start_time, (dimension, 1)).T * 100) + sigma * np.random.randn(n_points, dimension)\n", + " table = np.column_stack((time, series_sine))\n", + " columns = ['Time'] + [f'Sine_{i}' for i in range(1, dimension + 1)]\n", + " ts = pd.DataFrame(table, columns=columns)\n", + " return ts\n", + "\n", + "# generate synthetic time series\n", + "time = 10000\n", + "num_series = 3\n", + "time_series_data = pd.DataFrame()\n", + "for i in range(num_series):\n", + " ts = make_sine_ts(time, dimension=1, start_time=0)\n", + " time_series_data[f'Sine_{i+1}'] = ts.iloc[:, 1]\n", + "time_series_data" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "64WYl2-8FdqP", + "outputId": "1f41a134-30d9-47d5-d0ca-514de707fb11" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(3, 7001, 3000)\n", + "(7001, 3, 3)\n", + "(7001, 1, 3, 3)\n", + "(5600, 1, 3, 3) (1400, 1, 3, 3)\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fc42bbb4b8334c0493681a1371fdccc7", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1000 [00:00 2\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m pred \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mpredict()\n", + "Cell \u001b[0;32mIn[7], line 188\u001b[0m, in \u001b[0;36mScoreBasedModel.train\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 186\u001b[0m avg_loss \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.\u001b[39m\n\u001b[1;32m 187\u001b[0m num_items \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m--> 188\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mdata_loader\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 189\u001b[0m \u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 190\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.11/site-packages/torch/utils/data/dataloader.py:439\u001b[0m, in \u001b[0;36mDataLoader.__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iterator\n\u001b[1;32m 438\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 439\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.11/site-packages/torch/utils/data/dataloader.py:387\u001b[0m, in \u001b[0;36mDataLoader._get_iterator\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 385\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 386\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcheck_worker_number_rationality()\n\u001b[0;32m--> 387\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_MultiProcessingDataLoaderIter\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.11/site-packages/torch/utils/data/dataloader.py:1022\u001b[0m, in \u001b[0;36m_MultiProcessingDataLoaderIter.__init__\u001b[0;34m(self, loader)\u001b[0m\n\u001b[1;32m 1019\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_workers \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 1020\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_workers):\n\u001b[1;32m 1021\u001b[0m \u001b[38;5;66;03m# No certainty which module multiprocessing_context is\u001b[39;00m\n\u001b[0;32m-> 1022\u001b[0m index_queue \u001b[38;5;241m=\u001b[39m \u001b[43mmultiprocessing_context\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mQueue\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# type: ignore[var-annotated]\u001b[39;00m\n\u001b[1;32m 1023\u001b[0m \u001b[38;5;66;03m# Need to `cancel_join_thread` here!\u001b[39;00m\n\u001b[1;32m 1024\u001b[0m \u001b[38;5;66;03m# See sections (2) and (3b) above.\u001b[39;00m\n\u001b[1;32m 1025\u001b[0m index_queue\u001b[38;5;241m.\u001b[39mcancel_join_thread()\n", + "File \u001b[0;32m/usr/lib/python3.11/multiprocessing/context.py:103\u001b[0m, in \u001b[0;36mBaseContext.Queue\u001b[0;34m(self, maxsize)\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m'''Returns a queue object'''\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mqueues\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Queue\n\u001b[0;32m--> 103\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Queue(maxsize, ctx\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_context\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m/usr/lib/python3.11/multiprocessing/context.py:237\u001b[0m, in \u001b[0;36mDefaultContext.get_context\u001b[0;34m(self, method)\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_default_context \u001b[38;5;241m=\u001b[39m context\n\u001b[1;32m 235\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_actual_context \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 237\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_context\u001b[39m(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 238\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_actual_context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "model = ScoreBasedModel(time_series_data, N=0.8, window_size=3000)\n", + "model.train()\n", + "pred = model.predict()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def calc_mu(X):\n", + " T = X.shape[0]\n", + " N = X.shape[1]\n", + " res = np.zeros(N)\n", + " for t in range(T):\n", + " res += X[t]\n", + " return res / T\n", + "\n", + "def calc_sigma(X):\n", + " T = X.shape[0]\n", + " N = X.shape[1]\n", + " mu = calc_mu(X)\n", + " res = np.zeros((N, N))\n", + " for t in range(T):\n", + " res += np.outer(X[t] - mu, (X[t] - mu).T)\n", + " return res / T\n", + "\n", + "def calc_alternative_answer(X):\n", + " T = X.shape[0]\n", + " return 2 / (T - 1) * np.sum(X[:-1], axis=0) - X[-1]\n", + "\n", + "def project_to_psd_cone(A):\n", + " eigvals, eigvecs = np.linalg.eigh(A)\n", + " eigvals[eigvals < 0] = 0\n", + " A_psd = np.dot(eigvecs, np.dot(np.diag(eigvals), eigvecs.T))\n", + " return A_psd\n", + "\n", + "def get_two_answers(T, X_, SigmaT1):\n", + " SigmaT1 = project_to_psd_cone(SigmaT1)\n", + " SigmaT = calc_sigma(X_)\n", + " muT = calc_mu(X_)\n", + " A = (T/(T+1) * SigmaT - SigmaT1) * (T+1)**2/T\n", + " U, S, Vh = np.linalg.svd(A, full_matrices=False)\n", + " return (-np.sqrt(S[0]) * U.T[0].reshape(3, 1) + muT.reshape(3, 1)).T, (np.sqrt(S[0]) * U.T[0].reshape(3, 1) + muT.reshape(3, 1)).T" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": { + "id": "XGCqrCiwFsLM" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(3, 9971, 30)\n", + "(9971, 3, 3)\n", + "(9971, 1, 3, 3)\n", + "- - - - -\n", + "(1994, 1, 3, 3)\n", + "(1, 3, 3)\n", + "[[[49.58680466 48.88134113 49.13710343]\n", + " [48.88134113 49.80956365 49.7015127 ]\n", + " [49.13710343 49.7015127 51.54845223]]]\n", + "[[[52.65282894 51.53439021 51.64469314]\n", + " [51.53439021 52.10009989 51.83780833]\n", + " [51.64469314 51.83780833 53.38147626]]]\n", + "[[[53.80685298 52.17695173 53.2247633 ]\n", + " [52.17695173 52.2476886 52.90142121]\n", + " [53.2247633 52.90142121 55.38410835]]]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABJiklEQVR4nO3dd3zU9eE/8NfnZvbeJIEkbELCjmEjyFAs4qJO3FXBVrHW8WvV2lqsfrXWXeug2hYrKlpBrOwhIcgIhJFASEgC2QlJLuP25/fH5cKGjEven7t7PR+Pe7RkkBf3uPZeeU9JlmUZRERERAqmEh2AiIiI6HJYWIiIiEjxWFiIiIhI8VhYiIiISPFYWIiIiEjxWFiIiIhI8VhYiIiISPFYWIiIiEjxNKIDdJfdbkdZWRkCAwMhSZLoOERERNQBsizDYDAgLi4OKtXlx0/cvrCUlZUhISFBdAwiIiLqgtLSUsTHx1/269y+sAQGBgJw/IODgoIEpyEiIqKOaGxsREJCQvv7+OW4fWFxTgMFBQWxsBAREbmZji7n4KJbIiIiUjwWFiIiIlI8FhYiIiJSPBYWIiIiUjwWFiIiIlI8FhYiIiJSPBYWIiIiUjwWFiIiIlI8FhYiIiJSPBYWIiIiUjwWFiIiIlI8FhYiIiJSPBYWcql9pfV4f8sxmKw20VGIiMiDuP1tzaQcVQYjFn68E/UtFpw41YoX5qWKjkRERB6CIyzkErIs4/+tPID6FgsA4JOsYnyXWy44FREReQoWFnKJb3LKsPZQJbRqCdemxwEAnvxiP4prmwUnIyIiT8DCQt1W1WjEc/89CAB45MoB+MvN6RjTNxQGkxWL/r2H61mIiKjbWFioW2RZxjMrc9HQakFqnyA8NDUFGrUKb946EqF+Whw42Yg/rT4sOiYREbm5Hi0sW7ZswbXXXou4uDhIkoSvv/76rM/Lsoxnn30WsbGx8PX1xYwZM3D06NGejEQu9tWek1h3uApatYRXbxoBrdrxkooN9sVrN48AAPwjqxhruJ6FiIi6oUcLS3NzM9LT0/H2229f8PMvv/wy3njjDbz33nvIzs6Gv78/Zs2aBaPR2JOxyEUqGox4/lvHVNCjMwZiUEzgWZ+fNjgKD05JAQD85ov9KKlt6fWMRETkGXq0sMyZMwd//OMfMX/+/PM+J8syXn/9dfz2t7/FvHnzkJaWhk8++QRlZWXnjcSQ8siyjKe/2g+D0Yr0+GD8YnLyBb/u8ZkDuZ6FiIi6TdgalqKiIlRUVGDGjBntHwsODkZGRgaysrIu+n0mkwmNjY1nPaj3rdh9Ahvzq6FTq/B/N6VDo77wS0mrVuGNW0YixE+L3JMNWPpdXi8nJSIiTyCssFRUVAAAoqOjz/p4dHR0++cuZOnSpQgODm5/JCQk9GhOOl9ZfSv+8O0hAMCSmQMxIDrwkl8fF+KL125OBwAs234c3x/gehYiIuoct9sl9PTTT6OhoaH9UVpaKjqSV5FlGU9+uR8GkxUjE0Nw/6QLTwWd68rB0fjFFMfXPsH1LERE1EnCCktMTAwAoLKy8qyPV1ZWtn/uQvR6PYKCgs56UO/57KdSbD1aA73GMRWkVkkd/t5fzxyE0X1DYTBa8cjyPTBb7T2YlIiIPImwwpKUlISYmBisX7++/WONjY3Izs5GZmamqFh0CSdOteDFtjNVnpg1CCmRAZ36fq1ahTfb1rPsO9GApWt4PgsREXVMjxaWpqYm5OTkICcnB4BjoW1OTg5KSkogSRIeffRR/PGPf8R///tf5Obm4s4770RcXByuu+66noxFXeCcCmoyWTGmbyjunpDUpb8nLsQXr97kWM/y8Y/H8f2Bi69XIiIicurR25p37dqFadOmtf95yZIlAICFCxdi2bJl+M1vfoPm5mY88MADqK+vx8SJE/H999/Dx8enJ2NRF/wruwQ/FtTCR6vCyzemdWoq6FzTh0TjF5OT8bcthfjNF/swLC4ICWF+LkxLRESeRpJlWRYdojsaGxsRHByMhoYGrmfpIaV1LZj1+ha0mG14du5Q3DOxa6MrZ7LY7FjwtyzsKalHenwwVjw4HjqN260BJyKiLurs+zffIeiS7HYZT3yxDy1mG8b1C8Nd4/u55O/VqlV489ZRCPZ1rGd5aY3Y81msNjv2lJxCeUOr0BxEREpistqwYlcpmkxW0VF6dkqI3N8/s4uxo7AOvlo1XrkpDapuTAWdq0/bepb7PtmFj34sQkZyGGYNu/gOMVerazZj85EqbMirxub8KjQarQjx02LVIxMRH8opKiLyXrVNJvwruwSfZBWjpskEg9HqktH17mBhoYsqrm1uP5n2qTmD0Tfc3+U/Y8bQaDwwORnvbynEEyv2YWhsz61nkWUZeRUGbMirwoa8KuwtOQX7GROikgTUt1iw+N978fkvMjlFRURep6DKgA+3HcdXe07A1Hb0RGywDwJ8xNcF8QlIkex2GU+s2I9Wiw1XJIfhjiv69tjPemLWIPx0vA57S+qxePlerHBhWWg127D9WA025FVhY14VyhrOvlhzcEwgpg+JwpWDoxARoMe1b25DTmk9/vTdYTz/s2EuyUBEpGSyLGP7sVp8sLUQG/Or2z8+vE8w7puUhKuHx0J7ketXehMX3dIFfbStCC+sOgQ/nRr/e3Ryj+/iOXGqBde8sQ0NrRYMjglEfKgfQvy0CPHVIthXixA/LYJ8tQjx0531sUAf7Xk7lk7WtzpGUQ5XYvux2vbfEgDAR6vChJQITBschWmDo9AnxPes7113qBL3fbILAPD2raNwTVpsj/67iYhEMVlt+HZfOT7YWoi8CgMAx0jzVUOicd+kZIztFwpJct0ygHN19v2bIyx0nqKaZrz8P8dU0DNXD+mVLcfxoX549aZ0PPDpLuRVGNr/x3M5kgQE6jUI8dMh2FcLo8WGo1VNZ31NnxBfXDnYMYqSmRIOH636on/fjKHReHBKCt7bfAxPfrkfQ2IDkdzJA/KIiJTsVLMZ/8ouxj+yilFtMAEAfLVq3DwmHndPSEK/CNdP/7sCR1joLDa7jAV/y8Ku4lOY2D8Cn947rkcb9rkKq5twuNyA+lYzGlotaGixoKHVgnrnf7Za0NDi+Fyz2XbBv0MlAaP7hmLa4ChMHxyNgdEBnfo3WG123PpBNnYW1WFwTCBWPjwBvrqLlxwiIndwrLoJH20rwpd7TsBocYw8Rwfpcdf4JNw6LhHBftpezcMRFuqWr/eexK7iUwjQa/DSDcN7tawAQHJkQIdHNMxWOxqNp8tMQ6sZVpuMsf3CEOqv63IGjVqFt24Ziavf2Iq8CgOe/eYAXmk7nZeIyN3sKTmFtzcUYH1eVfvHhsUF4f5Jybh6eKzbbDBgYaF2druMdzcfAwA8PC1F8Vt7dRoVIgL0iAjQu/zvjgrywRs/H4nbP8zGit0nMDYpDDePSXD5zyEi6klFNc34+d92wGxzjKjMGBKF+yYlIyMprNd/Ie0u96hV1CvWHa5EQVUTAn00PboryF2M7x+Bx2YMBAD87usDOFzeKDgREVHnrNhVCrPNjvSEEGx4fAo+WDgWVySHu11ZAVhYqI0sy3hnk2N05Y4r+iLQp3fnMpVq0bT+mDIwEiarHQ//aw8MRovoSEREHWKzy1i59yQA4IFJyW6/gYCFhQAAOwrrkFNaD71G1eWbmD2RSiXhLwtGIDbYB0U1zXjqy1y4+Tp1IvISOwprUd5gRJCPBtOHRImO020sLAQA7WtXbh6TgMhA168JcWdh/jq8fdsoaFQSVueW4x/bj4uORER0WV/uPgEAuDY97pLHObgLFhbCgZMN2HKkGmqVhAcmJ4uOo0ijEkPxzNVDAAAvfncYe0tOCU5ERHRxTSYr1hyoAADcMDpecBrXYGEhvNc2ujI3LbZXDolzV3dP6Ic5qTGw2GQs/vdenGo2i45ERHRBa3LL0WqxISnCHyMTQkTHcQkWFi93vKYZ3+WWAwAenJIiOI2ySZKEP9+Yhn7hfjhZ34oln+fAbud6FiJSnq/2OBbb3jCqj1vuCLoQFhYv97cthbDLwJWDozAklicFX06Qjxbv3DYaeo0KG/Or29f+EBEpxYlTLcgqrIUkAfNHecZ0EMDC4tWqGo3ti7IemsrRlY4aGheEF+Y5bnJ+9Yd8bD9WIzgREdFpK9tGVzKTw8+74NWdsbB4sQ9/LILZZseYvqEY2y9MdBy3cvOYBNwwKh52Gfjl8hxUNRpFRyIigizL+Krt7JXrPWh0BWBh8VoNrRb8a0cJAI6udIUkSfjjdakYHBOImiYTHlm+F9a2o6+JiETZU1KPoppm+OnUmJMaIzqOS7GweKl/7ihGk8mKQdGBmDbI/Q8UEsFXp8bbt42Cv06N7KI6vLb2iOhIROTlvtzjmOafnRoDf71nXRfIwuKFjBYbPtpWBMAxuqJSecYKchFSIgPw5xvTAADvbDqGrGO1ghMRkbcyWmxYta8MAHCjh00HASwsXmnFrlLUNpsRH+qLuWmxouO4vblpcZg/sg8A4IdDFYLTEJG3Wne4Eo1GK+KCfXBFcrjoOC7HwuJlrDY7/ralEADwwORkaNR8CbjCuCTHouWimmbBSYjIWznPXpk/qo9Hjpzz3crLrNpfjhOnWhHur8NNoxNEx/EYSRH+AFhYiEiMaoMJm49UA/C83UFOLCxeRJZlvLvJcdDZPROT4Ktz/8uwlCK5rbCU1rXAbOVuISLqXd/knITNLmNkYghSIgNEx+kRLCxeZGN+FfIrDQjQa3D7FX1Fx/EokYF6+OvUsMtASV2L6DhE5GW+aDsE1FNHVwAWFq/iHF25LSMRwb5awWk8iyRJSIrktBAR9b5DZY3IqzBAp1bhWg/eSMHC4iV+Ol6Hn46fgk6twj0Tk0TH8UhJEY5h2KKaJsFJiMibOM9emTE0CiF+OsFpeg4Li5dwjq7cMLoPooN8BKfxTMlceEtEvcxis+ObHOfNzJ47HQSwsHiFw+WN2JBXBZUE/GIyj+HvKcltU0LHqllYiKh3bDlSjZomMyICdJg8MFJ0nB7FwuIF/rbZMboyZ3gs+rWNApDrcWszEfU259krP0vvA62Hn6vl2f86QmldC77dXw4AeGgKR1d6krMMVhtMMBgtgtMQkadraLFg7aFKAI7pfk/HwuLh3t9SCJtdxqQBEUjtEyw6jkcL8tEiIkAPADhew63NRNSzvt1fBrPNjsExgRgW5/n//87C4sGqDSZ8vqsUAPDw1P6C03gH58LbQu4UIqIe5twddONoz15s68TC4sGWbS+CyWrHiIQQXJEcJjqOV+A6FiLqDYXVTdhbUg+1SsLPRsSJjtMrWFg8lMFowSdZxQCAh6amQJI87yIsJeLhcUTUG5yLbScPiEBUoHccVcHC4qH+lV0Cg9GKlEh/XDUkWnQcr9E+JcStzUTUQ+x2GSv3tp294iXTQQALi0cyWmz4cFsRAODBKSkeec24UiWfMcIiy7LgNETkiXYU1uJkfSsCfTSY4UW/kLKweKAv95xAtcGEuGAfzBvh+VvdlCQhzA8qCWgyWVHdZBIdh4g80Jdt00Fz0+Lgo1ULTtN7NKIDkGtYbXZsyq/G8p0l2JhfBQC4b1IydBp20t6k16gRH+qHkroWFFU3e83cMhH1jmaTFWsOOM7WutELzl45EwuLmyurb8V/firF57tKUd5gbP/4jCHRuGVcosBk3ispwt9RWGqakZEcLjoOEXmQ7w9UoMVsQ1KEP0YlhoqO06tYWNyQ1WbHxrbRlE35VbC3LZUI89fhxtHx+PnYBCRHBogN6cWSIvyx+Ug1dwoRkcs5z165fmQfr9v9ycLiRk46R1N+KkVF4+nRlMzkcNySkYhZw6Kh13jPfKZSORfeFrKwEJELnaxvRVZhLQDgupHeNR0EsLAonnM05d/Zxdh0pBoyR1MUj4fHEVFP+HrvScgycEVyGBLC/ETH6XUsLAp14lQLPv+pFP/ZVYrKxtO7TTKTw3FrRiJmcjRFsZwFsri2GVabHRoPv0GViHqeLMv4crdjOuiGUd5z9sqZWFgUaNvRGty9bCcsNsdwSpi/DjeNjscCjqa4hdggH+g1Kpisdpysb0XfcH/RkYjIze0trUdhTTN8tWrMGR4rOo4QLCwKY7fLePG7w7DYZIxICMG9E5M4muJmVCoJSRH+yKswoLCmmYWFiLrtq7bFtnNSYxCg9863bo5VK8wPhypxuLwRAXoNPr5rLK5Nj2NZcUPt61h4RD8RdZPJasO3+xxnr1zvpdNBAAuLotjtMv66/igA4K7x/RDqrxOciLqKC2+JyFXWH65CQ6sFscE+yEzx3rOdWFgUZO1hx+iKv06NeycmiY5D3cDCQkSusnxnCQBg/sg+UHvx3XAsLAohyzL+uq5tdGUCR1fc3ZmXIBIRddX+E/XYerQGapWEn4/17tPLWVgU4odDlTjUNrpy38Rk0XGom5IiHLu5Tta3otVsE5yGiNzVWxsKAADzRsQhMdz7zl45EwuLAnB0xfOE+esQ4qcFAByv5SgLEXVefoUBPxyqhCQBD0/tLzqOcCwsCsDRFc/EdSxE1B1vb3SMrlydGov+UTyDi4VFMI6ueC4WFiLqqqKaZqzaXwYAWDSNoysAC4twazm64rGS2wpLIc9iIaJOendTAewyMH1wFIbGBYmOowgsLALJsozX20ZXFvLcFY/jXHhbVNMkOAkRuZMTp1rw1Z6TAIBFV3J0xYmFRaCzRlcmcXTF03BKiIi64m+bC2G1y5jQPxyjEkNFx1EMFhZBzh1dCePoisfpF+HYgniqxYJTzWbBaYjIHVQ1GvGfXaUAgMXTBghOoywsLIJwdMXz+ek0iA32AQAUcpSFiDrg71sLYbbaMaZvKK5IDhMdR1FYWASQ5dN3BnF0xbPxxFsi6qi6ZjP+ucNxDP+iK/tDkrz3GP4LYWERYN3hKhws4+iKNzi9joULb4no0j7+sQitFhtS+wRh6sBI0XEUh4WllznWrhwBANzJ0RWPd3qnEEdYiOjiGo0WLNt+HIBj7QpHV87HwtLLnKMrfjo17ufoisfjWSxE1BGfZhXDYLRiYHQAZg6NFh1HkVhYetGZoytcu+IdnFNCx2ubYbfLgtMQkRK1mK34YGshAMeptioVR1cuhIWlF3F0xfvEh/pCo5JgtNhR0WgUHYeIFOjf2SU41WJBv3A/XDM8VnQcxWJh6SWOnUEcXfE2GrWq/Up4TgsR0bmMFhve3+IYXXloago0ar4tXwyfmV6y/nAVDpzk6Io3SuZOISK6iBW7T6DKYEJcsA/mj4wXHUfRhBeW559/HpIknfUYPHiw6FguJcsyXm8bXbkzk6Mr3sa5joWHxxHRmSw2O97bdAwA8ODUFOg0wt+SFU0jOgAADBs2DOvWrWv/s0ajiFguc/boSpLoONTLkiO5tZmIzvf13pM4Wd+KiAA9bh6TIDqO4imiGWg0GsTExIiO0SPOHV0JD9ALTkS9jZcgEtG5bHYZ77SNrjwwOQk+WrXgRMqniPGno0ePIi4uDsnJybjttttQUlIiOpLLbMjj6Iq3c65hKa1rgdlqF5yGiJRgdW45imqaEeKnxW0ZfUXHcQvCC0tGRgaWLVuG77//Hu+++y6KioowadIkGAyGC369yWRCY2PjWQ+lOvNGZo6ueK/IQD38dWrYZaCkrkV0HCISzG6X8faGAgDAPROS4K9XxGSH4gkvLHPmzMFNN92EtLQ0zJo1C9999x3q6+vx+eefX/Drly5diuDg4PZHQoJy5/025FUh92QDR1e8nCRJSIp0nnjLnUJE3m7d4UrkVxoQqNdg4fh+ouO4DeGF5VwhISEYOHAgCgoKLvj5p59+Gg0NDe2P0tLSXk7YMWeOrtyR2ZejK16OdwoREeB4b3hro+P97Y7Mvgj21QpO5D4UV1iamppw7NgxxMZe+LQ/vV6PoKCgsx5K5Bxd8dWq8QDPXfF6XHhLRACw9WgN9p9ogI9WhXsncuS9M4QXll//+tfYvHkzjh8/ju3bt2P+/PlQq9W45ZZbREfrMseptm1rV8ZzdIXOuASRhYXIq73Vtnbltgy+N3SW8JU+J06cwC233ILa2lpERkZi4sSJ2LFjByIjI0VH67Kswtr2Bs3RFQKA5EiOsBB5u+zCWuw8XgedWoUHJvO9obOEF5bPPvtMdASX+3vbvRA3jU5ggyYAQL+2EZZqgwkGowWBPpy3JvI2zrUrN42JR3SQj+A07kf4lJCnOVppwMb8akgSOD9J7YJ8tIhoK6/Ha7i1mcjb7Cutx9ajNVCrJDw4JUV0HLfEwuJiH2wtAgDMGhrT/ls1EXDmOhZubSbyNs7RletG9EFCmJ/gNO6JhcWFqgxGrNx7EgBw/2SOrtDZ2i9BrOY6FiJvcrTSgLWHKiFJwMPTOLrSVSwsLvTJ9mKYbXaMSgzB6L5houOQwiRx4S2RV/ompwwAMH1wFFLaLkOlzmNhcZEWsxX/zC4GAK7+pgviWSxE3keWZaza7ygs16bHCU7j3lhYXOSL3SdQ32JB33A/XDXUM2+epu5JPqOwyLIsOA0R9YaDZY04XtsCvUaFGUOiRcdxaywsLmCzy+2Lbe+dmAS1ShKciJQoMdwPKgloMllR3WQSHYeIesHq3HIAwJWDo3jJYTexsLjADwcrUFLXghA/LW4cHS86DimUXqNGfKhjd0ARF94Sebwzp4OuSbvwdTPUcSwsLvD3rY6D4m7P6As/HRs0XRzXsRB5j9yTDSita4WvVo0rB0eJjuP2WFi6aXdxHfaU1EOnVuHO8X1FxyGFS+KdQkReY/X+tumgIVH8ZdYFWFi66f22Y/jnj+yDqEAetUyX5rxTiGexEHk2x3SQo7DMHc7pIFdgYemG4zXN+OFQJQDgvkk8KI4u7/SUEE+7JfJkOaX1OFnfCj+dGtM4HeQSLCzd8OG2IsgyMG1QJAZEB4qOQ27AWVhK6lpgtdkFpyGinuKcDpoxJBo+WrXgNJ6BhaWLTjWbsWJ3KQDgfh4URx0UF+wLvUYFi03GyfpW0XGIqAfY7XL7dmbuDnIdFpYu+ueOYhgtdqT2CUJmcrjoOOQmVCqJC2+JPNze0lMobzAiQK/BlIGRouN4DBaWLjBabPhH1nEAwP2TkiFJPCiOOq59HQsX3hJ5JOdi26uGcjrIlVhYuuDrvSdR02RGXLAPrubqb+oknsVC5LnsdhnfOaeD+P7gUiwsnWS3y/hgm+MY/nsmJkGr5lNInXN6Sog7hYg8za7iU6hsNCHQR4NJAyNEx/EofLftpE1HqlBQ1YRAvQYLxiaIjkNuyHkWC6eEiDzP6raj+GcOjYFew+kgV2Jh6STnQXG3ZCQi0EcrOA25o6SIAABAWYMRrWab4DRE5Co2u4zvDlQAAOZyd5DLsbB0Qu6JBuworINGJeGu8f1ExyE3FeqnRbCvo+wer+UoC5Gn2FlUh2qDCcG+Wkzoz+kgV2Nh6QTnJYdz02IRF+IrOA25K0mSuPCWyAOtznVMB80aFg2dhm+vrsZntINOnGppPwjovkk8KI66p30dCwsLkUew2uxYk+uYDromLU5wGs/EwtJBH/94HDa7jAn9w5HaJ1h0HHJzyRG8BJHIk2QX1aG22YxQPy3Gp/Aw0Z7AwtIBDa0WfLazBABHV8g1nAtvubWZyDM4D4ubnRrD4y56CJ/VDvhsZwmazTYMiArAVB6zTC7ANSxEnsNis+P7A87D4jgd1FNYWC7DbLXj4x+PA3Bccshj+MkV+kX4AQDqWyw41WwWnIaIuiPrWC1OtVgQ7q/DFclhouN4LBaWy1idW4aKRiMiA/WYN4LNmVzDT6dBbLAPAF6CSOTuVp8xHaThdFCP4TN7CbIs4/0tjmP47xrfj6cWkktxWojI/Zmtdnx/0HlYHH+p7UksLJfwY0EtDpc3wlerxm0ZiaLjkIc5XVi48JbIXf14rAYNrRZEBOgxLonTQT2JheUSnAfFLRibgBA/neA05GmSIx07hTjCQuS+nNNBVw+PgVrFNY49iYXlIvIrDNh8pBoqCbhnQpLoOOSBeBYLkXszW+34H6eDeg0Ly0U4R1dmp8YgMdxPcBryRM4poeO1zbDbZcFpiKizth6thsFoRVSgHmP6hoqO4/E0ogMo1cLMfjBb7bh7Qj/RUchDxYf6QqOSYLTYUd5oRB/eT0XkVk5PB8VCxemgHscRlosYHh+MN24ZiZGJbM3UMzRqVfvoXRGnhYjcitFiw9pDlQCAa9NjBafxDiwsRAIlc6cQkVvacqQaBpMVscE+GJnAX2x7AwsLkUDOdSw8PI7IvazO5XRQb2NhIRLIeQkitzYTuQ+jxYZ1bdNBc9M4HdRbWFiIBEqO5Gm3RO5mU34Vms029AnxxYiEENFxvAYLC5FAzjUspXUtMFltgtMQUUesatsddE1aLC/E7UUsLEQCRQbq4a9Twy47SgsRKVur2Yb1h6sAcDqot7GwEAkkSRKSInniLZG72JBXhVaLDQlhvhjeJ1h0HK/CwkIkGBfeErmP1bllAIBrhsdxOqiXsbAQCXb61mYWFiIlazZZsSGP00GisLAQCZbMs1iI3ML6vCoYLXb0C/fDsLgg0XG8DgsLkWDth8dVN/ESRCIFW72/bTqIu4OEYGEhEiw50h9atYSaJjMWvJ+Fo5UG0ZGI6BxNJis25lcDAOamxQlO451YWIgEC/TR4k/zh8NPp8ZPx0/h6je24tUf8mG08FwWIqVYd6gSZqsdyZH+GBwTKDqOV2JhIVKAm8YkYO2SKZgxJAoWm4w3NxRg9utb8GNBjehoRITTh8XNHc7pIFFYWIgUok+IL/5+5xi8d/soRAfpcby2Bbd9kI0l/8lBbZNJdDwir2W02LCtwDEdNDuVu4NEYWEhUhBJkjA7NRbrlkzBwsy+kCTgq70nMf21zfh8VylkmYtyiXrbzqI6GC12xAT5YEgsp4NEYWEhUqBAHy1+Py8VKx+egCGxQahvseA3X+zHz9/fgWPVTaLjEXmVTW2LbacMjOR0kEAsLEQKNiIhBP9dPAFPzxkMH60K2UV1mPP6Vvxl7RFelkjUSzYdcRwWN3VQpOAk3o2FhUjhtGoVfjElBWsfm4KpgyJhttnx1/VHMeevW5F1rFZ0PCKPVlrXgsLqZmhUEiYMiBAdx6uxsBC5iYQwP3x811i8detIRAbqUVjdjFv+vgNPrNiHU81m0fGIPNKmfMfoyqi+oQjy0QpO491YWIjciCRJmJsWh3VLpuC2jEQAwIrdJzD9tc3Yf6JebDgiD+Rcv8LpIPFYWIjcULCvFi/OH44vH8rEwOgA1DWb8daGAtGxiDyK0WLD9rZp16kDowSnIRYWIjc2um8Y/nxDGgAgu6iOdxERudBPx+vQarEhKlDP7cwKwMJC5OZS+wTDX6dGQ6sFeRW8h4jIVbidWVlYWIjcnFatwph+YQCArELuGiJylc1HnOtXOB2kBCwsRB4gMyUcALCDhYXIJU6cakFBVRPUKgkTuZ1ZEVhYiDzAFcmOwrKT61iIXMI5HTQqMQTBvtzOrAQsLEQeIDUuCAF6DRpaLThU3ig6DpHbO72dmdNBSsHCQuQBNGoVxvYLBcBpIaLuMllt2H6sBoBjwS0pAwsLkYdwTgvtKKwTnITIve06fgotZhsiA/UYFhckOg61YWEh8hDOwpJdVAsb17EQdZnzOH5uZ1YWFhYiDzEsLgiBeg0MRisOcx0LUZfxOH5lYmEh8hAatQpjkxznsXAdC1HXnKxvxdGqJqgkYFJ/FhYlYWEh8iBXJLcdIHeMhYWoK5zTQSMTQxHsx+3MSqKIwvL222+jX79+8PHxQUZGBnbu3Ck6EpFbykx2HHC1s6iO61iIuqB9Ooi7gxRHeGH5z3/+gyVLluC5557Dnj17kJ6ejlmzZqGqqkp0NCK3M9S5jsVkxaEyrmMh6gyz1Y7tBY7tzDx/RXmEF5bXXnsN999/P+6++24MHToU7733Hvz8/PDRRx+JjkbkdtQqCeOSnPcK1QhOQ+Redh2vQ7PZhogAHbczK5DQwmI2m7F7927MmDGj/WMqlQozZsxAVlaWwGRE7uv0vUI8j4WoM5yXHU4eGAmVituZlUYj8ofX1NTAZrMhOjr6rI9HR0cjLy/vgt9jMplgMpna/9zYyGFvojOdea+Q1WaHRi18IJXILfA4fmVzu/8nW7p0KYKDg9sfCQkJoiMRKcqQ2CAE+WjQZLLiINexEHVIWX0r8isNUEnAZN7OrEhCC0tERATUajUqKyvP+nhlZSViYmIu+D1PP/00Ghoa2h+lpaW9EZXIbTjWsTinhbi9magjnNNBIxJCEOKnE5yGLkRoYdHpdBg9ejTWr1/f/jG73Y7169cjMzPzgt+j1+sRFBR01oOIztZ+HgsLC1GHOM9f4XSQcgldwwIAS5YswcKFCzFmzBiMGzcOr7/+Opqbm3H33XeLjkbktpwLb3/iOhaiyzJb7fixwFHueRy/cgkvLAsWLEB1dTWeffZZVFRUYMSIEfj+++/PW4hLRB03JCYIwb5aNLRacKCsESMSQkRHIlKs3cWn0GSyItxfh9S4YNFx6CIU8WvX4sWLUVxcDJPJhOzsbGRkZIiOROTWVGeex8Jj+okuadMRx3QQtzMrmyIKCxG5XmYyF94SdcRm3s7sFlhYiDyU8zyWXcfrYLHZBachUqbyhlbkVRggScCkASwsSsbCQuShBscEIsRPi2azDbknG0THIVIk5+hKenwIwvy5nVnJWFiIPJRKJSGjbR0Lp4WILmwTp4PcBgsLkQe7Ipn3ChFdjMVmx4+8ndltsLAQeTCuYyG6uD3Fp2AwWRHmr0NaH25nVjoWFiIPNig6EKF+WrSYbdh/gutYiM60yXk784AIbmd2AywsRB7MsY6F25uJLoS3M7sXFhYiD+e8V4iFhei0ykYjDpc3tm1n5u3M7oCFhcjDZaY4/s941/FTMFu5joUIOL2dOa1PMMID9ILTUEewsBB5uAFRAQjz16HVYkPuyXrRcYgUwXkc/xROB7kNFhYiD3fmeSy8V4gIsNrs2HrUuZ2Z56+4CxYWIi+QmcLzWIic9pTUw2C0ItRPi/T4ENFxqINYWIi8QPt5LMV1MFltgtMQibUp3zEdNGlAJNTczuw2WFiIvMCAqACE++tgtNh5Hgt5PR7H755YWIi8gCRJp4/p5zoW8mJVjUYcKm8EAEweyMLiTlhYiLyE8zyWLJ7HQl7MebptWnwwIrid2a2wsBB5CecIy+7iU1zHQl5rc1thmcrRFbfDwkLkJfpHBSAiQAeT1Y59pVzHQt7HarNja1thmcL1K26HhYXIS0iShIy2URaex0LeKKe0Ho1GK4J9tRiRECo6DnUSCwuRF2lfeMt1LOSFnLuDJg2I4HZmN8TCQuRFMtsKy56SUzBauI6F3I/NLnf5e53H8fN2ZvekER2AiHpPSqQ/IgL0qGkyIae0vn3EhcgdLPrXHqzOLYdWLcFHq4avVg1fnRo+GjV8dGr4alUX+JjjoVFLOHDSsZ15ChfcuiUWFiIv4jiPJQyr9pdjR2EtCwu5jZLaFqzOLQcAWGwyLDYrDEZrp/+e1D5BiAzkdmZ3xMJC5GUyU8LbCwuRu1iVWwbAcZ7QazePgNFiQ6vF5vhPs739z86POT9+5p8tNhm3ZiQK/pdQV7GwEHmZK9rXsdTDaLHBR6sWnIjo8lbvd4yu/Cy9D+JCfAWnIRG46JbIyyRH+CMyUA+z1Y69JfWi4xBdVlFNMw6WNUKtkjA7NUZ0HBKEhYXIy0iS1L5biNNC5A5W73dMB41PCUeYv05wGhKFhYXICzmnhXivELmDVW3TQXPTYgUnIZFYWIi8kPMixJy2dSxESlVQ1YS8CgM0KgmzhnE6yJuxsBB5oaQIf0QH6WG22bGn5JToOEQX5VxsO3FABEL8OB3kzVhYiLyQ4zyWtnUsvFeIFGxV2/qVuWlxgpOQaCwsRF7q9L1CdYKTEF3YkUoDjlY1QadW4aqh0aLjkGAsLEReyrlTKKe0Hq1mrmMh5XEutp08MALBvlrBaUg0FhYiL9U33A8xQT5cx0KKJMty+3TQNdwdRGBhIfJaznuFAJ7HQsqTV2FAYXUzdBoVZgzhdBCxsBB5tcyUtvNYuPCWFMY5ujJ1YCQCfTgdRCwsRF7NufB234l6VBtMgtMQOciy3L6dmdNB5MTCQuTFEsP8MCg6EBabjIUf7URDq0V0JCIcLGvE8doW6DkdRGdgYSHyYpIk4b07RiMiQI9D5Y24d9lPaDFbRcciL+fcHXTl4Cj46zWC05BSsLAQebmkCH98eu84BPlosKv4FH7x6W6YrNzmTGLIsozVudwdROdjYSEiDIkNwsd3j4OvVo2tR2vw6Gc5sNrsomORF9p/ogGlda3w1apx5eAo0XFIQVhYiAgAMLpvKN6/czR0ahXWHKjA01/lwm6XRcciL7M6t206aEgU/HScDqLTWFiIqN2kAZF445YRUEnAit0n8OJ3hyHLLC3UO87cHXQtp4PoHCwsRHSW2amx+PMNaQCAD7cV4c0NBYITkbfYW1qPk/Wt8NepMXUQp4PobCwsRHSem8Yk4Nm5QwEAr609go9/LBKciLyBc3RlxtBo+GjVgtOQ0rCwENEF3TMxCY/NGAgA+P23h/DF7hOCE5Ens9vPOCxuOKeD6HwsLER0Ub+c3h/3TkwCAPzmi334/kC54ETkqfaUnEJFoxGBeg0mD4wUHYcUiIWFiC5KkiT89pohuHlMPOwy8MvlOdh6tFp0LPJAzsPiruJ0EF0ECwsRXZIkSVh6fRquHh4Ds82OBz7Zjd3Fp0THIg9is8v4Lpd3B9GlsbAQ0WWpVRL+smAEJg+MRKvFhrs/3onD5Y2iY5GH2HW8DlUGEwJ9NJg0gNNBdGEsLETUIXqNGu/dPgpj+oai0WjFHR/uRFFNs+hY5AGc00GzhsVAp+HbEl0YXxlE1GF+Og0+vGsshsYGoabJhNs/yEZZfavoWOTGbHYZa9oWc8/ldBBdAgsLEXVKsK8Wn9w7DskR/jhZ34rbP8xGbZNJdCxyU9mFtahpMiPYV4sJ/SNExyEFY2Ehok6LCNDj0/syEBfsg8LqZjz/7SHRkchNrWpbbDt7WAy0ar4l0cXx1UFEXdInxBfv3D4aAPDDwQo0mayCE5G7sdrs+P5ABQBgbjqng+jSWFiIqMvS44ORHOEPk9WO9YcrRcchN5NVWIu6ZjPC/HXITA4XHYcUjoWFiLpMkiTMTY8DAHy7r0xwGnI3zqP4Z6fGQMPpILoMvkKIqFuubdvZsflINRpaLILTkLuw2Oz4/mDbdBDvDqIOYGEhom4ZEB2IwTGBsNhk/K/tDYjocn4sqEF9iwURATqMSwoTHYfcAAsLEXXbtc5pof2cFqKOcR4WNyc1ltNB1CF8lRBRtzkP/Np+rBY1PJOFLsNstbePxvHuIOooFhYi6ra+4f5Ijw9uO7WU00J0adsKqmEwWhEVqMfYfpwOoo5hYSEil5ibxt1C1DGr9jmmg64eHgu1ShKchtwFCwsRuYRzaP+n43WoaDAKTkNKZbTYsPaQ48we3h1EncHCQkQuERfii7H9QiHLwOq249aJzrXlSDUMJitignwwKjFUdBxyIywsROQy1/IQOboMZ5m9engsVJwOok5gYSEil5mTGguVBOSU1qO0rkV0HFIYo8WGdc7pIN4dRJ3EwkJELhMZqEdmiuNOGJ7JQufakFeFZrMNfUJ8MTIhRHQccjNCC0u/fv0gSdJZj5deeklkJCLqpmvbdwtxHQudZrfLeHtjAQBg3og4SBKng6hzhI+wvPDCCygvL29/PPLII6IjEVE3zE6NgUYl4XB5IwqqmkTHIYX4/mAFDpY1IkCvwX2TkkXHITckvLAEBgYiJiam/eHv7y86EhF1Q4ifDpMGRAAAVnFaiADY7DJeW3sEAHDPxCSE+esEJyJ3JLywvPTSSwgPD8fIkSPxyiuvwGq1io5ERN105m4hWZYFpyHRvt57EgVVTQj21eK+SUmi45Cb0oj84b/85S8xatQohIWFYfv27Xj66adRXl6O11577aLfYzKZYDKdvquksbGxN6ISUSdcNTQaOo0Kx6qbcbjcgKFxQaIjkSAWmx2vr3eMrvxiSjKCfLSCE5G7cvkIy1NPPXXeQtpzH3l5eQCAJUuWYOrUqUhLS8ODDz6IV199FW+++eZZheRcS5cuRXBwcPsjISHB1f8EIuqmQB8trhwUBYDTQt7u812lKK1rRUSAHneN7yc6DrkxSXbxeG11dTVqa2sv+TXJycnQ6c6fwzx48CBSU1ORl5eHQYMGXfB7LzTCkpCQgIaGBgQF8bc4IqVYtb8Mi/+9FwlhvtjyxDTuCvFCRosNU1/ZhIpGI567dijunsDpIDqtsbERwcHBHX7/dvmUUGRkJCIjI7v0vTk5OVCpVIiKirro1+j1euj1+q7GI6JecuXgKPjp1Cita8W+Ew0YwXM3vM4/dxSjotGIuGAf3JqRKDoOuTlha1iysrKQnZ2NadOmITAwEFlZWXjsscdw++23IzSU90sQuTs/nQYzhkTjv/vK8O2+MhYWL9NssuLdTccAAL+cPgB6jVpwInJ3wnYJ6fV6fPbZZ5gyZQqGDRuGF198EY899hjef/99UZGIyMWcu4VW7y+H3c7dQt7k4x+LUNtsRr9wP9wwOl50HPIAwkZYRo0ahR07doj68UTUCyYPjECgjwYVjUbsKj6FcUlhoiNRL2hoseBvWwoBAI9dNRBatfATNMgD8FVERD1Gr1Fj1rAYALzB2Zu8v/UYDEYrBkUHtl/VQNRdLCxE1KOc00Lf5ZbDarMLTkM9rabJhI9/PA4AWDJzIFQq7g4j12BhIaIeNT4lHGH+OtQ2m5FVeOkjD8j9vbvpGFrMNqTFB2Pm0GjRcciDsLAQUY/SqlWYneqYFlrFG5w9WnlDKz7dUQwAeHzmIJ69Qy7FwkJEPc65jmHNgXKYrZwW8lRvbiiA2WrHuH5hmNx2ASaRq7CwEFGPG5cUhqhAPRqNVmw9Wi06DvWAktoWfP5TKQDg17M4ukKux8JCRD1OrZJwTVosAO4W8lSvrzsCq13G5IGR3L5OPYKFhYh6xdy2aaG1hyphtNgEpyFXOlppwMqckwCAX88cKDgNeSoWFiLqFaMSQ9AnxBfNZhs25lWJjkMu9NraI5BlYNawaKTFh4iOQx6KhYWIeoUkSZib3jYttJ/TQp7iwMkGrDlQAUly7Awi6iksLETUa5y7hdYfrkKTySo4DbnCqz/kAwDmpcdhYHSg4DTkyVhYiKjXDIsLQlKEP0xWO9YdqhQdh7ppd3EdNuZXQ62S8OgMrl2hnsXCQkS9RpIkXNu2W2gVp4XcmizLeOV/jtGVm8fEo1+Ev+BE5OlYWIioVznvFtp8pBoNLRbBaairfiyoxY7COujUKiy+coDoOOQFWFiIqFcNiA7EoOhAWGwy/newQnQc6gJZlvFK29qVWzMS0SfEV3Ai8gYsLETU667lbiG3tu5wFfaV1sNXq8aiaf1FxyEvwcJCRL3OeYjcjwU1qGkyCU5DnWG3y+07g+6a0A+RgXrBichbsLAQUa/rF+GPtPhg2GVgzQFOC7mT1bnlyKswIFCvwS8mJ4uOQ16EhYWIhJjLu4Xcjtlqx1/WHgEA3D85GSF+OsGJyJuwsBCRENe0TQv9dLwORyoNgtNQR/x9ayEKa5oREaDDPROTRMchL8PCQkRC9AnxxeSBkZBlYOFHO3GyvlV0JLqE4tpmvLH+KADgt9cMRYBeIzgReRsWFiIS5vUFI5AS6Y/yBiPu+DAbtVyAq0iyLOPZbw7CZLVjQv9wzBsRJzoSeSEWFiISJsxfh0/vzUBcsA8Kq5tx18c/wWDkYXJKszq3HJuPVEOnVuEP81IhSZLoSOSFWFiISKi4EF98el8Gwvx1yD3ZgAc+2Q2jxSY6FrVpNFrwwreHAAAPT0tBcmSA4ETkrVhYiEi4lMgA/OPucQjQa5BVWItHlu+F1WYXHYsAvPq/fFQZTEiK8MeDU1JExyEvxsJCRIowPD4Yf79zDHQaFdYeqsRTX+XCbpdFx/Jq+0rr8cmOYgDAi9elwkerFpyIvBkLCxEpRmZKON66ZSTUKglf7D6BP313GLLM0iKC1WbHMytzIcvA/JF9ML5/hOhI5OVYWIhIUWYOi8Gfb0gDAHywrQjvbDomOJF3+iSrGAfLGhHko8EzVw8RHYeIhYWIlOfG0fH47TWON8lX/pePf7ZNS1DvqGgwtt8X9NScIbwviBSBhYWIFOm+SclY3HYT8O++OcAj/HvR7789iGazDaMSQ/DzsQmi4xABYGEhIgV7fOZA3JaRCFkGlnyeg81HqkVH8ngb8iqx5kAF1CoJL84fDpWKZ66QMrCwEJFiSZKEF+alYm5aLCw2GQ9+uhu7i0+JjuWxWs02PPvNQQDAvROTMCQ2SHAiotNYWIhI0dQqCa/dPAKTB0ai1WLDPct+Qn4FL0vsCW9sOIoTp1rRJ8QXj84YIDoO0VlYWIhI8XQaFd67fRRGJYagodWCOz7MRklti+hYHiW/woC/bykEADz/s2Hw0/FyQ1IWFhYicgt+Og0+umssBkUHospgwh0fZaPKYBQdyyPY7TL+38pcWO0yZg6NxlVDo0VHIjoPCwsRuY0QPx0+vXccEsJ8UVzbgjs/3ImGVl6W2F0rdpdiV/Ep+OnUeP5nw0THIbogFhYicitRQT74570ZiAzUI6/CgIf+uRs2HuHfZbVNJixdkwcAWHLVQMSF+ApORHRhLCxE5Hb6hvvjk3vGwU+nxvZjtXhrQ4HoSG7rT9/lob7FgiGxQbhrfD/RcYguioWFiNzSkNgg/PG6VADAX9cfwY7CWsGJ3E/WsVp8uecEJAn40/xUaNR8SyDl4quTiNzW9aPicePoeNhl4Fef7UVtk0l0JLdhstrw/77OBQDclpGIkYmhghMRXRoLCxG5tRfmDUNKpD8qG0349Yp9sHM9S4e8v7kQhdXNiAjQ44lZg0XHIbosFhYicmt+Og3eunUUdBoVNuZX48NtRaIjKd7xmma8udGx7ud3c4cg2FcrOBHR5bGwEJHbGxIbhOeuHQoA+PP3edhbwuP7L0aWZfzumwMwW+2Y2D8CP0uPEx2JqENYWIjII9w6LhHXDI+F1S7jkeV7eT7LRazOLcfWozXQaVT4w3WpkCRebkjugYWFiDyCJElYesNwJIT54sSpVjz15X7IMteznMlstePP3zvOXHl4agqSIvwFJyLqOBYWIvIYQT5avHXLKGjVEtYcqMA/s0tER1KUf2cXo7SuFVGBejwwOVl0HKJOYWEhIo+SnhCCJ2c7dr38YdUhHCxrEJxIGQxGC95oO2DvVzMG8HJDcjssLETkce6dmITpg6NgttrxyL/3otlkFR1JuL9vLUJdsxnJEf64eUyC6DhEncbCQkQeR5IkvHJTOmKCfFBY04zffXNAdCShqgxGfLC1EADwxKxB0PJEW3JDfNUSkUcK89fhjVtGQiUBX+05iS92nxAdSZg31xegxWxDekIIZqfGiI5D1CUsLETkscYlheGxGQMBAL/7+gAKqpoEJ+p9x2uasXynY/HxU7MHcxszuS0WFiLyaA9P64/xKeFotdiw+N97YLTYREfqVf/3Qz6sdhlTB0UiMyVcdByiLmNhISKPplZJeH3BCEQE6JBXYcAfVh0SHanX7D9Rj1X7yyFJwG94XxC5ORYWIvJ4UUE+eO3mEQCAf2WXYPX+crGBeoEsy3hpjeOQuPkj+mBoXJDgRETdw8JCRF5h8sBIPDQ1BQDw1Jf7UVLbIjhRz9p6tAbbj9VCp1bhsasGio5D1G0sLETkNZZcNRCj+4bCYLLikeV7YLbaRUfqEXa73H4E/+1X9EVCmJ/gRETdx8JCRF5Dq1bhjVtGIthXi30nGvBy25u6p/l2fxkOljUiQK/B4iv7i45D5BIsLETkVfqE+OKVG9MAAB9sK8IHWws96pJEs9WO//shHwDw4JRkhPnrBCcicg0WFiLyOjOHxeDBKY71LH9cfRjPrMyFxeYZ00POCw4jA/W4Z2KS6DhELsPCQkRe6cnZg/Dba4ZAkoDlO0tx54c7Ud9iFh2rW5pMVrzpvOBwOi84JM/CwkJEXkmSJNw3KRkfLhwDf50aWYW1mP/OdhRWu+9puH/fUojaZjOSIvyxYCwvOCTPwsJCRF7tysHR+PLh8egT4ouimmbMf2c7thfUiI7VadUGE/7OCw7Jg/EVTUReb3BMEL5eNAGjEkPQ0GrBnR/txL+zS0TH6pQ3Nxx1XHAYH4w5vOCQPBALCxERgMhAPf59/xWYNyIOVruMZ1bm4g+rDsFmV/4OouM1ze0F68k5vOCQPBMLCxFRGx+tGq8vGIHH206G/XBbEe7/ZBcMRovgZJf26tojsNplTBkYifEpEaLjEPUIFhYiojNIkoRHpg/AW7eOhF6jwoa8Ktz4bhZK65R5lH/uiQZ8u68MkgQ8OZsXHJLnYmEhIrqAuWlx+PwXmYgM1CO/0oD57/yI3cV1omOdx3kE/7z0OF5wSB6NhYWI6CLSE0Lw38UTMDQ2CDVNZtzyfja+3ntSdKx2W49WY1tBDbRqCY/PHCQ6DlGPYmEhIrqE2GBfrHgwEzOHRsNss+PR/+Tg1R/yYRe8GNdul/HSGl5wSN6DhYWI6DL89Rq8d/vo9uP839xQgMXL96DVbBOWaVVu+ekLDqfxgkPyfD1WWF588UWMHz8efn5+CAkJueDXlJSU4JprroGfnx+ioqLwxBNPwGq19lQkIqIuU6kkPDVnMF65MQ1atYTvcisw7+1t+Ol4769rMVvt+L//OS44fGByMsID9L2egai39VhhMZvNuOmmm/DQQw9d8PM2mw3XXHMNzGYztm/fjn/84x9YtmwZnn322Z6KRETUbTeNScA/781AuL8ORyqbcNN7WXhixT7UNpl6LcPynSUoqWtBRIAe9/KCQ/ISktzD96ovW7YMjz76KOrr68/6+Jo1azB37lyUlZUhOjoaAPDee+/hySefRHV1NXS6jl2J3tjYiODgYDQ0NCAoiCvkiah3nGo24+X/5WH5zlIAQLCvFk/OHoyfj02AStUzB7e1mK1YvrMUf113BI1GK/5wXSruuKJvj/wsop7W2fdvYWtYsrKyMHz48PayAgCzZs1CY2MjDh48eNHvM5lMaGxsPOtBRNTbQv11WHp9Gr56eDyGxAahodWCZ1bm4vp3t+PAyQaX/qyGVgve2nAUE/+8EX9YdQiNRiuG9wnGz3nBIXkRYXePV1RUnFVWALT/uaKi4qLft3TpUvz+97/v0WxERB01KjEU3y6egE+yivHa2iPIKa3Hz97ahjsz++HxmQMR6KPt8t9d02TCR9uK8GlWMQwmx/q+xDA/PDglBTeM7sMLDsmrdOrV/tRTT0GSpEs+8vLyeiorAODpp59GQ0ND+6O0tLRHfx4R0eVo1CrcMzEJ6x+fgrlpsbDLwLLtxzH91c34774ydHbmvbyhFc//9yAm/nkD3tl0DAaTFQOiAvD6ghHY8PgU3JqRCL1G3UP/GiJl6tQIy+OPP4677rrrkl+TnJzcob8rJiYGO3fuPOtjlZWV7Z+7GL1eD72eK+KJSHmig3zw1q2jsGBsNZ795iCKaprxy+V78flPpXhh3jAkRwZc8vuP1zTjvc3H8OWeE7DYHCUnLT4Yi6b1x1VDontsbQyRO+hUYYmMjERkZKRLfnBmZiZefPFFVFVVISoqCgCwdu1aBAUFYejQoS75GUREIkwaEIk1v5qE97cU4q2NBdhWUIPZr2/FL6YkY9G0/vDRnj06klfRiHc2HsOq/WVwnkeXkRSGxVf2x8T+Ebx9mQg9uIalpKQEdXV1KCkpgc1mQ05ODgCgf//+CAgIwMyZMzF06FDccccdePnll1FRUYHf/va3WLRoEUdQiMjt+WjV+OX0AZg3Ig7P/fcgNuVX480NBfg65yRe+Fkqpg2OQk5pPd7aUIB1hyvbv2/aoEgsmtYfY/qFCUxPpDw9tq35rrvuwj/+8Y/zPr5x40ZMnToVAFBcXIyHHnoImzZtgr+/PxYuXIiXXnoJGk3HexS3NROR0smyjP8drMDvvz2E8gYjACA50h+F1c0AAEkCrk6NxUNTU5DaJ1hkVKJe09n37x4/h6WnsbAQkbtoNlnx1/VH8eG2ItjsMtQqCdeN6IOHpqagf9Sl17cQeZrOvn8L29ZMRORt/PUaPHP1ENwwKh6b8qtw9fBYXlpI1EEsLEREvWxQTCAGxQSKjkHkVnjqEBERESkeCwsREREpHgsLERERKR4LCxERESkeCwsREREpHgsLERERKR4LCxERESkeCwsREREpHgsLERERKR4LCxERESkeCwsREREpHgsLERERKR4LCxERESme29/WLMsyAKCxsVFwEiIiIuoo5/u28338cty+sBgMBgBAQkKC4CRERETUWQaDAcHBwZf9OknuaLVRKLvdjrKyMgQGBkKSJJf+3Y2NjUhISEBpaSmCgoJc+nd7Kj5nXcPnrWv4vHUen7Ou4fPWNZd63mRZhsFgQFxcHFSqy69QcfsRFpVKhfj4+B79GUFBQXyBdhKfs67h89Y1fN46j89Z1/B565qLPW8dGVlx4qJbIiIiUjwWFiIiIlI8FpZL0Ov1eO6556DX60VHcRt8zrqGz1vX8HnrPD5nXcPnrWtc+by5/aJbIiIi8nwcYSEiIiLFY2EhIiIixWNhISIiIsVjYSEiIiLFY2G5iLfffhv9+vWDj48PMjIysHPnTtGRFO3555+HJElnPQYPHiw6luJs2bIF1157LeLi4iBJEr7++uuzPi/LMp599lnExsbC19cXM2bMwNGjR8WEVYjLPWd33XXXea+92bNniwmrIEuXLsXYsWMRGBiIqKgoXHfddcjPzz/ra4xGIxYtWoTw8HAEBATghhtuQGVlpaDE4nXkOZs6dep5r7cHH3xQUGJlePfdd5GWltZ+OFxmZibWrFnT/nlXvc5YWC7gP//5D5YsWYLnnnsOe/bsQXp6OmbNmoWqqirR0RRt2LBhKC8vb39s27ZNdCTFaW5uRnp6Ot5+++0Lfv7ll1/GG2+8gffeew/Z2dnw9/fHrFmzYDQaezmpclzuOQOA2bNnn/XaW758eS8mVKbNmzdj0aJF2LFjB9auXQuLxYKZM2eiubm5/Wsee+wxfPvtt1ixYgU2b96MsrIyXH/99QJTi9WR5wwA7r///rNeby+//LKgxMoQHx+Pl156Cbt378auXbtw5ZVXYt68eTh48CAAF77OZDrPuHHj5EWLFrX/2WazyXFxcfLSpUsFplK25557Tk5PTxcdw60AkFeuXNn+Z7vdLsfExMivvPJK+8fq6+tlvV4vL1++XEBC5Tn3OZNlWV64cKE8b948IXncSVVVlQxA3rx5syzLjteWVquVV6xY0f41hw8flgHIWVlZomIqyrnPmSzL8pQpU+Rf/epX4kK5idDQUPmDDz5w6euMIyznMJvN2L17N2bMmNH+MZVKhRkzZiArK0tgMuU7evQo4uLikJycjNtuuw0lJSWiI7mVoqIiVFRUnPXaCw4ORkZGBl97l7Fp0yZERUVh0KBBeOihh1BbWys6kuI0NDQAAMLCwgAAu3fvhsViOev1NnjwYCQmJvL11ubc58zpX//6FyIiIpCamoqnn34aLS0tIuIpks1mw2effYbm5mZkZma69HXm9pcfulpNTQ1sNhuio6PP+nh0dDTy8vIEpVK+jIwMLFu2DIMGDUJ5eTl+//vfY9KkSThw4AACAwNFx3MLFRUVAHDB157zc3S+2bNn4/rrr0dSUhKOHTuGZ555BnPmzEFWVhbUarXoeIpgt9vx6KOPYsKECUhNTQXgeL3pdDqEhISc9bV8vTlc6DkDgFtvvRV9+/ZFXFwc9u/fjyeffBL5+fn46quvBKYVLzc3F5mZmTAajQgICMDKlSsxdOhQ5OTkuOx1xsJCLjFnzpz2/56WloaMjAz07dsXn3/+Oe69916BycjT/fznP2//78OHD0daWhpSUlKwadMmTJ8+XWAy5Vi0aBEOHDjAdWWdcLHn7IEHHmj/78OHD0dsbCymT5+OY8eOISUlpbdjKsagQYOQk5ODhoYGfPHFF1i4cCE2b97s0p/BKaFzREREQK1Wn7eCubKyEjExMYJSuZ+QkBAMHDgQBQUFoqO4Defri6+97klOTkZERARfe20WL16MVatWYePGjYiPj2//eExMDMxmM+rr68/6er7eLv6cXUhGRgYAeP3rTafToX///hg9ejSWLl2K9PR0/PWvf3Xp64yF5Rw6nQ6jR4/G+vXr2z9mt9uxfv16ZGZmCkzmXpqamnDs2DHExsaKjuI2kpKSEBMTc9Zrr7GxEdnZ2XztdcKJEydQW1vr9a89WZaxePFirFy5Ehs2bEBSUtJZnx89ejS0Wu1Zr7f8/HyUlJR47evtcs/ZheTk5ACA17/ezmW322EymVz7OnPtumDP8Nlnn8l6vV5etmyZfOjQIfmBBx6QQ0JC5IqKCtHRFOvxxx+XN23aJBcVFck//vijPGPGDDkiIkKuqqoSHU1RDAaDvHfvXnnv3r0yAPm1116T9+7dKxcXF8uyLMsvvfSSHBISIn/zzTfy/v375Xnz5slJSUlya2ur4OTiXOo5MxgM8q9//Ws5KytLLioqktetWyePGjVKHjBggGw0GkVHF+qhhx6Sg4OD5U2bNsnl5eXtj5aWlvavefDBB+XExER5w4YN8q5du+TMzEw5MzNTYGqxLvecFRQUyC+88IK8a9cuuaioSP7mm2/k5ORkefLkyYKTi/XUU0/JmzdvlouKiuT9+/fLTz31lCxJkvzDDz/Isuy61xkLy0W8+eabcmJioqzT6eRx48bJO3bsEB1J0RYsWCDHxsbKOp1O7tOnj7xgwQK5oKBAdCzF2bhxowzgvMfChQtlWXZsbf7d734nR0dHy3q9Xp4+fbqcn58vNrRgl3rOWlpa5JkzZ8qRkZGyVquV+/btK99///385UKWL/icAZA//vjj9q9pbW2VH374YTk0NFT28/OT58+fL5eXl4sLLdjlnrOSkhJ58uTJclhYmKzX6+X+/fvLTzzxhNzQ0CA2uGD33HOP3LdvX1mn08mRkZHy9OnT28uKLLvudSbJsix3ccSHiIiIqFdwDQsREREpHgsLERERKR4LCxERESkeCwsREREpHgsLERERKR4LCxERESkeCwsREREpHgsLERERKR4LCxERESkeCwsREREpHgsLERERKR4LCxERESne/wfcxZ79hWKmlgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = 0.8\n", + "num_series = time_series_data.shape[1]\n", + "X = get_distance_matrix(time_series_data, window_size=30)\n", + "X = X.reshape(X.shape[0], 1, X.shape[1], X.shape[2])\n", + "print(X.shape)\n", + "N = int(N * len(X))\n", + "X_train, Y_train, X_test, Y_test = X[:N], X[1:N+1], X[N:-1], X[N+1:]\n", + "\n", + "plt.plot(time_series_data['Sine_1'][:30])\n", + "\n", + "print('- - - - -')\n", + "print(pred.shape)\n", + "print(X_test[1].shape)\n", + "print(X_test[0])\n", + "print(X_test[1])\n", + "print(X_test[2])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716300730.sizzziy-pc.24193.0 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716300730.sizzziy-pc.24193.0 new file mode 100644 index 0000000..31b2403 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716300730.sizzziy-pc.24193.0 differ diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716300744.sizzziy-pc.24193.1 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716300744.sizzziy-pc.24193.1 new file mode 100644 index 0000000..63ae291 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716300744.sizzziy-pc.24193.1 differ diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716302058.sizzziy-pc.214066.0 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716302058.sizzziy-pc.214066.0 new file mode 100644 index 0000000..83a10c6 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716302058.sizzziy-pc.214066.0 differ diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384282.sizzziy-pc.7729.0 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384282.sizzziy-pc.7729.0 new file mode 100644 index 0000000..3844d85 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384282.sizzziy-pc.7729.0 differ diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384329.sizzziy-pc.7729.1 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384329.sizzziy-pc.7729.1 new file mode 100644 index 0000000..4d411f9 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384329.sizzziy-pc.7729.1 differ diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384357.sizzziy-pc.7729.2 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384357.sizzziy-pc.7729.2 new file mode 100644 index 0000000..7ca9856 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384357.sizzziy-pc.7729.2 differ diff --git a/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384536.sizzziy-pc.7729.3 b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384536.sizzziy-pc.7729.3 new file mode 100644 index 0000000..ee1ea4b Binary files /dev/null and b/Divilkovskiy2024SourceSpace/code/n_epochs:1000,sigma:100,batch_sz:128,lr:0.0001/events.out.tfevents.1716384536.sizzziy-pc.7729.3 differ diff --git a/Divilkovskiy2024SourceSpace/paper/figures/NonIdeal.png b/Divilkovskiy2024SourceSpace/paper/figures/NonIdeal.png new file mode 100644 index 0000000..940349e Binary files /dev/null and b/Divilkovskiy2024SourceSpace/paper/figures/NonIdeal.png differ diff --git a/Divilkovskiy2024SourceSpace/paper/figures/NonIdealBetter.png b/Divilkovskiy2024SourceSpace/paper/figures/NonIdealBetter.png new file mode 100644 index 0000000..30b6d87 Binary files /dev/null and b/Divilkovskiy2024SourceSpace/paper/figures/NonIdealBetter.png differ diff --git a/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.pdf b/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.pdf index 4873a0e..c62795b 100644 Binary files a/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.pdf and b/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.pdf differ diff --git a/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.tex b/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.tex index 6381b31..98b38ae 100644 --- a/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.tex +++ b/Divilkovskiy2024SourceSpace/slides/Divilkovskiy2024Presentation_ru.tex @@ -133,7 +133,7 @@ \end{frame} \begin{frame}{Теоретическая часть} - \textbf{Утверждение.} \textit{Для любой метрики, введённой в пространстве временных рядов $\mathbb{R}^t$, существует более одного способа восстановить исходные временные ряды по построенной матрице попарных расстояний.} + \textbf{Теорема 1.} \textit{Для любой метрики, введённой в пространстве временных рядов $\mathbb{R}^t$, существует более одного способа восстановить исходные временные ряды по построенной матрице попарных расстояний.} \textbf{Доказательство.} \begin{itemize} @@ -144,31 +144,73 @@ \item Метрика~--- строго \textbf{сюръекция}. \end{itemize} + + \textbf{Следствие из доказательства.} \textit{Данное утверждение выполняется для произвольной непрерывной функции, в том числе попарной корреляции.} \end{frame} %---------------------------------------------------------------------------------------------------------- -\begin{frame}{Общий вид модели} - - \includegraphics[width=1\textwidth]{Model} +\begin{frame}{Попарная корреляция} + \begin{gather*} + \hat{\Sigma}_T = \frac{1}{T} \sum_{t=1}^{T} (x_t - \mu_T)(x_t - \mu_T)^T\\ + \mu_T = \frac{1}{T} \sum_{t=1}^{T} x_t + \end{gather*} + \textbf{Теорема 2.} \textit{В случае, если мы точно спрогнозировали матрицу расстояний, функция} $||\hat{\Sigma}_{t+1} - \bar{\Sigma}_{t+1}||_2^2$ \textit{будет иметь два минимума, задающихся следующим образом:} + \begin{align*} + \hat{y_i} &= y_i\\ + \hat{y_i} &= \frac{2}{T-1} \sum_{k=1}^{T-1} a_{ik} - y_i, + \end{align*} + \textit{где} $\hat{y}_i$~--- $i$\textit{-я координата предсказываемого значения ряда в момент $T+1$, $A=(a_{ik})$~--- исходный многомерных временной ряд,} $y_i$~--- \textit{истинные значения ряда в момент} $T+1$. \end{frame} +%---------------------------------------------------------------------------------------------------------- +\begin{frame}{Явный вид минимума} + \textbf{Теорема 3.} \textit{Минимум функции $||\hat{\Sigma}_{t+1} - \bar{\Sigma}_{t+1}||_2^2$ достигается на \[\pm\sqrt{\lambda_1} u_1 + \mu_T,\] где $\lambda_1$--- первое сингулярное значение, $u_1$--- первый левый сигнулярный вектор матрицы $A=\left(\frac{T}{T+1} \cdot \Sigma_T - \Sigma_{T+1}\right) \cdot \frac{(T+1)^2}{T}$} + + $\bigskip$ - -\begin{frame}{Transformer} - -Cross-dimensional and cross-time self-attention. - -\includegraphics[width=1\textwidth]{transformer} - + Эта теорема позволяет находить оба минимума функции намного быстрее, чем при использовании стандартных методов оптимизации. + +\end{frame} +%---------------------------------------------------------------------------------------------------------- +\begin{frame}{Алгоритм прогноза} + Предлагается следующий алгоритм: + + 1. Зафиксируем $T$ и $T': T \neq T'$. + + 2. Для $T$ и $T'$ произведем полученный выше алгоритм и получим наборы ответов: $[ans_1, ans_2], [ans'_1, ans'_2]$. + + 3. Найдём тот ответ, который лежит в пересечении. + \begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{TwoTAlgo.png} + \caption{Возвращение прогноза при идеальном прогнозе Sigma. $T=20$, $T'=10$} + \label{fig:fig3} + \end{figure} +\end{frame} +%---------------------------------------------------------------------------------------------------------- +\begin{frame}{Алгоритм прогноза} + \begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{NonIdeal.png} + \caption{Возвращение прогноза при неидеальном прогнозе Sigma $+ N(0, 0.1)$ с использованием двух матриц. MAE: 0.3662} + \label{fig:fig4} + \end{figure} + \begin{figure}[H] + \centering + \includegraphics[width=\textwidth]{NonIdealBetter.png} + \caption{Возвращение прогноза при неидеальном прогнозе Sigma $+ N(0, 0.01)$ с использованием трёх матриц. MAE: 0.03} + \label{fig:fig5} + \end{figure} \end{frame} %---------------------------------------------------------------------------------------------------------- \begin{frame}{Заключение} \begin{block}{Выводы} \begin{itemize} \item Показана невозможность использования метрического метода прогноза временных рядов. - \item Предлагается использовать модели, которые помимо матрицы расстояний получают информацию об исходных рядах. + \item Показан явный вид минимума функции, минимизирующий ошибку. + \item Предложен алгоритм восстановления при точном и неточном прогнозе. \end{itemize} \end{block} - \begin{block}{Планы} + \begin{block}{Возможные пути развития} \begin{itemize} \item Оценка диаметра ошибки \end{itemize} diff --git a/Divilkovskiy2024SourceSpace/slides/main.pdf b/Divilkovskiy2024SourceSpace/slides/main.pdf index 4b1f803..d86b1b7 100644 Binary files a/Divilkovskiy2024SourceSpace/slides/main.pdf and b/Divilkovskiy2024SourceSpace/slides/main.pdf differ